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.
35 lines
1.1 KiB
35 lines
1.1 KiB
from Pile import Pile_chaine as Pile
|
|
|
|
class Expression:
|
|
def __init__(self, racine, gauche, droit):
|
|
"""initialisation d'un objet 'Expression'"""
|
|
self.racine = racine
|
|
self.gauche = gauche
|
|
self.droit = droit
|
|
|
|
def evalue(self):
|
|
"""renvoie la valeur de l'expression"""
|
|
if self.racine == "+":
|
|
return self.gauche.evalue() + self.droit.evalue()
|
|
if self.racine == "*":
|
|
return self.gauche.evalue() * self.droit.evalue()
|
|
|
|
return self.racine
|
|
|
|
def __str__(self):
|
|
"""affiche l'expression"""
|
|
#temporaire
|
|
if self.racine in ["+","*"]:
|
|
return "(" + str(self.gauche) + ")" + self.racine + "(" + str(self.droit) + ")"
|
|
|
|
return str(self.racine)
|
|
|
|
|
|
def npi2tree(liste_en_npi):
|
|
pile_expr = Pile()
|
|
for element in liste_en_npi:
|
|
if element in ["+", "*"]:
|
|
pile_expr.empiler(Expression(element, pile_expr.depiler(),pile_expr.depiler()))
|
|
else:
|
|
pile_expr.empiler(Expression(element, None, None))
|
|
return pile_expr.sommet()
|