在python中标记化C ++程序

时间:2016-03-30 19:50:01

标签: python stringtokenizer

我需要为我的项目标记化C ++文件。为此,我使用tokenize.generate_tokens。在每一行中,我得到了一个奇怪的字符,因为' \ r'并将其解析为令牌。我需要避免使用该字符来计算令牌。当我将文件传递给tokenize时,我不知道该怎么做。下面是我正在使用的代码:

f = open("BM1A1.cpp","r")
g = tokenize.generate_tokens(f.readline)

我尝试过strip()但是给出了错误

g = tokenize.generate_tokens(f.readline.strip())
error:
'builtin_function_or_method' object has no attribute 'strip'

1 个答案:

答案 0 :(得分:2)

由于generate_tokens需要callable作为输入参数,因此您需要创建自定义函数。

  

generate_tokens()生成器需要一个参数readline,它必须是可调用对象,它提供与内置文件对象的readline()方法相同的接口(参见文件对象部分)。对函数的每次调用都应该返回一行输入作为字符串。或者,readline可能是一个可调用的对象,它通过提高StopIteration来表示完成。

最简单的方法是创建一个lambda:

f = open("BM1A1.cpp","r")
g = tokenize.generate_tokens(lambda: f.readline().strip())

显然,你会遇到奇怪的解析结果,因为tokenize模块是为Python语法而不是C ++语法定义的。