我想以编程方式解析和编辑C ++源文件。我需要在代码的某些部分(即函数,类块等)中更改/添加代码。我也(最好)能够得到评论。
我想做的部分内容可以通过以下代码解释:
CPlusPlusSourceParser cp = new CPlusPlusSourceParser(“x.cpp”); // Create C++ Source Parser Object
CPlusPlusSourceFunction[] funcs = cp.getFunctions(); // Get all the functions
for (int i = 0; i < funcs.length; i++) { // Loop through all functions
funcs[i].append(/* … code I want to append …*/); // Append some code to function
}
cp.save(); // Save new source
cp.close(); // Close file
我该怎么做?
我希望能够在Java,C ++,Perl,Python或C#中做到这一点。但是,我对其他语言API持开放态度。
答案 0 :(得分:4)
这类似于AST from C code
如果您熟悉Java antlr可以轻松地将您的代码解析为抽象语法树,然后将转换应用于该树。默认的AST转换只是打印出原始来源。
答案 1 :(得分:2)
您可以使用任何解析器生成器工具为您生成c ++解析器,但首先您必须获得C ++的CFG(无上下文语法),请检查Antlr
编辑:
答案 2 :(得分:2)
你需要一个适用于C ++的工作语法和解析器,但这并不像can't be constructed with most parser generators out there那么容易。但是,一旦你拥有解析器,你就可以实际获取程序的抽象语法树,并以几乎任何你想要的方式改变它。
答案 3 :(得分:2)
我们robust C++ parser可以使用DMS Software Reengineering Toolkit。它解析各种C ++方言,包括ANSI,GNU 3/4,MSVS6和MSVisual Studio 2005以及管理C ++。
它构建了AST和符号表(后者比你想象的更难)。您可以导航AST,转换为不同的有效C ++程序,并重新生成包含注释的代码。
答案 4 :(得分:1)
查看doxygen项目,它是一个开源项目,用于解析和记录几种编程语言,包括C ++。我相信使用这个项目的词法分析器会让你超过一半
答案 5 :(得分:1)
Mozilla项目有a tool that does this。
Clang static analyzer现在因分析和重写C ++而闻名。 Stroustrup wrote a paper关于德克萨斯A&amp; M的研究项目,但我不认为它已经发布。
答案 6 :(得分:1)
在C# - 或一般的.net - 方法中,您可以从C++/CLI CodeDOM provider中获得一些用处 - 没有使用此类型的C ++版本,我不知道如何好吧,它会处理模板重的代码。