我通过教程使用 LLVM http://llvm.org/releases/3.1/docs/tutorial/编写了一个玩具编译器, 但是关于符号表处理的内容并不多。有一个命令 llvm-nm 显示符号表,它以位码文件作为输入。它只返回函数名。LLVM 编译器如何在没有符号表的情况下处理局部变量和循环变量?如果不是这样,符号表是如何处理的
问问题
3036 次
1 回答
5
其 IR 的 LLVM 内存表示不使用符号表。指令包含指向其操作数(及其用户)的直接内存链接,因此如果您有一条指令并想要访问其操作数,只需点击该链接,您就不必在任何符号表中执行查找。
有一些与 LLVM 上下文、模块、函数和基本块相关联的列表,它们允许您访问包含的元素,但它们大多只是列表,而不是将名称与任何东西相关联的表。
当然,如果您想解析文本 IR 文件 (ll),您可能需要一个符号表(或类似的东西)来执行此操作并创建上述链接;但是看到 LLVM 已经包含这样的解析器(并且该解析器确实使用某种方式将“名称”与值相关联 - 请参阅 的实现BitcodeReader
),几乎没有理由这样做。
至于用于生成 IR 的 LLVM 前端 - 这取决于您。我想说,如果您想解析类似 C 的语言,使用符号表将非常有用。
于 2012-11-01T11:42:59.727 回答