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

标签 python parsing pyparsing

我想利用 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/

相关文章:

javascript - 如何抑制来自 PhantomJS 的错误消息?

java - Java中的文本文件解析

c - 如何正确解析文本文件?

python - pyparsing - 如何使用比较运算符解析字符串?

python - maya python比例图片

python - 如何分组并一次加入多列的多行?

python - Amazon + Django 每12小时出现[Errno 5] Input/output error

python - 如何从 github 安装存储库?

python - 基本的 pyparsing : parsing expression using "and" and "or"

Python解析SQL并查找关系