У меня есть следующая Antlr грамматика: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 в этом примере, чтобы упростить, но будут поддерживаться другие виды комментариев.
Ну, я не знаю Antlr, но не будет «doc: intro WHITESPACE planet» или что-то вроде этого будет наиболее очевидным? – schnaader
Поскольку канал WHITESPACE скрыт, это вызывает MismatchedTokenException. – luiscubal
Значит, вы не можете создать другую простую грамматику, которая не скрыта и не использует ее? – schnaader