ANTLR4 中的布尔值?

Boolean in ANTLR4?

这是我的代码:

grammar test;
assignStatement : ID '=' BOOL ';' ;
ID : ID_LETTER (ID_LETTER | DIGIT)* ;  
fragment ID_LETTER : [a-z] | [A-Z] | '_' ;
fragment DIGIT : [0-9] ;
BOOL : 'true' | 'false' ;
WS  : [ \t\r\n]+ -> skip; 

但是当我用句子测试它时:

x = true ;

它有一个错误:

mismatched input 'true' expecting BOOL

为什么我有这个错误?如何解决?您的帮助将不胜感激。

词法分析器将首先匹配 ID 规则,因为顺序很重要。因此,将您的 BOOL 规则移至其上方以解决此问题:

assignStatement : ID '=' BOOL ';' ;

fragment ID_LETTER : [a-z] | [A-Z] | '_' ;
fragment DIGIT : [0-9] ;

BOOL : 'true' | 'false' ;
ID : ID_LETTER (ID_LETTER | DIGIT)* ;

WS  : [ \t\r\n]+ -> skip;