Antlr 3.2。符号表来自语法(小C)

时间:2014-07-02 07:57:33

标签: compiler-construction code-generation grammar antlr3 symbol-table

我需要在几周内完成我的小型到p代码编译器,但我真的无法理解如何制作符号表和后续代码生成阶段。我在哪里可以开始,我已经看过几个例子,但我没有把整个概念搞得太好。

正如你在attached grammar中看到的那样,正在使用许多重写规则并且语法实际上很长,不幸地花了相当长的时间从YACC语法中省略了我们不会忽略的部分需要但是在这一点上我不知道以后这是否会影响我们在尝试提出代码时。

欢迎任何建议/提示,谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个相当广泛的问题,很难回答整体问题。您应该将更大的任务分解为更小的子任务,并在此处询问有关它们的问题。

作为一般概念:在您的语言中,您有规则为标识符(LHS)和其他采用表达式标识符的值分配值,包括简单赋值(RHS)。这些是您必须在符号表中收集的符号。可能有更多符号,如类型或变量定义。你在语法树中拥有所有这些。您可以通过定义语法规则来简化生活,这样您就可以为每种标识符类型(使用自己的标记类型)拥有自己的规则,例如:

variable_name:
    identifier -> ^(VARIABLE_NAME identifier)
;

typedef_name:
    identifier -> ^(TYPEDEF_NAME identifier)
;

等。这样,您可以轻松识别符号表的相关标记。然后,您只需要遍历语法树并从特殊标记中获取文本,这是一个直接的深度优先搜索。