2012-05-29 38 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. 
相關問題