
infix
By:
phillip1882 on
Jul 23rd, 2012 | syntax:
Python | size: 1.91 KB | hits: 51 | expires: Never
import re
def factor(elements):
i = 0
value = 1
token = "*"
while "/" in elements or "*" in elements:
if elements[i+1] == "*":
if token == "*":
value *= int(elements[i])
else:
value /= int(elements[i])
token = "*"
elements.pop(i+1)
elif elements[i+1] == "/":
if token == "*":
value *= int(elements[i])
else:
value /= int(elements[i])
token = "/"
elements.pop(i+1)
i += 1
if token == "*":
value *= int(elements[i])
else:
value /= int(elements[i])
return int(value)
def expr(elements):
i = 0
value = 0
token = "+"
while "-" in elements or "+" in elements:
if elements[i+1] == "+":
if token == "+":
value += factor(elements[:i+1])
else:
value -= factor(elements[:i+1])
token = "+"
elements = elements[i+2:]
i = 0
elif elements[i+1] == "-":
if token == "+":
value += factor(elements[:i+1])
else:
value -= factor(elements[:i+1])
token = "-"
elements = elements[i+2:]
i = 0
i += 1
if token == "+":
value += factor(elements)
else:
value -= factor(elements)
return value
def infix(string1):
tokens = re.split('(\W)',string1)
i = 0
while '' in tokens or ' ' in tokens[i] :
if tokens[i] == ' ' or tokens[i] =='':
tokens.pop(i)
i+= 1
i = 0
j = 0
while ')' in tokens:
if tokens[i] != ")":
i += 1
j = i
while tokens[j] != "(":
j -= 1
if tokens[i] == ")" and tokens[j] == "(":
tokens = tokens[:j]+[str(expr(tokens[j+1:i]))]+tokens[i+1:]
i = 0
value = expr(tokens)
return value
print(infix("27*((15+36)/2)-7"))