Pythonでコンパイルを書くときに、llvmlite
を使用して中間のLLVM IRを生成する。レクサーとパーサーが完成しました。今はコード生成を行っています。コンパイラは動的で弱く型付けされているので、私は実行時に割り当てのような何かをする必要があります。このため、私はすでにC言語でいくつかの関数を実装していますが、今はllvmliteのbuilder.call
を使ってこれらの関数を呼び出したいと思います。llvmliteのリンクC
これを行う方法のドキュメントまたは例は見つかりませんでした。
この関数は単なる例ですが、実際の関数は非常に大きいです。
C:
int some_function(int a)
{
return a + 4;
}
のPython:
...
main_ty = ir.FunctionType(ir.IntType(32), [])
func = ir.Function(module, main_ty, 'main')
block = func.append_basic_block('entry')
builder = ir.IRBuilder(block)
# I want to do something like this...
ret = builder.call(some_function, [ir.Constant(ir.IntType(32), 34)]);
...
私が直接llvmliteビルダーを使用して関数を書くことができますが、はるかに迅速、クリーンかつ簡単になりますが、Cでそれを行いますどんな助けも歓迎です!
レクサー&パーサーの開発にどのツールを使用しましたか? –