ANTLR:具有类似文字的MismatchedTokenException

时间:2010-08-09 22:36:42

标签: exception antlr lexer

我有以下

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上阅读它。但是我对词法分析器和解析器的经验很少。

非常感谢您的帮助。

1 个答案:

答案 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章。