以编程方式解析和编辑C ++源文件

时间:2009-11-16 06:08:59

标签: c++ parsing

我想以编程方式解析和编辑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 &lt 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持开放态度。

7 个答案:

答案 0 :(得分:4)

这类似于AST from C code

如果您熟悉Java antlr可以轻松地将您的代码解析为抽象语法树,然后将转换应用于该树。默认的AST转换只是打印出原始来源。

答案 1 :(得分:2)

您可以使用任何解析器生成器工具为您生成c ++解析器,但首先您必须获得C ++的CFG(无上下文语法),请检查Antlr

编辑:

另外Antlr supports a lot of target languages

答案 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& M的研究项目,但我不认为它已经发布。

答案 6 :(得分:1)

在C# - 或一般的.net - 方法中,您可以从C++/CLI CodeDOM provider中获得一些用处 - 没有使用此类型的C ++版本,我不知道如何好吧,它会处理模板重的代码。