2

我有类似以下的内容(简化版)

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)

这可能吗?

4

2 回答 2

5

我希望如果前者有效,那么后者可以通过以下方式完成:

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

但我不知道pyparsing。(如果它不起作用,我会很乐意删除它)

于 2012-05-29T19:43:50.097 回答
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.
于 2012-05-29T22:20:31.870 回答