expr = "3 4 +"
expr = "3 4 + 2 *"
parser = Parser()
cal = Polish()
for e in expr.split(" "):
e = parser.scan(e)
e.switch({
Value: cal.value,
Op : cal.op,
})
print cal.evaluate()
# --------------------------
class Polish:
def __init__(self):
self.stack = []
def value(self, e):
self.stack.append(e)
def op(self, e):
op2 = self.stack.pop()
op1 = self.stack.pop()
value = eval("%s %s %s"%(op1, e, op2))
self.stack.append(value)
def evaluate(self):
return self.stack.pop()
# --------------------------
class Token:
def __repr__(self):
return "%s"%self.value
def switch(self, dispatch):
return dispatch[self.__class__](e)
class Value(Token):
def __init__(self, value):
self.value = int(value)
class Op(Token):
def __init__(self, value):
self.value = str(value)
# --------------------------