ANTLR C++ grammar fileを使用して、C++ソースコードの解析にANTLRを使用しようとしています。ANTLRパーサの例(C++文法あり)
private void parseCppFile(String file) throws IOException {
String p1 = readFile(new File(file), Charset.forName("UTF-8"));
System.out.println(p1);
// Get our lexer
CPP14Lexer lexer = new CPP14Lexer(new ANTLRInputStream(p1));
// Get a list of matched tokens
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Pass the tokens to the parser
CPP14Parser parser = new CPP14Parser(tokens);
// Walk it and attach our listener
ParseTreeWalker walker = new ParseTreeWalker();
// Specify our entry point
ParseTree entryPoint = null;//TODO: what is the entry point?
walker.walk(new CPP14BaseListener(), entryPoint);
}
マイ:この方法でC++ファイルでそれを実行しようとすると、(CPP14BaseListener.java、CPP14Lexer.java、CPP14Listener.java、CPP14Parser.java)レクサー、パーサとリスナーを生成した後
質問は、CPP14Parserがファイルの解析のエントリポイントを取得するために使用するメソッドを生成しましたか? (TODOコメントを参照)。
また、C++ソースファイルを解析する方法を示す実例のポインタは素晴らしいでしょう。
ありがとうございます!
C++にはあいまいな構文があります。純粋な文法でそれを解析しようとすると(曖昧さ回避のための特別な助けなしに)失敗するでしょう。ここで使われている文法は、そのような外部の助けを持っていないようです。パッチを当てることができます(GCCがC++を解析して再帰的な降下を行った後も可能です)が、そうしようとする努力はあなたが考えるよりもはるかに大きい可能性があります。そして、プリプロセッサコードを実行します。詳細については、https://stackoverflow.com/questions/243383/why-cant-c-be-parsed-with-a-lr1-parser/1004737#1004737 –
を参照してください。こんにちは、私は同様のことをやろうとします。どのようなlibを使っているのか、どのようにあなたのpomに入れるのか教えてください。 – sab