我是一个pyparsing的新蜜蜂我想尝试setParseAction,但它并没有被调用有时。 下面是代码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不叫首次。
我不认为这是它 - 解析中的第一条语句是'p = SymParser.tok.parseString(symbol)'。 – PaulMcG 2012-02-10 19:26:24
@PaulMcGuire:你说得对。我刚刚在这只小狗的胆量中花了大约1/2小时,坦率地说,我很困惑。在两个令牌实例上设置'setDebug()'只会增加神秘感。第一次调用显示根本没有调试输出,而第二次调用按预期进行。如果你用'= fun()'初始化'SymParser.tok',那么所有东西都是甜美和轻盈的。 – 2012-02-10 20:32:41
+1为了尽力弄清楚这个...... – PaulMcG 2012-02-10 21:07:00