2017-05-17 52 views
0

如何捕捉詞法分析器中的異常?在解析器如果規則失敗(或不匹配與給定的輸入流)ANTLR的會拋出異常,我們可以輕易地捕獲這個exception.Catch在Antlr3.Ref詞法分析器異常:Error handeling in antlr 3.0 ...在詞法分析器中捕捉異常Antlr3

attribute : 
     Value1 integer1["Value1"] { System.out.println("Accepted"); } 
    | Value2 integer2["Value2"] { System.out.println("Accepted"); } 
    ; 
catch[Exception e] {System.out.println("General error Reported");} 

它將parser.But工作,我如何能趕上在詞法分析器本身?.Say在我有喜歡

str:STRING|DIGIT; 

和詞法STRING的規則解析器異常被定義爲

STRING : ('"' 'a'..'z' '"'); 

我的輸入流是「上帝」....如果我想念雙引號或者如果我把額外的雙引號,那麼我希望這個異常應該在詞法分析器本身...有沒有什麼方法可以做到這一點?可能嗎?

回答

0

覆蓋一個或多個以下的方法來使用ANTLR自己的異常處理(這適用於詞法和語法分析器)的 - 注意,這僅適用於敏感菌引起的輸入失配例外:

  • emitErrorMessage() - 處理該消息是如何顯示給用戶
  • getErrorHeader() - 改變錯誤消息報頭是如何創建的
  • getErrorMessage() - 改變如何錯誤的描述創建
  • displayRecognitionError() - 改變是如何創建的消息從異常,或徹底改變異常是如何處理的

ANTLR的詞法和語法分析器之間的主要區別是,在詞法分析器,沒有開始規則或「電流」規則 - 詞法分析器試圖並行地匹配所有可用的規則。因此,如果發生不匹配,它不能歸因於任何特定的規則(因此它也不能在使用catch塊的任何特定規則中處理)。