我有以下几点
rule : A B;
A : 'a_e' | 'a';
B : '_b';输入:
a_b //dont work
a_e_b //works为什么lexer在匹配这一点上有问题?当ANTLR匹配'a_b‘中的'a_’时,它是不是应该回溯或使用前视或其他方法来查看它不能匹配标记A,然后决定将标记A匹配为'a‘,然后继续将标记B匹配为'_b'?
我想我误解了一些关于antlr如何工作的非常基本的东西。我试着在ANTLR文档和谷歌上阅读它。但我几乎没有使用词法分析器和解析器的经验。
非常感谢你的帮助。
发布于 2011-12-10 02:17:45
你需要使用一个语法谓词来区分'a','_','e‘和'b’。
下面的方法将会起作用:
grammar T;
rule : A B;
B : '_b';
A : ('a_e')=>'a_e'
| 'a' ;这会像您预期的那样解析'a_e_b‘和'a_b’。
建议查看ANTLR参考资料的第13章。
https://stackoverflow.com/questions/3444717
复制相似问题