У меня есть следующая грамматика:
cond_stmt: ('('cond_stmt')'|('!' cond_stmt)| cond_expr|cond_or|cond_and) ;
cond_or: cond_expr(OR cond_stmt)+;
cond_and: cond_expr(AND cond_stmt)+;
OR:'||';
AND: '&&';
BLANK: ['\b'|'\t'|' ']+ -> skip;
ANTLR может распознавать условный оператор с &&
как a>5 && b<6
но он не может распознать a>5 || b<6
a>5 || b<6
Он игнорирует ||
оператора и говорит, что не жизнеспособный ввод a>5b
Если между условными операторами нет пробелов, то он может распознать его.
например, a>5||b<6
.
Кто-нибудь знает, почему это так? Я новичок в antlr, если вы найдете некоторые проблемы или улучшения в грамматике, пожалуйста, сообщите им.
Спасибо @enrico.bacis, вы правы, он исправлен.
**incorrect**
BLANK: ['\b'|'\t'|' ']+ -> skip;
**CORRECT**
BLANK: ('\b'|'\t'|' ')+ -> skip ;