我是一名经验丰富的yacc / bison滥用者。我习惯于建造自己的树木,然后遍历它们。那么,现在,切换到ANTLR3(为什么3?因为4不支持Python,这就是原因!)...我有以下语法:
symbol : ID fields -> ^(NAME ID fields);
fields : (DOT ID)* -> ^(FIELD ID*);
我的树语法片段是:
names: ^(NAME id=. fields) ;
fields: ^(FIELD .*) ;
“let z = a.b.c”的结果树是:
(LETS (LET z (NAME a (FIELD b c))))
步行者说:
来自第1:10行的节点不匹配输入u'b'期待
引入+而不是*的各种尝试在其他方面都失败了。也许有关于树木行走者如何为*和+工作的文件,但我没有找到它(就像一些人和冰箱?)。