コード生成

提供: langdev
移動: 案内検索

ASTを元に、実際にバイナリを吐くフェーズ。

GCC/LLVM[編集]

GCCLLVMでは複数の言語やターゲットに対応するため、複数の構文解析部分(フロンドエンド)とコード生成部分(バックエンド)を持つ。 それらは共通のインターフェースで接続するため組み合わせを変えて利用できる。

自分で作ったフロントエンドをバックエンドに繋げる事ができれば、バックエンドを使う事ができる。

他の言語を使う[編集]

例えば、自分言語のコンパイラがC言語のソースを出力すれば、GCCを使ってネイティブコードを作る事ができる。

近年、CoffeeScriptTypeScript等、JavaScriptを出力する言語も増えている。

JavaVM[編集]

JavaVM上で動いているバイトコードは、例えばX86のネイティブコードより高級であるため、生成が簡単かもしれない。

OW2 ASM[編集]

http://asm.ow2.org/

Javaバイトコードを編集、生成するためのフレームワーク。 Clojureなどが利用している。

Javaassist[編集]

http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

同じくJavaバイトコードの編集、生成ができるフレームワーク。 型宣言が内部表現ではなく、Javaライクな表現で使えるため、Javaバイトコードに詳しくなくても入門しやすいかもしれない。