A → BD
B → CwB|ε
C → DxB|v
D → t|tu
Table d'analyse
T U V w x $
A A → t B' D A → v D'
B B → tB' B→ε B→ε B→ε
B' B' → u w B B' → w B
D D → vD'
D' D' → x B D' D' → ε
IN S T I TUT الجـمـــھـورية التــــونـسـيـة
SUPERIEUR وزارة الـتعليم العالي
INFORMATIQUE
ISI
الـمعھـد العـالـي لإلعـالمــيـة
جامــــعــة تــونــس المــنـار
المعـھـد الـعالـي لإلعـالمـيـة
Exercice 2
Construire une définition dirigée par la syntaxe pour un langage qui prend en entrée une
chaîne de caractère composée de "x", de "y" et de "z" et produit en sortie le nombre de
sous-chaînes dans la chaîne d'entrée qui correspondent à la configuration :
x (x | y) * z (x | y) * y
Par exemple, si la chaîne en entrée est "xyyzxyzxyxyz" le résultat donné par la définition
dirigée par la syntaxe est "3".
a) Une grammaire hors contexte simple qui génère toutes les chaînes composées de
"x", "y" et "z"
La grammaire hors contexte est aussi simple que celle qui suit. C'est une
grammaire régulière G = {{x, y, z}, {S}, S, R} pour toutes chaînes définies sur
l'alphabet Σ = {x, y, z} avec le système de réécriture R.
S → Sx | Sy | Sz | x | y | z
b) Des attributs pour les symboles de cette grammaire
La grammaire ci dessus engendre pour chaque chaîne, des arbres d'analyse
penchant à gauche, c'est à dire que toutes ses branches sont à gauche puisque la
grammaire est clairement récursive à gauche. On définit trois attributs synthétisés
pour le non terminal S, disons nA1, nA2 et total. L'idée de ces attributs est que le
premier attribut se charge du comptage du nombre de "x" à gauche d'un caractère
"z" donné, le deuxième attribut, nA2, comptabilise le nombre de "x" droite d'un
caractère “z” donné. Le dernier attribut, total, accumule le nombre de sous
chaînes correspondant au motif.
Nous avons besoin de compter le nombre de "x" à gauche d'un caractère “z” et à
sa droite de telle sorte que pour pouvoir ajouter la valeur de nA1 à la valeur
courante de total à chaque occurrence de "y" apparaissant à droite de “z” et qui
mémorise le nombre de "x" à droite de "z". Cela permet, à chaque fois qu'on
tombe sur un nouveau caractère "z" de copier le nombre de "x" apparaissant à
droite du premier "z" et qui sont maintenant à gauche du deuxième "z".
Considérons la traduction dirigée par la syntaxe suivante ; la grammaire est définie par
G = ({S, I, Signe}, {',' ; '-' ; '+' ; 'n'}, S, R). "n" est un symbole terminal spécial qui
est lexicalement appariés à n'importe quelle chaîne représentant un chiffre et dont la
valeur est la valeur numérique de la représentation décimale. Pour les symboles non
terminaux de G on a défini deux attributs, sign et val. Le nom terminal I dispose des
deux attributs alors que S ne dispose que de l'attribut val et le non terminal Signe ne
dispose que de l'attribut sign.
1. Expliquer ce que fait cette DDS et indiquer, en expliquant pourquoi, quels sont les
attributs synthétisés et ceux hérités.
Cette définition dirigé par la syntaxe calcule la valeur maximale ou minimale d'une
séquence de nombres entiers en fonction du suffixe «-» ou «+», respectivement.
Quant aux attributs, l'attribut sign du non terminal Signe est un attribut synthétisé.
L'attribut val est également synthétisée mais l'attribut sign de I est hérité puisqu'il
découle du "droit-à-gauche" (donc de haut en bas dans l'arbre d'analyse) pour une
production de I.
2. Donner un arbre d'analyse attribué pour l chaîne "6, 4, 3-" en évaluant les attributs
dans l'arbre et en indiquant dans quel ordre les attributs doivent être évalués (si
plusieurs ordres sont possibles indiquer un seul).
Facile
3. Proposer une grammaire modifiée que n'utilise que des attributs synthétisés en
expliquant les opérations de base.