いくつかの表現を認識するための簡単な文法を書いています。ここでは、説明を簡単にするために書いた、より単純なバージョンを投稿しています。この単純なバージョンでは、次のような式を認識できます。
- これはテキストです
- [n]これは別のテキストです[/n]
- [n][n]これは複合式です[/n][/n]
私の問題は、[i]これは認識例外を生成する必要があります[/n]のような式を送信するときです。
認識例外がスローされますが、パーサーは「[」に一致するため無限再帰に入りますが、「i」に一致しない場合は自分自身を失います。文法のテキスト コンポーネントに角かっこを含めることができないため、それが起こっていると思います。というわけで、文法を掲載します。
grammar ErrorTest;
expression
: rawText EOF
| command EOF
;
rawText
: word+
;
word
: ESPACE* TEXT ESPACE*
;
command
: simpleCommand
| compoundCommand
;
simpleCommand
: HELP
;
compoundCommand
: rawText
| BEGIN compoundCommand END
;
HELP : '[help]';
BEGIN : '[n]';
END : '[/n]';
ESPACE : ' ';
TEXT : ~(' '|'['|']')*;
どうすれば解決できますか?