Menggubah infix ke postfix dengan python 3.5
Sebelum ane membahas tentang topik diatas lebih baik anda tahu apa sih itu infix dan postfix.
INFIX
Infix adalah notasi yang membentuk atas operator dengan operand,dimana
operator berada diantara operand.
Contoh :
- A + B * C
- (A + B) * C
- A - (B + C) * D ^ E
Contoh :
- A + B * C
- (A + B) * C
- A - (B + C) * D ^ E
POSTFIX
Postfix
adalah notasi yang membentuk atas operator dengan operand, dimana operator
berada dibelakang operand.
Contoh : A + B * C ( infix).
maka
notasi postfix adalah ABC*+.
Pemecahannya:
- A + B * C
BERIKUT INI KODINGANNYA :
class
StackClass:
def __init__(self, itemlist=[]):
self.items = itemlist
def isEmpty(self):
if self.items == []:
return True
else:
return False
def peek(self):
return self.items[-1:][0]
def pop(self):
return self.items.pop()
def push(self, item):
self.items.append(item)
return 0
def
infixtopostfix(infixexpr):
s=StackClass()
outlst=[]
prec={}
prec['/']=3
prec['*']=3
prec['+']=2
prec['-']=2
prec['(']=1
oplst=['/','*','+','-']
tokenlst=infixexpr.split()
for token in tokenlst:
if token in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or token in
'0123456789':
outlst.append(token)
elif token == '(':
s.push(token)
elif token == ')':
topToken=s.pop()
while topToken != '(':
outlst.append(topToken)
topToken=s.pop()
else:
while (not s.isEmpty()) and (prec[s.peek()]
>= prec[token]):
#print token
outlst.append(s.pop())
#print outlst
s.push(token)
print (s.peek())
while not s.isEmpty():
opToken=s.pop()
outlst.append(opToken)
#print outlst
return outlst
#return " ".join(outlst)
print
(infixtopostfix("A * B + C * D"))