Python 在读取文件时避免使用C样式的注释
我正在使用python解析函数中LOC的C文件。 我从函数定义的第一行开始,跳过所有行,直到遇到第一个{ 问题是{也可以作为评论的一部分。我只想跳过所有{出现在评论中的内容 e、 gPython 在读取文件时避免使用C样式的注释,python,Python,我正在使用python解析函数中LOC的C文件。 我从函数定义的第一行开始,跳过所有行,直到遇到第一个{ 问题是{也可以作为评论的一部分。我只想跳过所有{出现在评论中的内容 e、 g 实现这一点的最佳pythonic方法是什么。如果没有真正的lexer和parser,你会发现要正确实现这一点是非常困难的 这将找到您要查找的开口支撑: f = open("myfile.c") for l in f.readlines(): l = l.split('//')[0] if '{' i
实现这一点的最佳pythonic方法是什么。如果没有真正的lexer和parser,你会发现要正确实现这一点是非常困难的 这将找到您要查找的开口支撑:
f = open("myfile.c")
for l in f.readlines():
l = l.split('//')[0]
if '{' in l:
break
但是,例如,在字符串文本中可以有双斜杠,等等。您会发现,如果没有真正的词法分析器和解析器,要正确处理这个问题是非常困难的 这将找到您要查找的开口支撑:
f = open("myfile.c")
for l in f.readlines():
l = l.split('//')[0]
if '{' in l:
break
但是,例如,您可以在字符串文本中使用双斜杠等。如果您有gcc,您可以使用gcc-E input\u文件作为预处理器,它将删除注释,但也扩展宏-可能会更改LOC。例如,输出将是: # 1 "_.c" # 1 "" # 1 "" # 1 "_.c" int func( int i, float f, char c ) {
如果您有gcc,您可以使用gcc-E input_文件作为预处理器,它将去除注释,但也会扩展宏-可能会更改LOC。对于您的示例,输出将是: # 1 "_.c" # 1 "" # 1 "" # 1 "_.c" int func( int i, float f, char c ) {
下面是一个注释剥离器,它还应该理解引用字符串中的注释介绍人:
from pyparsing import cppStyleComment,dblQuotedString
cppStyleComment.ignore(dblQuotedString)
src = cppStyleComment.suppress().transformString(src)
print src
将原始代码段作为src打印:
int func(
int i,
float f,
char c
)
{
您可以在内存中完成所有这些操作,因此不必首先创建无注释的文件。这里有一个注释剥离器,它还可以理解引用字符串中的注释介绍人:
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对于真正的lexer和parser。这里有很多您忽略的复杂性。对于包含/*?的字符串文字,如何处理以//*?开头的行,或者对于真正的lexer和parser,如何处理以/*?+1开头的行。您需要考虑的复杂性很多e忽略这里。包含/*?的字符串文字如何?以/*?或以//*?开头的行如何?这会改变LOC计数。这会改变LOC计数。