par , 05/06/2022 à 06h41 (390 Affichages)
voici les production pour une liste à droite:
on pourrais croire le schéma de traduction dirigée par la syntaxe serait le suivant:
1 2
| A -> a { A1.h = f( a.unilex ; A.h )} A1 { A.s = A1.s }
-> b { A.s = g( b.unilex ; A.h ) } |
Ce qui pose problème est que le non terminal A possède un attribut hérité. A ne peut donc pas être un axiome car à la racine de l'arbre, il n'y a ni de frères de gauche ni parent. L'attribut hérité au nœud A de l'arbre syntaxique décoré à l'axiome est alors incalculable.
je propose d'ajouter un non terminal qui sera à la racine et fournit une valeur nulle pour l'attribut du premier A:
le schéma de traduction est:
1 2 3
| P -> { A.h = nil } A { P.s = A.s }
A -> a { A1.h = f( A.h ; a.unilex ) } A1 { A.s = A1.s }
-> b { A.s = g( A.h ; b.unilex ) } |