我有类似追随者(简化版)
class ParseClass(object):
def __init__(self, tokens):
# do some processing on tokens
expr = Word().setParseAction(ParseClass)
有没有办法向ParseClass的 init 函数发送一些用户定义的参数?像某些上下文等所以我将 -
class ParseClass(object):
def __init__(self, tokens, context):
# do some processing on tokens based on context
expr = Word().setParseAction(ParseClass, context)
这可能吗?
答案 0 :(得分:5)
我希望如果前者有效,那么后者可以通过以下方式完成:
expr = Word().setParseAction(lambda tokens: ParseClass(tokens,context) )
但我不知道pyparsing。 (如果它不起作用,我会高兴地删除它)
答案 1 :(得分: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.