我正在使用python在函数中解析LOC的C文件。 我从函数定义的第一行开始并跳过所有行,直到我遇到第一个“{”。
问题是“{”也可以作为评论的一部分。我只想跳过所有“{”内部评论。
e.g
100: int func(
102: int i, // some comment { ....
103: float f,
104: char c /* some comment here { ...
105: .... more comment */
106: )
107:{
什么是实现这一目标的最好的pythonic方式。
答案 0 :(得分:7)
这是一个评论剥离器,它还应该理解引用字符串中的注释引用者:
from pyparsing import cppStyleComment,dblQuotedString
cppStyleComment.ignore(dblQuotedString)
src = cppStyleComment.suppress().transformString(src)
print src
将原始片段作为src打印:
int func(
int i,
float f,
char c
)
{
您可以在内存中完成所有这些操作,因此您不必先创建无评论文件。
答案 1 :(得分:3)
如果没有真正的词法分析器和解析器,你会发现正确的做法非常困难。
这将找到你正在寻找的开口支撑:
f = open("myfile.c")
for l in f.readlines():
l = l.split('//')[0]
if '{' in l:
break
但是,例如,你可以在字符串文字等中使用双斜杠。
答案 2 :(得分:0)
如果你有gcc,你可以使用gcc -E input_file
作为预处理器来剥离注释(但也可以扩展宏 - 可能会改变LOC)。对于您的示例,输出将是:
# 1 "_.c" # 1 "" # 1 "" # 1 "_.c" int func( int i, float f, char c ) {