编译器:填充符号表的最佳方法是什么?

时间:2013-05-03 16:13:32

标签: compiler-construction antlr abstract-syntax-tree symbol-table

我想为小C语言构建自己的编译器: 我已经完成了我的语法,使用ANTLR构建了一个AST(抽象语法树),并实现了我的符号表(遵循GRosemberg code

我必须用我的符号填充我的符号表,但我真的不知道如何......

  • 我是否必须运行y AST并根据我找到的令牌在符号表中添加新符号或创建新范围...?
  • 我必须在语法中使用语义功能,我听说过一棵树沃克......?

我这一步有点失落,有人有例子,或者可以告诉我该怎么办?

1 个答案:

答案 0 :(得分:2)

对于ANTLR 3& 2您可以在解析器操作中轻松完成。跨越作用域边界并在适当的位置添加条目时,必须推送和弹出作用域。您可以在http://www.antlr3.org/grammar/cgram/grammars/StdCParser.g的真实C解析器中查看如何执行此操作。如果您愿意,也可以在树解析器中执行此操作。

在ANTLR 4中,您将编写一个执行push / pop并添加条目的侦听器。如果您的语法支持类似C的typedef,您需要在语法操作中处理它,因为符号表会影响解析。但是,Tiny C不应该这样做。