Lexer规则中没有量词的括号是什么?

时间:2013-04-08 18:39:56

标签: antlr4

假设以下语法:

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。但它找到了ID类型的单个令牌。

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

ID: LETTER SEPERATOR (LETTER SEPERATOR)+;

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

1 个答案:

答案 0 :(得分:1)

这是ANTLR 4中的一个错误,修正了4.0.1版本。请参阅:https://github.com/antlr/antlr4/issues/224