我想提取评论,并想知道它们是哪些功能。我有很多这样的C文件如下:
输入:
void main()
{
//sdgs
call A;
/*
sdfgs
dfhdfh
*/
call b;
some code;
}
/* this function adds
something */
int add()
{
//sgsd
some code;
//more comments
some code;
}
输出应为:
void main()
{
//sdgs
/*
sdfgs
dfhdfh
*/
}
/* this function adds
something */
int add()
{
//sgsd
//more comments
}
输入代码格式整齐,“功能代码”在下一行{
后开始。
基本上,我只需要知道哪个“评论”来自哪个函数。此外,它还应包括功能名称或其他地方的任何其他注释。 注意:这是不同的,因为顶级的功能名称应该在那里。
为了简化我的要求:
(
的块,在第一行后第一列只包含{
的一行,并在上面打印行。答案 0 :(得分:6)
使用正则表达式是不可能的,你需要编写一个小的C解析器。
为什么?
首先需要首先替换宏。其次,因为函数定义在正则表达式中有点“难”。一些法律功能定义:
int f() {}
const int f() {}
const char* f(int);
void f(double t);
void f(t,a) int t; int (*a)(float, char, char) {}
答案 1 :(得分:2)
它可能在一般意义上是不可行的(例如,因为函数可以通过显然是宏调用来定义)。
但是,如果你不关心完美,你可能会做一个简单的词法分析器&几乎完成工作的解析器(在输入代码上并不太费力)。
我不确定它是否有用。你应该解释一下你真正想要实现的目标。
答案 2 :(得分:0)
您希望仅从格式良好的文件中打印注释和功能定义。在我看来,没有适当的解析器,这个特定的任务是可行的。
尝试:
comments.awk:
/^(int|void|{|}|etc.)/{print $0;next}
/\/\*/,/\*\//{print $0;next}
/\s*\/\//{print $0;next}
致电:
awk -f comments.awk file1