Bat*_*ata 5 c python compiler-construction llvm llvmlite
我用Python编写了一个编译器,llvmlite用于生成中间LLVM IR。Lexer和解析器已完成,现在我正在执行代码生成。编译器将是动态的且类型微弱的,因此我将需要在运行时做一些事情,例如分配。为此,我已经在C语言中实现了一些功能,现在我想使用builder.callllvmlite 调用这些功能。
我还没有找到文档或如何执行此操作的示例。
这个函数只是一个简单的例子,实际的函数要大得多。
C:
int some_function(int a)
{
return a + 4;
}
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
...
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)]);
...
Run Code Online (Sandbox Code Playgroud)
我可以使用llvmlite构建器直接编写函数,但是用C语言可以更加快捷,简洁和方便。欢迎任何帮助!
小智 5
您可以导入包含运行时的动态库。
llvmlite.binding.load_library_permanently("runtime.so")
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地生成正常的函数调用。
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |