2012-04-11 14 views
4

私はコンパイラクラス用の単純なパーサを書いています(私は、ツールを動作させることができる概念の証明のみです)、PythonバインディングでANTLRを使用しています。適切にトークン化して解析するためのわかりやすい文法を得ましたが、私もカスタム方法でエラーを処理したいと思っています。 (具体的に:http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery)をANTLRのドキュメントによると、私はそうするように、私の文法ファイルに次のコードを置くことができます。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; 
    } 
} 

をしかし、これは私がPythonで複製することができないようJavaの例であります(私はコードを複製することができますが、実際に実行することはできません)。誰も私がそうする方法を知っていますか?

答えて

5

私は私の問題への解決策を見つけるために管理:

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

antlr3.BaseRecognizer.displayRecognitionError = displayRecognitionError 
} 
+1

はまだ私自身の答えを受け入れることができないが、ないよりよい解決策が立ち上がっていない場合は明日それを行うだろう。 –

+1

それはそれを処理するための良い方法のようです:私は他の答えを期待していない! :) –