以下の文法を参照してください。私が解析しようとすると:ANTLRは、他の文字が最初に必要なときに一致する文字ですか?
String s = "UNH+message refere+APERAK:D:97A:UN\n";
を私は次のエラーを取得する:それは\ nを出会う前に、UNHを探しているように見えるので、私には意味がありません
line 1:34 mismatched character '\n' expecting 'H'
line 2:0 missing RDEL at '<EOF>'
、これだろう'ファイル'ルールに従わない。
grammar Aperak;
options {
language = Java;
}
@header { package test.fixed.aperak; }
@lexer::header { package test.fixed.aperak; }
file returns [String result]: 'UNH' unh01 unh02 RDEL { $result = $unh01.text + " -- " + $unh02.text; };
unh01 : FDEL optField;
unh02 : FDEL unh02x1 unh02x2 unh02x3 unh02x4 (unh02x5)?;
unh02x1 : optField;
unh02x2 : SDEL optField;
unh02x3 : SDEL optField;
unh02x4 : SDEL optField;
unh02x5 : SDEL optField;
optField : AN*;
RDEL : '\n';
SDEL : ':';
FDEL : '+';
AN : 'a'..'z' | 'A'..'Z' | '0'..'9' | ' ';
修正は正しいが、答えは完全ではない:3つのトークンのためにレクサーが混乱しない:これらのトークン( '' U "'、 '" N "'、 '" H "')は作成されません。 '' UN''( '' x "'は '' H ''以外のもの)のような入力から '' UNH''トークンを作成しようとすると、 '' AN''が1文字にマッチするので、 。 –
@BartKiers私は3つのトークン*が作成されるとは言わなかったが、文字列UNHを3つのトークンのシーケンスとして解釈するためのルールがあるということだけがある。 – dasblinkenlight
あなたはこう言っています: "" AN "型の3つのトークンのシーケンス、" "U" 'のテキストを持つ、 ""レクサーはどこにも戻ってきません " '' N ''' '' H' '' "* ...おそらく、あなたは私がそれを言ったようにそれを意味していたかもしれませんが、 –