1

我正在使用 Antlr3 创建领域特定语言。到目前为止,我已经直接从解析器语法内部翻译了解析的对象。通过 AST 和 Tree Walker 的示例,我了解到它们通常用于将语法划分为层次树并从节点翻译对象。目前我也在使用解析器语法做同样的动作,我从每个子规则中翻译对象。我很高兴知道使用 AST 和 Tree walker 比仅使用解析器语法的优势。提前谢谢你。

4

1 回答 1

1

使用树解析器的一个优点是您可以将它们组织成多个通道。对于我所做的一些翻译工作,我能够使用七次传递并将逻辑步骤分离到它们自己的传递中。一次进行表达式分析,一次进行控制流分析,其他人使用该分析来消除死代码或简化特殊情况的翻译。

我个人喜欢使用树语法,原因与我喜欢将解析器用于文本语法的原因相同。它允许我使用规则来组织解析上下文。如果您需要区分它们以进行识别,则可以很容易地执行结构规则之类的操作来识别顶级表达式与子表达式。您在常规解析器中使用的所有属性和上下文管理都可以应用于树解析器。

于 2013-03-02T01:40:22.680 回答