次のような空白処理を使用する多くの 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;
有効な入力は、' not true ' または ' not false ' ですが、望ましい結果ではない' nottrue ' もあります。文法を次のように変更します。
grammar Not;
start: expression;
expression: NOT WS+ expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r];
問題は修正されましたが、各ルールで空白を手動で処理したくありません。
一般に、いくつかの例外を除いて、各トークンの間に空白を入れたいと考えています (たとえば、' !true ' の間に空白は必要ありません)。
これを行う簡単な方法はありますか?