Le but de cet exercice est de construire un parseur d'expressions arithmétiques simples.
Ces expressions sont représentées sous forme d'arbres, par exemple
2 + 3 est représenté par
+
/ \
2 3
et 4 * 5 + 2
+
/ \
* 2
/ \
4 5
car * est plus prioritaire de + donc il doit apparaitre avant dans l'ordre d'évaluation de l'arbre
(de gauche à droite).
Comme la notation
4 * 5 + 2 est compliquée à transformer dans le bon arbre puisque cela dépend
de la priorité des opérateurs, on va utiliser la notaion préfixe, celle où on met l'opérateur devant
car celle-ci n'est pas ambigue. En notation préfixe, cela donne
+ * 4 5 2
Pour représenter la valeur on utilisera le type
Value, pour représenter l'opérateur '+', on
utilisera le type
Add, pour représenter l'opérateur '-', on utilisera le type
Sub
et enfin pour représenter l'opérateur '*', on utilisera le type
Mul.
On peut remarquer que pour un opérateur, le fils gauche ou le fils droit peuvent être soit un autre opérateur
soit une valeur, il va donc nous falloir un type que l'on va appeler
Expr
qui représente toutes les valeurs possibles
(un
Value ou un
Add ou un
Sub ou un
Mul).
L'ensemble des classes devront être définies dans le paquetage
fr.umlv.calc si aucun paquetage n'est indiqué.