【问题标题】:ANTLR Removing nodes on tree walkANTLR 删除树上的节点
【发布时间】:2012-11-28 13:01:52
【问题描述】:

我在 ANTLR 邮件列表档案中问过这个问题,但没有得到回复,所以我会在这里尝试。

在树遍历期间删除节点/树是否有问题?我想找到任何特定的子树并摆脱它们。我认为这条规则会起作用......

attribute  : ^(ATTRIBUTE ID ATTR_VALUE) -> ;

但我得到一个 NullPointerException。

另外,您能否编写通用规则来匹配具有一系列根标记的树?

tree : : ^(root attribute+ children+=.*) -> ^(root $children*);

fragment root : A | B;

我似乎一直在收到 EmptyRewriteExceptions :)

【问题讨论】:

    标签: c# parsing tree antlr abstract-syntax-tree


    【解决方案1】:

    在树遍历期间删除节点/树是否有问题?

    在某些情况下可能出错。例如,每当attribute(您刚刚重写以被删除)成为其他树的根时。可能还有其他原因,但这是其中之一。当attribute 永远是树中的主角时,我认为它不会造成任何伤害。如果这不能回答您的问题,请考虑发布 SSCCE(请务必发布实际的 SSCCE!)。

    另外,您能否编写通用规则来匹配具有一系列根标记的树?

    不,运算符+= 创建了ListCommon[Token/Tree]s。您需要将.* 移至另一条规则,如下所示(未经测试!):

    tree : ^(root attribute+ children) -> ^(root children);
    
    children : .* ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多