【问题标题】:Modify Parse Tree修改解析树
【发布时间】:2021-03-18 15:31:07
【问题描述】:

我有一个 sql grammar 的 ANTLR ParseTree。

示例:

我的目标是编辑这棵树,以便我可以删除所有中间(booleanExpression、predicated、valueExpression、primaryExpression)节点。 我已经探索了访问者和听众,但他们并没有为我生成树。而且我不想碰语法,因为它是官方来源。

那我该怎么做呢? 谢谢

【问题讨论】:

标签: antlr antlr4 parse-tree


【解决方案1】:

在 ANTLR 的 API 中没有这样的功能(删除/改变 ParseTree)。您必须自己遍历树并创建ParseTree 的副本并忽略某些您不想要/不需要的子树。

【讨论】:

    【解决方案2】:

    我通常发现 ParseTree 太麻烦了(这正是你所展示的原因)。我不知道有任何自动方式来改变内存中的树。 (可能是一个有趣的尝试项目。)

    我已经编写了一些通用方法来简化该过程。 “最好的”是我写了一个小的 DSL 来定义我想要的结构。它为这些类生成了类以及 ANTLR 风格的访问者和听众。然后,我使用一个监听器将 ANTLR ParseTree 转换为我的 ideal 树,并使用该结构编写了我的其余代码,该结构更简单,树。您可以让侦听器/访问者生成您自己设计的树,作为处理 ParseTree 的工件,但这与我来的一样接近。

    在流程的早期进行设置实际上是一项相对较小的工作,并且只占实现语言的整体工作量的一小部分(因此,非常值得付出努力)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2013-09-07
      • 2011-10-03
      • 2012-06-22
      • 2016-01-05
      相关资源
      最近更新 更多