2012-05-29 63 views
2

我有类似以下(简体版)通过用户定义的参数setParseAction在pyparsing

class ParseClass(object): 
    def __init__(self, tokens): 
     # do some processing on tokens 

expr = Word().setParseAction(ParseClass) 

有没有办法把一些用户自定义的参数ParseClass的初始化功能?像一些上下文等,所以我会 -

class ParseClass(object): 
    def __init__(self, tokens, context): 
     # do some processing on tokens based on context 

expr = Word().setParseAction(ParseClass, context) 

这可能吗?

回答

5

我希望,如果以前的作品,那么后者可以通过完成:

expr = Word().setParseAction(lambda tokens: ParseClass(tokens,context)) 

,但我不知道pyparsing。 (我会高兴地删除这一点,如果它不工作)

+0

这应该只是罚款。 – PaulMcG

+0

@PaulMcGuire - 很高兴知道我不在左场。 – mgilson

4

使用一个函数,你的情况下,并返回相应的解析行动,它的返回值:

def replaceWith(replacementString): 
    def parseAction(string, loc, tokens): 
     return replacementString 
    return parseAction 

expr = Word(alphas).setParseAction(replaceWith("xyzzy")) 

print OneOrMore(expr).parseString("The quick brown fox jumps over the lazy dog.") 

打印:

['xyzzy', 'xyzzy', 'xyzzy', 'xyzzy', 'xyzzy', 'xyzzy', 'xyzzy', 'xyzzy', 'xyzzy'] 

或者使用transformString:

>>> print expr.transformString("The quick brown fox jumps over the lazy dog.") 
xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy. 
相关问题