阅读文件时避免使用C样式注释

时间:2009-10-31 15:05:43

标签: python

我正在使用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方式。

3 个答案:

答案 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

         )
{