procedure evaluer(l:in out Liste; s: out
Integer) is
x,y:Integer;
p:Pile:=vide;
unSymbole:Character;
begin
loop
exit when estVide(l);
extraire(l,unSymbole);
case unSymbole
is
when '0'..'9'
=>
x:=Character'pos(unSymbole);
-- valeur ASCII de '0'=48
empiler(x-48,p);
when others
=>
x:=sommet(p);
depiler(p);
y:=sommet(p);
depiler(p);
case unSymbole is
when '+' => empiler(x+y,p);
when '-' => empiler(x-y,p);
when '*' => empiler(x*y,p);
when '/' => empiler(x/y,p);
when others => raise erreur;
end case;
end case;
end loop;
-- vérifier qu'il
ne reste plus qu'un élément dans la pile
-- sinon cela signifie
que l'expression est mal formée
s:=sommet(p);
depiler(p);
if not estVide(p)
then
raise mal_formee;
end if;
end evaluer;