0

我需要在几周内完成我的 small-c 到 p-code 编译器,但我真的很难理解如何制作我的符号表和随后的代码生成阶段。我可以从哪里开始,我已经看过几个例子,但我对整个概念的理解不太好。

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

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

4

1 回答 1

1

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

作为一个总体思路:在您的语言中,您有将值分配给标识符 (LHS) 的规则以及将标识符用于表达式的其他规则,包括简单分配 (RHS)。这些是您必须在符号表中收集的符号。可能有更多符号,例如类型或变量定义。您在语法树中拥有所有这些。您可以通过定义语法规则来简化您的生活,这样您就可以为每种标识符类型(具有自己的令牌类型)拥有自己的规则,例如:

variable_name:
    identifier -> ^(VARIABLE_NAME identifier)
;

typedef_name:
    identifier -> ^(TYPEDEF_NAME identifier)
;

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

于 2014-07-03T07:35:10.357 回答