pyparsing问题

tek*_*agi 3 python parsing expression pyparsing postfix-operator

现在我刚刚开始使用pyparsing解析简单的后缀表达式.目前,我得到了这个:

from pyparsing import *
integer = Word(nums)
op = Word("+-*/^", max=1)
space = Word(" ")
expr = Word(nums)+space+Word(nums)+space+op
parsed = expr.parseString("3 4 *")
print parsed
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会打印:

Traceback (most recent call last):
  File "star_parse.py", line 6, in <module>
    parsed = expr.parseString("3 4 *")
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pyparsing-1.5.5-py2.6.egg/pyparsing.py", line 1100, in parseString
    raise exc
pyparsing.ParseException: Expected W:( ) (at char 2), (line:1, col:3)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mar*_*nen 6

默认情况下处理空白区域.还有方便的oneOf:

from pyparsing import *
integer = Word(nums)
op = oneOf('* + - / ^')
expr = integer + integer + op
parsed = expr.parseString("3 4 *")
print parsed
Run Code Online (Sandbox Code Playgroud)

  • 而不是递归表达式,只需解析`ZeroOrMore(integer | op)`,使用将每个整数推送到堆栈的解析操作.在op上,弹出两个整数,执行op,然后推送结果.如果堆栈在处理结束时只有一个条目,则结果是,否则整数和操作不匹配. (2认同)