【发布时间】:2012-12-20 16:43:36
【问题描述】:
在AST rewrite rule with " * +" in antlr 上使用 devide group 技术的 AST 重写规则的问题之后。
我在 ANTLR 中生成 AST 时遇到了麻烦,再次 :)。这是我的 antlr 代码:
start : noun1+=n (prep noun2+=n (COMMA noun3+=n)*)*
-> ^(NOUN $noun1) (^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3)*)*
;
n : 'noun1'|'noun2'|'noun3'|'noun4'|'noun5';
prep : 'and'|'in';
COMMA : ',';
现在,输入:“noun1 and noun2, noun3 in noun4, noun5”,我得到了以下意想不到的 AST:
与 ANLRwork 中的“解析树”比较:
我认为 $noun3 变量包含“COMMA noun3+=n”中所有“n”的列表。因此,AST 解析器 ^(NOUN $noun3)* 将绘制所有“n”,而不会区分哪个“n”实际上属于“prep”。
有什么方法可以在 "(^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3))" 中进行分离>。我想要做的就是 AST 必须在 ANTLRwork 中使用“解析树”准确地绘制,没有标记 COMMA。
感谢您的帮助!
【问题讨论】:
标签: antlr antlrworks