Orelang(俺言語) の LLVM IR コンパイラを作ってみた

  • 4
    いいね
  • 0
    コメント

9月末に「プログラミング言語を作る」という記事が投稿されました。俺の考えた最低の言語なので「俺言語」です。まずはそちらをお読みください。
http://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc

JSON形式でプログラムを記述し、それを実行するインタプリタです。多くの人たちが様々な言語で、俺言語インタプリタを実装し、大いに盛り上がりました。

私もC++版を投稿しました。
http://qiita.com/soramimi_jp/items/aa99c00a65579c2e25a2

あれから2ヶ月経ちましたが、最近仕事でLLVMを扱うことになったので、その勉強も兼ねて、俺言語コンパイラを作ってみました。

実際には LLVM IR という中間コードを生成するものなので、厳密にはコンパイラではありません。正しくは、コンパイラのフロントエンド、またはトランスパイラと呼ばれるものです。最終的には、clangコマンドを用いて、ネイティブ実行形式を生成できます。ここでは、広義な意味でコンパイラということにします。

https://github.com/soramimi/orec

使い方はMakefileをお読みください。

LinuxやmacOSなどで動作します。私はDebian/jessieで開発しました。あらかじめllvm/clangをインストールしておく必要があります。llvm/clangコマンドやインクルードやライブラリのパスが違うかもしれませんので、makeするとき、ファイルが見つからないなどのエラーが出た場合は、環境に応じてMakefileを修正してください。

言語の機能としては、演算子は +<= しか実装していません。制御構文は while のみです。関数は、数値を表示するためのprintだけです。