Arithmetic expression evaluator in Python
####################Program########################
def isEmpty(m):
return m== []
def peek(m):
return m[len(m)-1]
def prec(op):
if(op=='+'):
return 1
elif(op=='-'):
return 1
elif(op=='*'):
return 2
elif(op=='/'):
return 3
else:
return -1
def inftopos(infix):
retstack=[]
global vstack,opstack
i=0
lent = len(infix)
tempstr=''
chr = infix[i]
while(i<lent):
if(infix[i].isdigit() and i<lent):
while(infix[i].isdigit()):
tempstr+=infix[i]
i=i+1
if(i>=lent):
break
vstack.append(tempstr)
tempstr=''
elif(infix[i]=='+' or infix[i]=='-' or infix[i]=='*' or infix[i]=='/'):
if(not isEmpty(opstack)):
if(prec(peek(opstack))>=prec(infix[i])):
tempop = opstack.pop()
vstack.append(tempop)
opstack.append(infix[i])
i=i+1
elif(infix[i]=='('):
opstack.append(infix[i])
i=i+1
elif(infix[i]==')'):
while(not(peek(opstack)=='(')):
vstack.append(opstack.pop())
opstack.pop()
i=i+1
else:
print "Invalid expression"
while(not isEmpty(opstack)):
vstack.append(opstack.pop())
while(not isEmpty(vstack)):
retstack.append(vstack.pop())
return retstack
def do_operation(operator, val1,val2):
if(operator=='+'):
return int(val1)+int(val2)
elif(operator=='-'):
return int(val2)-int(val1)
elif(operator=='*'):
return int(val2)*int(val1)
elif(operator=='/'):
return int(val2)/int(val1)
else:
print "Invalid"
if __name__ == '__main__':
vstack = []
opstack=[]
t_stack=[]
expr = raw_input("Enter an expression to evaluate")
#expr = "(20+30)-(5+3)"
returned = inftopos(expr)
#print returned
#for v in vstack:
k=0
siz = len(returned)
while(k<siz):
v = peek(returned)
if(v.isdigit()):
t_stack.append(v)
returned.pop()
elif(v=='+'):
returned.pop()
ans = do_operation('+',t_stack.pop(),t_stack.pop())
t_stack.append(ans)
elif(v=='-'):
returned.pop()
ans = do_operation('-',t_stack.pop(),t_stack.pop())
t_stack.append(ans)
elif(v=='*'):
returned.pop()
ans = do_operation('*',t_stack.pop(),t_stack.pop())
t_stack.append(ans)
elif(v=='/'):
returned.pop()
ans = do_operation('/',t_stack.pop(),t_stack.pop())
t_stack.append(ans)
else:
print "Invalid expression"
k=k+1
print "The result of the given expression is ",t_stack
Output:

Leave a Comment