IFT313 -- SOLUTIONS DU LAB 4 PAGE 1 sur 3
INTRODUCTION AUX LANGAGES FORMELS IFT313
Département d’informatique Université de Sherbrooke LAB 4 : GRAMMAIRES LL(1)
ENSEIGNANT
Froduald.Kabanza@usherbrooke.ca ASSISTANT
Francis.Bisson@usherbrooke.ca
Soit la grammaire G = (V, A, R, REQ) où :
V = {REQ, COLS, TABS, LISTEID, CLAUSE, COND}
A = {‘select’, ‘from’, ‘where’, ‘=’, ‘,’, id}
R = {
REQ → ‘select’ COLS ‘from’ TABS CLAUSE COLS → LISTEID
TABS → LISTEID
CLAUSE → ‘where’ COND | ε COND → id ‘=’ id
LISTEID → LISTEID ‘,’ id | id }
a. Expliquez clairement, en moins de trois lignes et sans faire référence à la table d’analyse, pourquoi cette grammaire n’est pas LL(1).
La grammaire G n’est pas LL(1) puisqu’elle a une règle récursive à gauche (LISTEID LISTEID ‘,’ id) et que le symbole LISTEID est accessible à partir du symbole de départ de G.
b. Donnez une grammaire G’ équivalente, avec le moins de modifications possible, qui est LL(1).
Conseil : numérotez vos règles de production et évitez d’utiliser l’opérateur « ou » ( | ). Vous aurez à référencer ces règles aux sous questions d et e.
1. REQ → ‘select’ COLS ‘from’ TABS CLAUSE 2. COLS → LISTEID
3. TABS → LISTEID
4. CLAUSE → ‘where’ COND 5. CLAUSE → ε
6. COND → id ‘=’ id
7. LISTEID → id LISTEID2 8. LISTEID2 → ‘,’ id LISTEID2 9. LISTEID2 → ε
IFT313 -- SOLUTIONS DU LAB 4 PAGE 2 sur 3
c. Donnez les tables Nullable, First et Follow pour les non terminaux de G’.
REQ COLS TABS CLAUSE COND LISTEID LISTEID2 Nullable false false false true false false True First ‘select’ id id ‘where’ id id ‘,’
Follow $ ‘from’ ‘where’,
$ $ $ $,
‘from’,
‘where’
$, ‘from’,
‘where’
d. Donnez la table d’analyse LL(1) pour cette grammaire. Pour simplifier l’écriture des règles longues, vous pouvez les numéroter en (b) et mettre des numéros dans la table LL(1).
‘select’ ‘from’ ‘where’ ‘=’ ‘,’ id $
REQ 1
COLS 2
TABS 3
CLAUSE 4 5
COND 6
LISTEID 7
LISTEID2 9 9 8 9
e. Simulez l’exécution de l’algorithme Driver LL(1) avec la table précédemment calculée sur la chaîne « select matricule from etudiants » où matricule et etudiants sont des identificateurs (symbole terminal id).
Position 1 2 3 4 5
texte
brut select matricule from etudiants symbole
terminal select id from id $
Pour simplifier l’écriture, au lieu d’écrire la chaîne restante, écrivez plutôt la position de la tête de lecture par un entier. Lorsque le contenu d’une colonne est inchangé d’une étape à l’autre, vous pouvez écrire des guillemets ( " ) pour indiquer qu’on retrouve la même chose qu’à la ligne précédente.
Pour la colonne opération, écrivez le cas utilisé de l’algorithme Driver LL(1) : 1) Initialiser la pile : placer $ et le symbole de départ de la grammaire 2) Mise en correspondance d’un terminal (« matching »)
3) Application d’une dérivation la plus à gauche 4) Acceptation de la chaîne en entrée
IFT313 -- SOLUTIONS DU LAB 4 PAGE 3 sur 3
Cas Règle de production
(cas 3) Contenue de la pile
($ indique le fond) Pos. tête
lecture
1 REQ $ 1
3 1. REQ → ‘select’
COLS ‘from’ TABS CLAUSE
‘select’ COLS ‘from’ TABS CLAUSE $ 1
2 Lire select/select COLS ‘from’ TABS CLAUSE $ 2
3
2. COLS → LISTEID LISTEID ‘from’ TABS CLAUSE $ 2
3 7. LISTEID → id
LISTEID2 id LISTEID2 ‘from’ TABS CLAUSE $ 2
2
Lire id/matricule LISTEID2 ‘from’ TABS CLAUSE $ 3
3 9. LISTEID2 → ε ‘from’ TABS CLAUSE $ 3
2 Lire from/from ‘TABS CLAUSE $ 4
3 3. TABS → LISTEID LISTEID CLAUSE $ 4 3 7. LISTEID → id
LISTEID2 id LISTEID2 CLAUSE $ 4
2
Lire id/etudiants LISTEID2 CLAUSE $ 4
3 9. LISTEID2 → ε CLAUSE $ 5
3 5. CLAUSE → ε $ 5
4 Accepté