Antlr 3.2.语法符号表(小C)



我需要在几周内完成我的小c到p代码编译器,但我真的很难理解如何使我的符号表和随后的代码生成阶段。我从哪里开始呢?我已经看到了一些例子,但是我没有很好地理解整个概念。

正如你在附件语法中看到的,许多重写规则正在被使用,语法实际上很长,不幸的是花了很长时间才从YACC语法中派生出我们不需要的部分,但在这一点上,我不知道以后这是否会影响我们,当我们试图提出代码生成。

这是一个相当宽泛的问题,很难从整体上回答。你应该把更大的任务分解成更小的子任务,然后在这里问问题。

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

variable_name:
    identifier -> ^(VARIABLE_NAME identifier)
;
typedef_name:
    identifier -> ^(TYPEDEF_NAME identifier)
;

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

最新更新