1

我有以下

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 文档和谷歌中阅读它。但我很少有使用词法分析器和解析器的经验。

非常感谢您的帮助。

4

1 回答 1

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

于 2011-12-09T18:17:45.027 回答