python - 使用 AST 和 Tree walker 来翻译 DSL,而不是直接从解析器语法解析和翻译对象,有什么优点?

标签 python antlr3

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

最佳答案

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

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

关于python - 使用 AST 和 Tree walker 来翻译 DSL,而不是直接从解析器语法解析和翻译对象,有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081981/

相关文章:

python - matplotlib 中的 MPLCCONFIGDIR 错误

antlr - 如何使用 ANTLR 区分保留字和变量?

c# - 我如何在 ANTLR 中实现将两个节点合二为一的解析器规则?

python 查找具有共享元素的集合

python - 互联网服务提供商计划

antlr - ANTLR中是否存在逻辑AND和NOT?

c++ - LL(*) 解析器(如antlr3)可以解析C++吗?

java - 如何在 Antlr-4 词法分析器规则的操作中获取 token 属性

python - 从 SPARK 中的另一个 RDD 返回最大 N 值的 RDD

python - 在Selenium中查找隐藏的超链接(Python网络爬虫)