Laman

29 April 2017

Menggubah infix ke postfix dengan python 3.5


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

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"))





Comments
0 Comments

No comments:

Post a Comment

Kolom komentar terdapat opsi anonim