私は、次のANTLR文法持っている:予想通り、ANTLRWorks 1.2.3通訳、入力hi world
、hi/**/world
とhi /*A*/ world
仕事で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; };
を。
ただし、入力hiworld
,はでないはずです。 hiworld
を失敗させるにはどうすればよいですか? "hi"と "world"の間に少なくとも1つの空白(またはコメント)を強制するにはどうすればよいですか?
この例ではMLCOMMENTとWHITESPACEのみを使用して簡略化していますが、他の種類のコメントもサポートされています。 hiworld
が失敗した文字列を作るために
まあ、私はAntlrを知らないのですが、 "doc:intro WHITESPACE planet"なんかこれが一番明白ではないでしょうか? – schnaader
チャネルWHITESPACEは非表示であるため、MismatchedTokenExceptionが発生します。 – luiscubal
隠されていない別の空白文法を作成して使用できませんか? – schnaader