1

假设以下语法:

grammar Demo; 

start: START_BLOCK SEPERATOR;

START_BLOCK: '-.-.-';

ID: ( LETTER SEPERATOR ) (LETTER SEPERATOR)+;
fragment LETTER: L_A|L_K;
fragment L_A: '.-';
fragment L_K: '-.-';

SEPERATOR: '!';

我将以下输入传递给语法:-.-.-!

我希望 ANTLR 能够识别令牌 START_BLOCK 和 SEPERATOR。但相反,它找到了一个 Token 类型ID

我想我可以通过删除词法分析器规则“ID”中的前一对括号来解决这个问题:

ID: LETTER SEPERATOR (LETTER SEPERATOR)+;

现在一切正常,但为什么呢?上面的括号对我的语法有什么影响?

4

1 回答 1

1

这是 ANTLR 4 中的一个错误,已在 4.0.1 版本中修复。见:https ://github.com/antlr/antlr4/issues/224

于 2013-05-14T14:03:24.330 回答