3

我想为微型 C 语言构建我自己的编译器:我已经制作了我的语法,使用 ANTLR 构建了一个 AST(抽象语法树),并实现了我的符号表(遵循 Grosemberg 代码

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

  • 我是否必须通过 y AST 并根据我找到的令牌在我的符号表中放置一个新符号或创建一个新范围...?
  • 我是否必须在我的语法中使用语义函数,我听说过 tree Walker...?

这一步我有点迷茫,有人有例子吗,或者可以告诉我该怎么做吗?

4

1 回答 1

3

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

在 ANTLR 4 中,您将改为编写一个执行推送/弹出并添加条目的侦听器。如果您的语法支持像 C 这样的 typedef,您需要在语法操作中处理它,因为符号表会影响解析。不过,Tiny C 不需要这样做。

于 2013-05-04T14:42:30.530 回答