这是我的代码:
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
为什么我有这个错误?怎么解决?我们将非常感谢您的帮助。
答案 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;