我有一个文件,行中有pythonStyleComments,例如:
def foo(): # declare
# Simple function
a = 0 # TODO: add random
return a
所以,那么我想将.ignore(pythonStyleComments)添加到pyparsing,但想要处理任何元(例如TODO :)。我知道所有的元词,所以如何排除这些注释忽略?
也许将评论声明为'#'+ Regex(),其中Regex会排除元字?还是pyparsing有更优雅的方法?
答案 0 :(得分:1)
我建议多次通过处理。首先,为TODO注释定义模式,并使用scanString定位所有这些实例。然后使用解析器运行第二遍,并将TODO与您找到的元素的位置相匹配。
OR(这是完全未经测试的),尝试将解析操作附加到pythonStyleComment,然后像往常一样执行并调用parser.ignore(pythonStyleComment)。如果匹配一个,并且它与您的TODO格式匹配,则将有关该注释及其位置的内容保存到侧面。 (我不肯定被忽略的表达式会运行它们的解析操作,所以你可能不得不采用2遍方法。)
答案 1 :(得分:0)
I have just declared comment = Literal('#').suppress() + Optional(restOfLine)
and then add it as Optional(comment) to the end of each statement, where it could appear. Then add
def commentHandler(t):
result = []
if "fixed" in t[0]:
result.append("fixed")
if "TODO: " in t[0]:
try:
message = t[0].split("TODO: ")[1].strip()
result.append(message)
except Exception as e:
result.append(t[0])
return result
comment.setParseAction(commentHandler)
So it works perfectly for me.