我知道这个问题一定有点不清楚,但我会尽力解释我的需求。
首先,我现在是一个见习开发人员,现在我正在实习,我的老板想让我创建一个基于代码的文档生成器。
基于代码?的文档生成器
文档生成器是一个程序,它将读取一个c++文件,并从这个c++文件中检索最多的信息,包括声明的变量和函数,并以人类可读的格式(表)显示它们。
示例:
#include <iostream>
using namespace std;
int returnANumber(int argNumber)
{
int i = 0;
i = argNumber;
return argNumber;
}
int main()
{
returnANumber(70);
return 0;
}这是一个c++文件示例,程序将读取和检索所有信息,在本例中是函数的名称(ReturnANumber)、变量(I)、使用指令(Iostream)。
作为第一种方法,我想使用REGEX,并进行匹配,例如:
data-type word ( data-type word);使用函数声明,但需要管理的情况很多,例如在静态类中的方法声明中.:
data-type static word (data-type word);在这里,REGEX是一个非常困难的解决方案,我担心是否还有其他解决方案可供使用?有什么帮助吗?
提前谢谢。
发布于 2014-07-21 10:12:50
如前所述,您的问题似乎要求您自己读取C++源文件,并提取文档。一般来说,这是不可能的: C++允许宏,这实际上可以对原始文本进行任意编辑以生成有效的C++源代码。C++还允许#include指令,这些指令获取准确解释类型所需的附加信息。面对这些情况,你无法提取好的信息。
所以你有两个选择:
后者的一些选择是:
设置其中的每一个,并提取您想要的信息,都是一项相当大的练习。要直接使用它们,您必须了解每个工具,以及一般的编译器技术(解析、符号表),然后您必须在这些工具内部提供的生态系统中定制代码。如果你对他们不熟悉的话,这会让你花很长的时间来学习。
Clang/LLVM是开放源码软件,用C++编码。我不知道它处理C++的微软方言有多好。我的理解是,现在code使用Clang来处理C++源代码;这可能是获取这些信息的最简单的方法,特别是如果您只需要预先格式化的“一些文档”。但是,这违反了你的“从头开始构建一个工具”的格言。
EDG是一个商业前端,广泛应用于许多生产C++编译器中。它是可供研究的(也许你正在做的事情可以被分类,但如果你是商业机构,我怀疑它);我认为它是用C编码的。
DMS是商业化的,但有研究许可选项;编码是结合涉及BNF、属性语法和并行编程语言PARLANSE的特定领域语言完成的。DMS通过C++11和C++14来处理GCC和MS的方言。
GCC是用C语言编写的,但真的,真的很想成为编译器,并且会抵制你为达到你的目的而做出的努力。然而,其他人以前和GCC在一起,他们在上面构建了GCCXML,它至少提取了一些您想要作为XML文件的信息;如果您想要轻松地以您可以操作的形式获取这些信息,这可能是最好的选择。
https://stackoverflow.com/questions/24861571
复制相似问题