1
我看答案How to get ANTLR 3.2 to exit upon first error?這是有幫助的。ANTLR語法 - 如何添加成員覆蓋錯誤處理
不過,我似乎無法在沒有我的語法嚇壞了添加這些「@」的規則。我的語法文件很簡單:
grammar Exp;
options {
output=AST;
}
program
: includes decls (procedure)* main -> ^(SMALLCPROGRAM includes decls (procedure)* main) //AST - PROGRAM root
;
//Lexer and Parser rules continue below as normal..tested thoroughly and works
但是,如果我嘗試添加任何這些@規則,我得到的錯誤,如:
grammar file Exp.g has no rules
和:
Exp.g:0:1: syntax error: assign.types: org.antlr.runtime.EarlyExitException
org\antlr\grammar\v3\DefineGrammarItemsWalker.g: node from line 202:4 required (...)+ loop did not match anything at input ';'
任何人都有一個想法是什麼問題?我只是想改變我的語法,這樣當我從單獨的主類(使用ANTLRStringStream等將輸入傳入它)中運行它時,它實際上會在出現語法問題時在主類中引發錯誤,而不僅僅是說類似:
line 1:57 missing RPAREN at '{'
在繼續解析其餘的輸入罰款之前。最終,我的主類應該拒絕解析由我的語法定義的任何語法錯誤的輸入,並應將錯誤報告給用戶。
謝謝。有效。我在另一個問題的覆蓋中添加了,我的主類現在可以捕獲異常。然而拋出的異常是不是非常豐富: MismatchedTokenException異常(18 = 49!) 我怎樣才能得到: 線在1:57缺少RPAREN '{' 消息?有沒有辦法從覆蓋中「提取」它或以不同的方式來覆蓋? – Awoken 2013-02-14 18:56:06
@Awoken,這裏沒有銀彈。檢查異常,進行相應的轉換並從異常中提取想要的信息。儘管如此,我們不要將這些小型評論框用於廣泛的問答。 – 2013-02-14 19:08:45