2015-10-05 74 views
1

我有一个文件,在线条pythonStyleComments,例如:Pyparsing忽略除

def foo(): # declare 
    # Simple function 
    a = 0 # TODO: add random 
    return a 

所以,后来我想补充.IGNORE(pythonStyleComments)到pyparsing,但要处理任何元(如去做: )。我知道所有的元语词,所以我怎么能排除这个评论忽略?

也许声明评论为'#'+ Regex(),其中正则表达式将排除元语词?或者pyparsing有更优雅的方法吗?

回答

0

我刚才宣布comment = Literal('#').suppress() + Optional(restOfLine)

,然后将其添加为可选(评论)到每个语句的结尾,可能出现的位置。 然后加入

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) 

所以它的作品完美的我。

1

我会建议处理这个多次通过。首先,为您的TODO注释定义一个模式,并使用scanString来查找所有这些实例。然后用解析器运行第二遍,并将TODO与您定位的元素的位置进行匹配。

或者(这是完全未经测试的),尝试附加一个解析动作到pythonStyleComment,然后按照通常的方式做并调用parser.ignore(pythonStyleComment)。如果其中一个匹配,并且它与您的TODO格式相匹配,那么将关于该评论及其位置的内容保存到旁边。 (我不能肯定,忽略表达式得到运行他们的解析动作,所以你可能要与2回合方法。)