我想使用ANTLR解析C++源代碼,使用ANTLR C++ grammar file。使用C++語法的ANTLR解析器示例
產生的詞法,語法分析器和聽衆(CPP14BaseListener.java,CPP14Lexer.java,CPP14Listener.java,CPP14Parser.java),試圖在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);
}
我問題是 - 哪個CPP14Parser生成了用於獲取解析文件入口點的方法? (見TODO評論)。
或者,任何指示如何解析C++源文件的工作示例的指針都會很好。
謝謝!
C++語法不明確。試圖用純語法來解析它(沒有外部臨時幫助消除歧義)將會失敗。這裏使用的語法似乎沒有任何這種外部幫助。有可能對它進行修補(畢竟Clang和GCC設法只用遞歸下降來解析C++),但這樣做的努力可能會比你想象的要大得多。然後你會遇到預處理器代碼。有關更多詳細信息,請參閱https://stackoverflow.com/questions/243383/why-cant-c-be-parsed-with-a-lr1-parser/1004737#1004737 –
你好,我嘗試做類似的事情,你能告訴我你使用了什麼樣的庫,以及如何包含在你的pom中? – sab