Skip to main content

Vidéo 6.2

Notes inspirées du cours de JANIN David

Par exemple la grammaire

1. exp -> exp + exp
2. exp -> exp * exp
3. exp -> id
4. exp -> cte
5. exp -> (E)

Tachons de reconnaître l'entrée id + id * id. Nous allons fabriquer un tableau

Pile (ce que j'ai déjà lu)Entrée (qui reste à lire)Action
id + id * idDécalage
id+ id * idRéduction (3)
exp+ id * idDec +
exp +id * idDec id
exp + id* idRed (3)
exp + exp* idConflit Red(1) ou Dec *
exp + exp *idDec id
exp + exp * idEOFRed(3)
exp + exp * expRed(2)
exp + expRed(1)
expEOFACCEPT

Là nous avons un automate / analyseur à pile. La pile contient des mots terminaux et non terminaux. Les transitions lisent au plus k symboles en somme de pile (ici k = 3).

Ici on a une table d'action.

Sommet de pile \ Entréeidentifiantconstanteplusfois()
RienDDEEDE
IdEER(3)R(3)ER(3)
csteEER(4)R(4)ER(4)
expEEDDED
exp + expEER(1)DED
exp * expEER(2)R(2)ER(2)
(exp)EER(5)R(5)ER(5)
(DDEEDE
+DDEEDE
*DDEEDE

Et les attributs : comment les manipuler en même temps qu'on fait l'analyse ? On peut stocker sur la pile d'analyse les attributs en même temps que les terminaux et non terminaux. Puis faire une réduction x \rightarrow x_1, x_2, ... x_n; \{\$=f($1, ... , $n)}$

Les attributs synthétisés se calculent très facilement lors de l'analyse par décalage réduction. Dernière remarque : on peut aussi accéder aux attributs se trouvant avant dans la pile, avec 0, -1 ... Ou a utiliser ce principe pour produire du code 3 adresses avec la grammaire ETC.