ANTLR4中的布尔值?

时间:2015-07-07 14:55:24

标签: boolean 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

为什么我有这个错误?怎么解决?我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Lexer将首先匹配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;