gpt4 book ai didi

python - Pyparsing:如何实现C风格注释的特殊处理?

转载 作者:行者123 更新时间:2023-12-01 06:03:19 28 4
gpt4 key购买 nike

我想利用 cStyleComment 变量,但我想专门处理它们,而不是仅仅忽略这些注释。有什么方法可以让 pyparsing 在将其识别为注释的输入片段上调用我的处理程序,然后再将其丢弃吗?

我正在处理一些 C 代码,其中在注释中包含一些“特殊”指令。

最佳答案

pyparsing 中定义的任何 xxxStyleComment 表达式中没有任何固有的内容导致它们被忽略。它们的存在是为了方便,特别是因为某些注释格式很容易出错。除非您在较大的语法上调用 ignore 方法,否则它们不会被忽略,如下所示:

cHeaderParser.ignore(cStyleComment)

(例如,其中 cHeaderParser 可能是您编写的用于读取 .h 文件以提取 API 信息的内容。)

并且内置了对处理程序的 pyparsing 回调,只需使用 cStyleComment.setParseAction(commentHandler) 即可。 Pyparsing 可以处理具有以下任何签名的解析操作:

def commentHandler(inputString, locn, tokens):
def commentHandler(locn, tokens):
def commentHandler(tokens):
def commentHandler():

如果您的 commentHandler 返回一个字符串或字符串列表,或者一个新的 ParseResults,这些将用于替换输入标记 - 如果它返回 None,或省略 return 语句,则使用标记对象。您还可以就地修改标记对象(例如添加新的结果名称)。

所以你可以写这样的东西,将你的评论大写:

def commentHandler(tokens):
return tokens[0].upper()
cStyleComment.setParseAction(commentHandler)

(像这样简单的解析操作甚至可以写成cStyleComment.setParseAction(lambda t:t[0].upper()))

在编写这样的转换解析操作时,可能会使用 transformString 而不是 parseString

print cStyleComment.transformString(source)

这将打印原始来源,但所有注释都将大写。

关于python - Pyparsing:如何实现C风格注释的特殊处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221644/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com