私は自分のコンパイラ クラス用の単純なパーサーを作成しており (ツールを機能させることができるという概念の証明にすぎません)、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 の例です (コードは複製できますが、実際には実行できないようです)。誰かが私がそうする方法を知っていますか?