使用C++;语法 我尝试使用ANTLR解析C++源代码,使用.< /P> 生成LeXER、解析器和侦听器(CPP14Baselistel.java,CPP14LFROW.java,CPP14ListEn.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); }

使用C++;语法 我尝试使用ANTLR解析C++源代码,使用.< /P> 生成LeXER、解析器和侦听器(CPP14Baselistel.java,CPP14LFROW.java,CPP14ListEn.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); },java,c++,parsing,antlr4,Java,C++,Parsing,Antlr4,我的问题是-哪种CPP14Parser生成的方法用于获取解析文件的入口点?(见TODO评论) 可选地,任何一个显示如何解析C++源文件的工作实例的指针都会很棒。 谢谢 语法的入口点通常是以EOF结尾的规则。在您的情况下,请尝试translationunit规则: ParseTree entryPoint = parser.translationunit(); 如果人们没有读到这些评论,我会在我的回答中添加Mike值得注意的评论: 。。。如果不是这样(结束n EOF),语法中的第一个解析器规则可

我的问题是-哪种CPP14Parser生成的方法用于获取解析文件的入口点?(见TODO评论)

可选地,任何一个显示如何解析C++源文件的工作实例的指针都会很棒。


谢谢

语法的入口点通常是以
EOF
结尾的规则。在您的情况下,请尝试
translationunit
规则:

ParseTree entryPoint = parser.translationunit();
如果人们没有读到这些评论,我会在我的回答中添加Mike值得注意的评论:


。。。如果不是这样(结束n EOF),语法中的第一个解析器规则可能就是入口点(特别是如果它不是从任何地方调用的)。另一方面,在我的一个语法中,我定义了六条以EOF结尾的其他规则(主要用于解析我语言的子元素)。有时候很棘手…:-)


... 如果不是这样(结束n EOF),语法中的第一个解析器规则可能就是入口点(特别是如果它不是从任何地方调用的)。另一方面,在我的一个语法中,我定义了六条以EOF结尾的其他规则(主要用于解析我语言的子元素)。有时候很棘手…:-)C++具有模糊的语法。尝试用纯语法解析它(没有外部特别的消歧帮助)将失败。这里使用的语法似乎没有任何外部帮助。它可能是修补它(毕竟CLAN,GCC管理分析C++只是递归下降),但这样做的努力可能会比你想象的大得多。然后您将遇到预处理器代码。有关更多详细信息,请参见Hello,我尝试做一些类似的事情,您能告诉我您使用的库是什么,以及如何在pom中包含-it吗?