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 に答える