言語用のレクサーを書くためにantlrを使用しています。
文法を定義した後、antlrは、nextToken関数を含むlexerクラスのJavaコードを生成しました。私はこの機能を使用するたびに、それは私のために認識されたトークンを返しますが、それは未定義のトークンを見れば、それは、RecognitionException
例外をスローし、それをキャッチしたときに、それは別の例外がスローされます。antlrエラー(RecognitionExceptionが発生したときに無限ループ)
catch (RecognitionException e) {throw new TokenStreamRecognitionException(e);}
私はキャッチを書いていますこの例外をキャッチして何かを出力に出力するが、問題はこれの後で、単にエラーを出力して次のトークンに行くのではなく、前にトークンに戻って再びテストして戻ってくるようだ次のような無限ループに終わるこの未定義のトークンに戻ってください:
ID a_1
error occured at: rowNum:1 colNum:8
line 1:8: unexpected char: '&'
ID a_1
error occured at: rowNum:1 colNum:8
line 1:8: unexpected char: '&'
ID a_1
error occured at: rowNum:1 colNum:8
line 1:8: unexpected char: '&'
...
どうすればよいですかnextToken
は、エラーを出力して残りの入力プログラムを実行するだけですか?
ウェブ全体を検索しましたが、問題を解決できませんでした。以前はこのエラーに遭遇した可能性があります。
ありがとうBart、はい私は "その他"のルールを定義する必要がありますが、私の主な問題は私のEclipseで "AntlrEclipse"プラグインを使って私の文法と "nextToken" 、それは私の主な問題であるように見える、それはエラーを記述し、thに行くのではなく、それは入力ファイルに戻り、この未定義のトークンを再度検査しようとするので、無限ループにつながるので、Antlrの "nextToken"関数を使用して、あなたが言ったようにオーバーライドする必要があると思います。 – nafiseh