2012-04-29 11 views
2

は、私は次のように定義してMismatchedTokenExceptionを持っています。 ANTLRは、一度に「>>」の両方の解析を試み、失敗します。サイレント空白チャンネルで 不一致ANTLRでダブルトークン

、次のテスト 作品:ANTLRははっきり分けて各トークンを処理するように指示され

A<B,C<D> > 

します。

どうすれば修正できますか?

答えて

2

私はそれを再現できませんでした。生成されたパーサ:

grammar T; 

type  : IDENTIFIER ('<' (type (',' type)*) '>')?; 
IDENTIFIER : 'A'..'Z'; 

には、以下の構文解析ツリーに(スペース)せず、入力A<B,C<D>>を解析します

enter image description here

あなたはこの入力が生成する原因となる文法を提供する必要がありますMismatchedTokenException

おそらく、あなたはANTLRWorksのインタプリタ(または同じインタプリタを使用するEclipseのANTLR-IDE)を使用していますか?その場合、そのがおそらく問題です:それは悪名高いバグです。使用しないでください。ただし、ANTLRWorksのデバッガを使用してください。素晴らしいです(上記の画像はデバッガからのものです)。

ラズロ小笠原は書いた:

はそれを手に入れました。私は< <トークンを定義しました。すばやく、トークン認識を別のトークン認識に優先させる方法はありますか?

いいえ、レクサーは、単に可能な限り一致を試みます。したがって、<<(または>>)に一致するトークンを作成できる場合は、2つの単一の<(または>)トークンを使用します。 2つ(またはそれ以上)のレクサールールが同じ文字数に一致する場合にのみ、優先順位付けが行われます。最初に定義されたルールは、後で文法で定義されたルールよりも「勝ち」ます。

+0

これが完成しました。私は定義された '' 'トークンを持っていました。すばやく、トークン認識を別のトークン認識に優先させる方法はありますか? – Lazlo

+0

@LazloBonin、私の編集された答えを見てください。 –