我有以下
rule : A B;
A : 'a_e' | 'a';
B : '_b';
输入:
a_b //dont work
a_e_b //works
为什么词法分析器无法匹配?当ANTLR匹配'a_b'中的'a_'时,它应该回溯或使用前瞻或其他东西看它不能匹配令牌A然后决定将令牌A匹配为'a'然后继续将令牌B匹配为'_b'?
我认为我很难理解antlr如何运作的基本内容。我试过在ANTLR doc和google上阅读它。但是我对词法分析器和解析器的经验很少。
非常感谢您的帮助。
答案 0 :(得分:1)
你需要使用句法谓词来区分'a','_','e'和'b'。
以下内容可行:
grammar T;
rule : A B;
B : '_b';
A : ('a_e')=>'a_e'
| 'a' ;
按预期解析'a_e_b'和'a_b'。
建议查看The Definitive ANTLR Reference的第13章。