4

私は自分のコンパイラ クラス用の単純なパーサーを作成しており (ツールを機能させることができるという概念の証明にすぎません)、Python バインディングで ANTLR を使用しています。単純な文法を適切にトークン化して解析するようになりましたが、エラーも独自の方法で処理したいと考えています。ANTLR のドキュメント (より具体的には: http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery ) によると、次のコードを文法ファイルに入れることができます。

@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 の例です (コードは複製できますが、実際には実行できないようです)。誰かが私がそうする方法を知っていますか?

4

1 に答える 1

5

私は自分の問題の解決策を見つけることができました:

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

antlr3.BaseRecognizer.displayRecognitionError = displayRecognitionError
}
于 2012-04-11T16:33:41.687 に答える