Notation Polonaise Inversée

Transcription

Notation Polonaise Inversée
INFO3014
Informatique théorique
Projet
Notation Polonaise Inversée
I.
Expression postfixe
Une expression arithmétique est dite en notation polonaise inversée, ou plus formellement
appelée expression postfixe, lorsque les opérandes précèdent l’opérateur.
Exemple : l’expression : (6 + 4 − (2 × 3)) se note en notation postfixe : 6 4 + 2 3 × −.
Remarque : une expression postfixe ne contient jamais de parenthèses.
II.
Grammaire
Dans un premier temps, il est demandé d’écrire :
+ Un fichier lex projet.l capable de reconnaître des identificateurs, des nombres entiers, des
nombres réels et les quatre opérateurs +, −, ∗ et /.
+ Un fichier yacc projet.y contenant :
* une grammaire capable de décrire un fichier d’entrée contenant plusieurs expressions
arithmétiques postfixes, une par ligne ;
* des attributs associés aux non terminaux de la grammaire pour construire un arbre
binaire de chaque expression postfixe reconnue.
Exemple : l’expression 2 15 × 5 10 + − peut être représentée par l’arbre binaire suivant :
−
+
*
2
Éric Hervet
15
5
6 Page 1 sur 2 6
10
Automne 2016
INFO3014
III.
Informatique théorique
Projet
Notation infixe et simplification
Après l’analyse syntaxique (appel à yyparse() dans le main()) d’un fichier contenant plusieurs
expressions postfixes, on affichera chaque expression en notation infixe (notation habituelle)
grâce à un parcours infixe (sous-arbre gauche - racine - sous-arbre droit) de l’arbre construit
pour chaque expression postfixe.
Exemple : 6 4 + 2 3 × − donne en notation infixe : ( 6 + 4 − ( 2 × 3 ) ).
Dans un premier temps, on pourra parenthéser systématiquement sans s’occuper des priorités
entre opérateurs.
Enfin, lorsque toutes les étapes précédentes sont opérationnelles, simplifier les sous-expressions
qui peuvent l’être.
Exemples : ( x ∗ ( 10 + 2 ) ) se simplifie en ( x ∗ 12 ), qui se note de manière abrégée 12x.
x + x se note 2x. 0 − x se note −x (moins unaire).
1 ∗ x ou x ∗ 1 se simplifient en x, ainsi que 0 + x ou x + 0 et x/1.
0 ∗ x ou x ∗ 0 égalent 0, ainsi que x − x.
x/x égale 1.
x ∗ x peut se noter x^2.
1/x peut se noter x^(−1).
IV.
Indications
+ On peut représenter la structure d’arbre binaire grâce à des structures ou classes et des
pointeurs, ou utiliser les structures d’arbres et de noeuds disponibles dans la STL 1 .
+ Puisque le fichier d’entrée peut contenir plusieurs expressions postfixes, il faut gérer un tableau
ou une liste (vecteur) d’arbres.
V.
Exemples
Le fichier d’entrée :
6 4 + 2 3 * x 2 * y 5 1 - * +
x 2 - x 6 3 / + *
10 x 2 - * 13 3 - x 3 5 - + * devrait produire la sortie suivante :
4
2x+4y
(x-2)*(x+2)
0
1. Standard Template Library : http://www.sgi.com/tech/stl/
Éric Hervet
6 Page 2 sur 2 6
Automne 2016