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