0
我正在使用antlr編寫語言的詞法分析器。
定義了語法後,antlr爲其生成了nextToken函數的lexer類的java代碼。每次使用此功能時,會返回一個公認的令牌給我,但如果它看到一個未定義的令牌,它拋出一個RecognitionException
異常,當它抓住它,它拋出另一個異常:antlr錯誤(發生RecognitionException時出現無限循環)
catch (RecognitionException e) {throw new TokenStreamRecognitionException(e);}
我已經寫了一個catch塊來捕獲這個異常並在輸出中打印某些內容,但問題出現在這之後,似乎不是隻打印錯誤並轉到下一個標記,而是在此之前返回到標記,再次測試並返回再次對這個未定義的令牌,結束到一個無限循環,如:
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,是的,我需要定義「OTHER」規則,但是我的主要問題是我在Eclipse中使用了「AntlrEclipse」插件來生成我的語法的java代碼和它生成的「nextToken」函數,似乎是我的主要問題,當它來錯過匹配錯誤,而不是說明錯誤,並去th它會回到輸入文件中,並嘗試再次檢查這個未定義的標記,所以它會導致無限循環,所以我想我必須使用Antlr的「nextToken」函數並按照您所說的覆蓋它。 – nafiseh 2011-12-28 06:09:25