Pyparsing SetParseAction麻烦

时间:2012-02-10 18:44:19

标签: python parsing pyparsing

我是pyparsing的新蜜蜂我正在尝试使用setParseAction,但有时候不会调用它。 这是代码

def fun():
    comdty_tok = StringStart() + Word(alphas) + StringEnd()
    comdty_tok.setParseAction(call_back)
    comdty_tok.leaveWhitespace()
    return comdty_tok

def call_back(p):
    print 'Calling ....'
    print p

class ComdtyTok(Token):

     comdty_tok = StringStart() + Word(alphas) + StringEnd()
     comdty_tok.setParseAction(call_back)
     comdty_tok.leaveWhitespace()
     parseImpl = comdty_tok.parseImpl

class SymParser(object):
    tok =  ComdtyTok()
    @staticmethod
    def parse(symbol):
       p = SymParser.tok.parseString(symbol)
       print p
       print "Second"
       x = fun()
       x.parseString(symbol)
       return p

SymParser.parse('ABCD')

我不明白为什么第一次没有调用setParseAction。

2 个答案:

答案 0 :(得分:2)

我第一次玩pyparsing,所以......

在初始化类变量comdty_tok时,您实际上从不调用parseString(),因此永远不会调用与parse对象关联的回调。

答案 1 :(得分:1)

我只能说,我并不打算以像你所做的方式扩展像Token这样的课程。我怀疑在你的委托中你所包含的cmdty_tok属性已经省略了一些其他属性,例如parseAction,这些属性通常在parseImpl的分析时被引用。另一方面,fun()的实现与我使用和使用的其他帮助器和闭包非常一致,并且毫不奇怪,这种方法有效。

您想用ComdtyTok完成什么?