ANTLR-链接AST的节点
我想知道如何在语法文件中定义AST的节点具有“双亲”。例如,如果第一棵树的节点“D”也是节点“A”的子节点,我应该使用什么语法以使节点“D”看起来不重复(我想要类似于第二棵树的东西) 如果我使用类似于:ANTLR-链接AST的节点,antlr,abstract-syntax-tree,treenode,tree-grammar,Antlr,Abstract Syntax Tree,Treenode,Tree Grammar,我想知道如何在语法文件中定义AST的节点具有“双亲”。例如,如果第一棵树的节点“D”也是节点“A”的子节点,我应该使用什么语法以使节点“D”看起来不重复(我想要类似于第二棵树的东西) 如果我使用类似于: A B C D -> ^(A B ^(C D) D) 节点“D”将重复出现。好的,没有方便的API。您必须手动复制AST,然后将其插入您的重写规则: @parser::members { CommonTree copy(CommonTree original) { // ht
A B C D -> ^(A B ^(C D) D)
节点“D”将重复出现。好的,没有方便的API。您必须手动复制AST,然后将其插入您的重写规则:
@parser::members {
CommonTree copy(CommonTree original) {
// http://stackoverflow.com/questions/6781019/antlr-duplicate-a-tree
return copyOfOriginal;
}
}
rule
: a b c d -> ^(a b ^(c d) {copy($d.tree)})
;
所以基本上你要的是一张图而不是一棵树?我不认为ANTLR有这样的东西。
@parser::members {
CommonTree copy(CommonTree original) {
// http://stackoverflow.com/questions/6781019/antlr-duplicate-a-tree
return copyOfOriginal;
}
}
rule
: a b c d -> ^(a b ^(c d) {copy($d.tree)})
;