2012-04-11 11 views
4

我正在爲我的編譯器類編寫一個簡單的解析器(僅僅是我可以使這些工具工作的一個概念證明),並且正在使用帶有python綁定的ANTLR。我已經得到了我們平凡的語法來正確標記和解析,但我也想以自定義的方式處理錯誤。按照ANTLR文檔(更具體:http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery),我可以把我的語法文件下面的代碼這樣做:如何使用python在ANTLR中執行自定義錯誤報告?

@members { 
    private List<String> errors = new LinkedList<String>(); 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String hdr = getErrorHeader(e); 
     String msg = getErrorMessage(e, tokenNames); 
     errors.add(hdr + " " + msg); 
    } 
    public List<String> getErrors() { 
     return errors; 
    } 
} 

然而,這是一個Java的例子,我似乎無法在python複製(我可以複製代碼,但似乎無法讓它運行)。有誰知道我會怎麼做?

回答

5

我設法找到一個解決我的問題:

@members { 
def displayRecognitionError(self, tokenNames, e): 
    # do something 
    pass 

antlr3.BaseRecognizer.displayRecognitionError = displayRecognitionError 
} 
+1

不能接受我自己的答案,但將這樣做,明天如果沒有更好的解決方案出現。 – 2012-04-11 16:34:15

+1

這似乎是一個很好的方式來處理它:我不期待任何其他答案! :) – 2012-04-11 17:43:24