You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
67 lines
2.0 KiB
from File import File_chaine as File
|
|
from Pile import Pile_chaine as Pile
|
|
|
|
|
|
class Expression:
|
|
def __init__(self, valeur, gauche=None, droite=None):
|
|
self.valeur = valeur
|
|
self.gauche = gauche
|
|
self.droite = droite
|
|
|
|
def evalue(self):
|
|
|
|
if type(self.valeur) == int:
|
|
return self.valeur
|
|
|
|
if self.valeur == '+':
|
|
return self.gauche.evalue() + self.droite.evalue()
|
|
if self.valeur == '*':
|
|
return self.gauche.evalue() * self.droite.evalue()
|
|
if self.valeur == '/':
|
|
return self.gauche.evalue() / self.droite.evalue()
|
|
if self.valeur == '-':
|
|
return self.gauche.evalue() - self.droite.evalue()
|
|
|
|
|
|
def __str__(self):
|
|
if type(self.valeur) == int:
|
|
return str(self.valeur)
|
|
if self.valeur == '+':
|
|
return "("+ str (self.gauche) + "+" + str (self.droite) + ")"
|
|
if self.valeur == '*':
|
|
return "("+ str (self.gauche) + "*" + str (self.droite) + ")"
|
|
if self.valeur == '/':
|
|
return "("+ str (self.gauche) + "/" + str (self.droite) + ")"
|
|
if self.valeur == '-':
|
|
return "("+ str (self.gauche) + "-" + str (self.droite) + ")"
|
|
|
|
|
|
|
|
if __name__ =="__main__":
|
|
e = Expression('*',
|
|
Expression(6, None, None),
|
|
Expression('+',
|
|
Expression(4, None, None),
|
|
Expression(3, None, None)
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
class Conversion:
|
|
def npi2tree (lst):
|
|
"""fonction npi2tree prenant en paramètre une liste correspondant l’expression en notation
|
|
polonaise inversée et renvoyant l’arbre (de type Expression) correspondant"""
|
|
p = Pile(Expression)
|
|
lst = []
|
|
for ele in lst :
|
|
if ele == '+' or ele == '*':
|
|
exp = Expression(ele, Expression())
|
|
p.empiler(exp)
|
|
else:
|
|
p.empiler ...
|
|
return exp
|
|
|
|
|
|
|