我正在使用 Antlr3 创建领域特定语言。到目前为止,我已经直接从解析器语法内部翻译了解析的对象。通过查看 AST 和 Tree Walker 的示例,我了解到它们通常用于将语法划分为层次树并从节点翻译对象。目前,我也在使用解析器语法执行相同类型的操作,其中我翻译每个子规则中的对象。我很高兴知道使用 AST 和 Tree walker 相对于仅使用解析器语法的优势。预先感谢您。
最佳答案
使用树解析器的一个优点是您可以将它们组织成多个 channel 。对于我所做的一些翻译工作,我能够使用七个 channel 并将逻辑步骤单独放入自己的 channel 中。一轮进行表达式分析,一轮进行控制流分析,其他轮使用该分析来消除死代码或简化特殊情况的翻译。
我个人喜欢使用树语法,就像我喜欢使用文本语法解析器一样。它允许我使用规则来组织解析上下文。如果出于识别目的需要区分顶级表达式和子表达式,那么可以很容易地执行诸如结构规则之类的操作来识别顶级表达式和子表达式。您在常规解析器中使用的所有属性和上下文管理都可以应用于树解析器。
关于python - 使用 AST 和 Tree walker 来翻译 DSL,而不是直接从解析器语法解析和翻译对象,有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081981/