25

LLVMの上にプログラミング言語コンパイラをブートストラップしています。現在、自己コンパイル型のCのサブセット用のコンパイラーの作成はほぼ完了しています。それが終わったら、言語をCからブートストラップし、自己コンパイルを維持します。

コンパイラーは自己コンパイル型なので、私が使用するCの機能はすべて実装する必要があります。したがって、それは一定のバランスです。使用する機能が多すぎると、必要以上に実装する必要がありますが、十分な機能を実装しないと、コードを記述できなくなります。

そのような機能の1つがLLVMバインディングです。LLVMCバインディングなしでLLVM中間表現を生成することは困難です。ただし、LLVMバインディングを使用する場合は、Cから分岐するときにそれらを再度実装する必要があります。

ここで問題が発生しているので、別の解決策を探しています。何か案は?

4

3 に答える 3

10

LLVM C バインディングを使用することもできますが、そのためには言語が十分な C を理解している必要があります。

もう 1 つの方法は、LLVM アセンブリ言語 (テキスト ファイル) を書き出し、llvm-as を使用してそれをビットコードに変換することです。


編集:

私はあなたの質問を読み直しました.llvm-asとバインディングのことはすでに理解していると思います.

あなたの言語はおそらくサポート ライブラリなどのために C にバインドできるようにしたいと思うでしょう。今のところ C バインディングを使用し、さらに進んだら独自のバインディングを記述してください。

于 2010-01-05T21:20:15.357 に答える
5

ANTLR + StringTemplate + LLVM を使用するための戦略

HTH

于 2010-10-27T00:20:47.150 に答える
1

ある時点で、おそらく C ライブラリを拡張モジュールとしてラップするための API を提供したいと思うでしょう。LLVM はすでにこれをサポートしている可能性があります (parrot vm がサポートしていることは知っています)。LLVM 独自の API をラップするために使用している拡張システムを使用しないのはなぜですか? 彼らもすでにそれをサポートしているかもしれません。:)

于 2010-01-05T21:25:41.227 に答える