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