读取文件时避免C风格注释
我正在用Python解析一个C语言文件,目的是计算一个函数的代码行数(LOC)。
我从函数定义的第一行开始,跳过所有行,直到遇到第一个"{"为止。
但问题是,"{"也可能出现在注释中。我只想跳过注释里的所有"{"。
比如:
100: int func(
102: int i, // some comment { ....
103: float f,
104: char c /* some comment here { ...
105: .... more comment */
106: )
107:{
有没有什么好的Python方法可以做到这一点?
3 个回答
0
如果你有安装gcc这个工具,可以使用命令 gcc -E input_file
来处理你的代码。这个命令会去掉代码中的注释(同时也会展开一些宏定义,这可能会改变代码行数)。举个例子,运行这个命令后,你会得到这样的结果:
# 1 "_.c" # 1 "" # 1 "" # 1 "_.c" int func( int i, float f, char c ) {
3
你会发现,要做到这一点非常困难,没有一个真正的词法分析器和解析器。
这个代码可以帮你找到你想要的开括号:
f = open("myfile.c")
for l in f.readlines():
l = l.split('//')[0]
if '{' in l:
break
但是,比如说,你在字符串里面可能会有双斜杠等等。
7
这里有一个可以去掉注释的代码,它还能理解在字符串中的注释引入符:
from pyparsing import cppStyleComment,dblQuotedString
cppStyleComment.ignore(dblQuotedString)
src = cppStyleComment.suppress().transformString(src)
print src
用你原来的代码片段作为源代码,这段代码会输出:
int func(
int i,
float f,
char c
)
{
你可以在内存中完成所有这些操作,所以不需要先创建一个没有注释的文件。