私はそれを再現できませんでした。によって生成されたパーサー:
grammar T;
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
IDENTIFIER : 'A'..'Z';
入力A<B,C<D>>
(スペースなし)を次の解析ツリーに解析します。
この入力で。を生成する文法を提供する必要がありますMismatchedTokenException
。
おそらく、ANTLRWorksのインタープリター(または同じインタープリターを使用するEclipseのANTLR-IDE)を使用していますか?その場合、それはおそらく問題です:それは悪名高いバグです。使用しないでください。ただし、ANTLRWorksのデバッガーを使用してください。すばらしいです(上記の画像はデバッガーからのものです)。
LazloBoninは次のように書いています。
とった。<<トークンを定義しました。すぐに、トークン認識を別のトークン認識よりも優先する方法はありますか?
いいえ、レクサーは可能な限り一致させようとします。したがって、<<
(または)に一致するトークンを作成できる場合は、2つの単一(または)トークン>>
を優先して作成します。2つ(またはそれ以上)のレクサールールが同じ量の文字に一致する場合にのみ、優先順位が付けられます。最初に定義されたルールが、文法の後半で定義されたルールよりも「優先」されます。<
>