在基于LLVM的编译器中如何处理符号表?

在基于LLVM的编译器中如何处理符号表?,llvm,Llvm,我阅读了使用LLVM编写玩具编译器的教程 但是关于符号表处理的内容并不多。 有一个命令llvm nm,用于显示以位码文件为输入的符号表。它只返回函数名。LLVM编译器如何处理没有符号表的局部变量和循环变量?如果不是这样,则符号表在其IR的LLVM内存表示中的处理方式不使用符号表。指令包含指向其操作数(及其用户)的直接内存链接,因此,如果您有一条指令并希望访问其操作数,只需遵循该链接,就不必在任何符号表中执行查找 有一些与LLVM上下文、模块、函数和基本块关联的列表,允许您访问包含的元素,但它们大

我阅读了使用LLVM编写玩具编译器的教程 但是关于符号表处理的内容并不多。
有一个命令llvm nm,用于显示以位码文件为输入的符号表。它只返回函数名。LLVM编译器如何处理没有符号表的局部变量和循环变量?如果不是这样,则符号表在其IR的LLVM内存表示中的处理方式不使用符号表。指令包含指向其操作数(及其用户)的直接内存链接,因此,如果您有一条指令并希望访问其操作数,只需遵循该链接,就不必在任何符号表中执行查找

有一些与LLVM上下文、模块、函数和基本块关联的列表,允许您访问包含的元素,但它们大多只是列表,而不是将名称与任何内容关联的表

当然,如果你想解析一个文本IR文件(ll),你可能需要一个符号表(或类似的东西)来解析并创建上面提到的链接;但是没有什么理由这么做,因为LLVM已经包含了这样一个解析器(而且该解析器确实使用了某种方式将“名称”与值关联起来——请参见
BitcodeReader
的实现)


至于生成IR的LLVM前端,这取决于您。我想说,如果你想解析C语言,使用符号表将非常有用。

你说的“符号表”是什么意思?符号表或标识符表是一种数据结构,用于存储程序中每个符号的信息。它存储类型、范围等详细信息。哈希表通常用于实现符号表,您认为它与LLVM IR有何关系?您仅有的“符号”是导出的条目(即全局变量和函数)。我不知道它是否与LLVM相关。但是,当我们研究编译器设计理论时,我们可以找到一种称为符号表的数据结构,它与编译器的所有阶段进行通信。当我们用LLVM实现一种语言时,应该有类似的机制..na?这就是我问的原因