我已经看到,使用空格处理很多这样的ANTLR语法:
WS: [ \n\t\r]+ -> skip;
// or
WS: [ \n\t\r]+ -> channel(HIDDEN);
所以空格被扔掉分别发送到隐藏的通道。
有了这样的语法:
grammar Not;
start: expression;
expression: NOT expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r]+ -> skip;
有效输入是“ 不真 ”或“ 不假 ”,而且“nottrue”,这是不期望的结果。 更改语法:
grammar Not;
start: expression;
expression: NOT WS+ expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r];
解决了这个问题,但我不希望手动处理空格每个规则。
一般来说,我想有一些例外每个令牌之间的空格(例如“!真 ”并不需要之间的空格)。
是否有这样做的一个简单的方法?