私は、複数行の情報を解析するために使用される、組み合わされた ANTLR 文法を持っています。文法を書いている時点で、すべての行が完全に既知であり、文法内で定義されているわけではない可能性があります。これは認識されなければならない。次の例は単純化されたものです。
rule: (line)+ EOF;
LF: ('\n'|'\r\n');
WS: ' ';
INTEGER: ('0'..'9');
VALUE: ('a'..'z'|'A'..'Z'|'0'..'9');
line: 'car' WS VALUE WS LF (subline LF)*;
subline: '>' (description | id | type | unknownsubline);
description: ('description' WS VALUE);
id: ('id' WS INTEGER);
type: ('type' WS VALUE);
unknownsubline: (VALUE | WS | INTEGER)*; /*don't known yet -> shall be logged...*/
次の入力を入れます。
car car1
>description redPorsche
>id 123
>type pkw
>tires 4
>specifica fast,car
car car2
>description blueTruck
行>tires 4
は、Eclipse 内の ANTLR インタープリター内で正常に認識されます。しかし、次の行では、単語が既に定義されたトークンであり、ここでは不明なコンテキスト内で使用されている>specifica fast,car
ため、NoViableAltException が発生します。car
この動作を回避する可能性はありますか? VALUE
定義済みのトークンが含まれていることを認識できますか?