我最近开始学习 Antlr 并下载 AntlrWorks 1.4,据说它包括 Antlr 3.2。现在,3.2 应该支持重写规则语法,如 '->' 但我什至无法获得我可以基于 Lexer 或 Parser 规则构建的最简单的情况:
grammar TestRewrite;
ab : a b -> a;
a : A;
b : B;
A : 'a';
B : 'b';
当我尝试编译它时,我得到了错误:
[11:26:29] error(100): TestRewrite.g:3:13: syntax error: antlr: TestRewrite.g:3:13: unexpected token: a
为什么是这样。构造看起来很简单:ab 应该生成一棵树,其中只捕获 a 节点。你不就是这样吗?我不能让它与生根('^')或忽略('!')一起工作。我很困惑。