Antlr4を使用して、C#アプリケーションのいくつかのファイルを解析したいと思います。これまでのところ、文法を使用してパーサーファイルとレクサーファイルを生成することができました。ここで、ファイルの読み取りを使用して、パーサーとレクサーをファイルに適用したいと思います。私はそれを行う方法についてのドキュメントを探していましたが、私は不足しています。以前のバージョンのAntlrを使用した古い例をいくつか見つけましたが、Antlr4では機能しないようです。どんな助けでもいただければ幸いです。ありがとう。
補足として、 "The Definitive ANTLR 4 Reference" by Terence Parrは、ANTLR4の動作と開発パターンの違いを理解するための優れたリソースです。すべての例はJavaですが、概念はJavaとC#の両方に適用されます。
で試してみてください
using (StreamReader fileStream = new StreamReader(fileName)) {
AntlrInputStream inputStream = new AntlrInputStream(fileStream);
SearchLexer lexer = new SearchLexer(inputStream);
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
SearchParser parser = new SearchParser(commonTokenStream);
parser.RemoveErrorListeners();
parser.AddErrorListener(new ErrorListener()); // add ours
parser.root();
}
これがErrorListenerのサンプルです
public class ErrorListener : BaseErrorListener
{
public void SyntaxError(IRecognizer recognizer, int offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
{
Console.WriteLine("{0}: line {1}/column {2} {3}", e, line, charPositionInLine, msg);
}
}