У меня есть следующая грамматика Antlr:
grammar MyGrammar;
doc : intro planet;
intro : 'hi';
planet : 'world';
MLCOMMENT
: '/*' ( options {greedy=false;} : . )* '*/' { $channel = HIDDEN; };
WHITESPACE : (
(' ' | '\t' | '\f')+
|
// handle newlines
( '\r\n' // DOS/Windows
| '\r' // Macintosh
| '\n' // Unix
)
)
{ $channel = HIDDEN; };
В интерпретаторе ANTLRWorks 1.2.3 входы hi world
, hi/**/world
и hi /*A*/ world
работают, как и ожидалось.
Однако, ввод hiworld
, который не должен работать, также принимается.
Как мне заставить hiworld
провалиться? Как заставить хотя бы один пробел (или комментарий) между «привет» и «мир»?
Обратите внимание, что я использовал только MLCOMMENT и WHITESPACE в этом примере для упрощения, но поддерживаются другие виды комментариев.