Ich habe folgende Antlr Grammar:Antlr verborgenen Kanal Leerzeichen Problem
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; };
Im ANTLRWorks 1.2.3 Interpreter, wobei die Eingänge hi world
, hi/**/world
hi /*A*/ world
und Arbeit, wie erwartet.
Aber der Eingang hiworld
, der sollte nicht funktionieren, wird auch akzeptiert. Wie mache ich hiworld
scheitern? Wie zwinge ich mindestens einen Whitespace (oder Kommentar) zwischen "hi" und "world"?
Beachten Sie, dass ich in diesem Beispiel nur MLCOMMENT und WHITESPACE zur Vereinfachung verwendet habe, aber andere Arten von Kommentaren werden unterstützt.
Nun, ich weiß nicht, Antlr, aber würde nicht "Doc: Intro WHITESPACE Planet" oder so etwas am offensichtlichsten sein? – schnaader
Da der Kanal WHITESPACE ausgeblendet ist, verursacht dies eine MismatchedTokenException. – luiscubal
Kannst du nicht eine andere Whitespace-Grammatik erstellen, die nicht versteckt ist und sie verwenden? – schnaader