Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ANTLR解析C++;用C# 我试图用ANTLR获得一个C++ AST,如果可能的话,从我的C代码基础。 现在,基本的工作流程对我来说是显而易见的:使用ANTLRWorks生成.cs Lyxor和解析器,将它们和ANTLR引用添加到一个C项目中,给它一个C++源,与结果数据结构一起工作。_C#_C++_Parsing_Antlr - Fatal编程技术网

使用ANTLR解析C++;用C# 我试图用ANTLR获得一个C++ AST,如果可能的话,从我的C代码基础。 现在,基本的工作流程对我来说是显而易见的:使用ANTLRWorks生成.cs Lyxor和解析器,将它们和ANTLR引用添加到一个C项目中,给它一个C++源,与结果数据结构一起工作。

使用ANTLR解析C++;用C# 我试图用ANTLR获得一个C++ AST,如果可能的话,从我的C代码基础。 现在,基本的工作流程对我来说是显而易见的:使用ANTLRWorks生成.cs Lyxor和解析器,将它们和ANTLR引用添加到一个C项目中,给它一个C++源,与结果数据结构一起工作。,c#,c++,parsing,antlr,C#,C++,Parsing,Antlr,然而,我已经在第二步失败了。我从Aurelian Melinte(C++)中尝试了C++语法,并通过Ramin Zaghi的“C++语法和代码跟踪器”来下载C++语法,并通过在语法选项中设置“语言=cSARP3”来生成C语言的词法分析器和语法分析器。但是,我无法编译包含解析器和lexer文件的C#项目 问题是我不知道这是我使用的语法问题还是现有版本的问题。。。ANTLR、C#运行时和C#目标有太多不同的版本,尝试每一种组合似乎都是一项毫无希望的任务 然而,当前的组合似乎很好,一个小的语法只会出现

然而,我已经在第二步失败了。我从Aurelian Melinte(C++)中尝试了C++语法,并通过Ramin Zaghi的“C++语法和代码跟踪器”来下载C++语法,并通过在语法选项中设置“语言=cSARP3”来生成C语言的词法分析器和语法分析器。但是,我无法编译包含解析器和lexer文件的C#项目

问题是我不知道这是我使用的语法问题还是现有版本的问题。。。ANTLR、C#运行时和C#目标有太多不同的版本,尝试每一种组合似乎都是一项毫无希望的任务

然而,当前的组合似乎很好,一个小的语法只会出现一个错误(C语言中的“隐藏”需要更改为“隐藏”,就是这样),但是C++分析器/词法词典仍然给了我很多编译器错误,主要是处理预处理器指令和数组声明。


有没有人用ANTLR生成的C++文件来解析C++?有人知道这是如何工作的吗?< /P> < P>问题是,在两个语法中都有嵌入代码,而代码是用C++编写的。嵌入式代码在复杂的语法中非常常见,所以你需要在C语言中找到一个语法解析C++的语法,而不是解析C++。另一方面,如果你能找到一个解析爪哇C++的,你可以从C ^中使用它。

< P>我所看到的C++中唯一的ANTLR语法被作者抛弃为不完整,而他只尝试C++ 98(YMMV)。C++11(是的,的确是C++14)就在这里,而且要复杂得多。建立一个生产C++是非常困难的,除非你能得到一个已经被测试过的火,否则它可能在实际代码上不起作用。
我建议您使用CLAN、EDG C++前端,或者我们的DMS软件再工程工具包,所有这些都具有健壮的C++解析器。如果你想操纵解析C++ C++的某些目的,你需要的机器比“纯”解析器更多。

你需要多少C++?在ANTLR中解析C++98已经够糟糕的了,使用C++11还没有完全改善。(例如,
>
的处理现在更加直观)感谢您的回答,尽管这并不是我所希望的。“这个嵌入代码的类型不是使语法和目标分离的全部想法吗?”杰伊:你可以为C++构建纯语法并解析它(在狭义的“检查语法”中,并构建一个解析树),而不用“嵌入代码”语法。看见实际上,一个纯粹的解析器是不够的,谷歌搜索我关于“解析后的生活”的文章。在某个时候,你必须把语法规则与某种类型的语义分析(至少建立符号表)相结合,并且“语义分析”不太可能被写在你所选择的、最喜欢的、方便的语言中(尽管java、C语言和C++的人都希望)……@杰伊:…因此,要么你必须放弃在你方便的语言中使用一个有效的解析器,要么你必须接受调用在另一个编程系统中实现的解析机制的想法。(这也有其自身的问题,因为其他编程系统为任务提供的机制实际上可能比您正在编写的要大得多,而且可能更好)。