python语言解释器模式_Python表达式求值器和解释器模式

我试图用python实现一个简单的表达式求值器,但我被困在解析器中方法如下是我的代码片段。在class Number:

def __init__(self,value):

self.value=value

def execute(self):

return self.value

class Plus:

def __init__(self,left,right):

self.left=left

self.right=right

def execute(self):

return self.left+self.right

class Minus:

def __init__(self,left,right):

self.left=left

self.right=right

def execute(self):

return self.left-self.right

class Multiply:

def __init__(self,left,right):

self.left=left

self.right=right

def execute(self):

return self.left*self.right

import re

def parser(input):

stack=[]

token_pat = re.compile("\s*(?:(\d+)|(.))")

for number, operator in token_pat.findall(input):

if number:

stack.append(Number(int(number)))

else:

first,second=stack.pop(),stack.pop()

if operator=="+":

stack.append(Plus(first,second))

elif operator=="-":

stack.append(Minus(first,second))

elif operator=="*":

stack.append(Multiply(first,second))

else:

raise SyntaxError("unknown operator")

print stack[0].execute()

if __name__=="__main__":

parser('1 2 +')

当我运行上面的代码时,我得到了以下结果错误。可以有人看我的代码吗。在

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值