Vous êtes sur la page 1sur 9

Institut Supérieur Section : L_INFO_2

d'Informatique et de Enseignante : Aida Lahouij


Mathématiques de Monastir Matière : Techniques de
Compilation
2022/2023

TD4
Analyse Syntaxique

Exercice1 :
Soit la grammaire LL(1) pour une petite expression logique qui utilise les opérateurs && et ||
:
E -> T E'
E' -> || T E' | ε
T -> F T'
T' -> && F T' | ε
F -> ( E ) | id | ! F
1. Calculer l'ensemble des premiers de cette grammaire
prem(E) = {id, (, !}
prem(E') = {||, ε}
prem(T) = {id, (, !}
prem(T') = {&&, ε}
prem(F) = {id, (, !}
2. Calculer l'ensemble des suivants de cette grammaire
suiv(E) = {||, $}
suiv(E') = {||, $}
suiv(T) = {||, &&, $}
suiv(T') = {||, &&, $}
suiv(F) = {||, &&, $}
3. Établir la table d'analyse

4. Cette grammaire est-elle LL(1) ?


Pas d’entrée multiple donc LL(1)
5. Donner l’analyse descendante de cette expression (id && id) || (!id && id)

Exercice2 :
Voici un autre exemple de grammaire LL(1) :
S → if C then S else S | if C then S | other
C → id < id
1. Cette grammaire est-elle ambiguë?
Cette grammaire n'est pas ambigüe, car chaque non-terminal a une seule production
pour chaque choix possible d'entrée.
2. Calculer l'ensemble des premiers de cette grammaire
Premiers(S) = {if, other}
Premiers(S1) = {if, other}
Premiers(C) = {id}
3. Calculer l'ensemble des suivants de cette grammaire
Suivants(S) = {$}
Suivants(S1) = {else, $}
Suivants(C) = {then}
4. Établir la table d'analyse

5. Cette grammaire est-elle LL(1) ?


Pas d’entrée multiple donc LL(1)
6. Donner l’analyse descendante de ces expressions :
- if x < y then other else other
Exercice3:
Soit la grammaire :

1. Construire les ensembles PREMIER et SUIVANT pour cette grammaire.

2. Établir la table d'analyse et montrer que cette grammaire n'est pas LL(1)

Exercice4 :
Soit la grammaire G dont les règles de production sont les suivantes :
S -> L B (P1)
B -> :S | :=L (P2)
E -> a | L (P3)
J -> ,EJ|) (P4)
L -> (EJ (P5)
S: axiome
1. Donner explicitement le quadruplet <VT, VN, S, P> de G.
VT= {‘ :’ , ‘=’, ‘(’, ‘)’, ‘a’, ‘,’, }
VN= {S, L, B, E, J}
S= S
P= {P1, P2, P3, P4, P5}

2. De quel type est cette grammaire ? Justifier.


Cette grammaire est de type 2.
3. Donner un arbre de dérivation pour le mot (a) ::=(a)
Le mot (a) ::=(a) n’appartient pas à la grammaire G.
4. Calculer l’ensemble Premiers
PREMIER(S) = PREMIER(L) = { ( }
PREMIER(B) = { : }
PREMIER(E) ={ a ∪ PREMIER(L)} = { a, ( }
PREMIER(J) = {‘ ,’ , ‘)’}
5. Calculer l’ensemble Suivants
SUIVANT(S) = {$ ∪ SUIVANT(B) }= {$}
SUIVANT(B) = { SUIVANT(S)}= {$}
SUIVANT(E) = PREMIER(J) = {‘,’ , ‘)’}
SUIVANT(L) =PREMIER(B) ∪ SUIVANT(B) ∪ SUIVANT(E)= { :, $, ‘,’, )}
6. Construire la table d’analyse LL de G

7. G est LL(1) ou non ?


NON
Exercice 5:
Soit la grammaire d'expressions arithmétiques définie par les productions suivantes :

1. Quels sont les terminaux de la grammaire ?


2. Donner les dérivations les plus à gauche pour les chaînes 5+3*2 et 3 ;2/3*(1-3) ;

3. Cette grammaire est-t-elle récursive à gauche ? Si oui, transformez-la en grammaire


récursive à droite.

4. On cherche maintenant à écrire un analyseur syntaxique descendant pour cette grammaire.


Quelle grammaire utiliser ?

5. Simuler l'analyse de l'expression 3*(1+2)/(1) par un analyseur de type descendant.


Exercice 6:
Soit la grammaire :

1. Cette grammaire est-elle LL(1) ?


2. Comment lève-t-on généralement l'ambiguïté rencontrée ?
Il existe plusieurs techniques pour éliminer l'ambiguïté d'une grammaire. Voici
quelques-unes des méthodes les plus courantes :

- Réécriture de la grammaire : cette méthode consiste à modifier la grammaire de


sorte qu'elle n'ait plus d'ambiguïté. Cela peut se faire en écrivant des règles de
production plus précises ou en introduisant des symboles supplémentaires.

- Factorisation : la factorisation consiste à regrouper des parties de règles de


production communes pour éviter les ambiguïtés. Cette méthode peut être
utilisée pour éliminer les ambiguïtés à gauche et à droite.

- Utilisation de la préférence des opérateurs : dans les grammaires qui définissent


des expressions avec des opérateurs, il est souvent possible d'utiliser la priorité
des opérateurs et l'associativité pour éliminer les ambiguïtés.

- Utilisation de la récursivité : la récursivité peut souvent être utilisée pour éliminer


les ambiguïtés en créant une hiérarchie de sous-productions.

- Utilisation de la grammaire de Backus-Naur Form (BNF) : la BNF est une notation


formelle pour écrire des grammaires sans ambiguïté. Elle permet d'écrire des
règles de production sous une forme qui est facile à comprendre et à manipuler.

Il convient de noter que l'élimination de l'ambiguïté peut parfois entraîner une perte
de concision ou de lisibilité de la grammaire. Il est donc important de trouver un
équilibre entre la simplicité de la grammaire et son absence d'ambiguïté
3. Analyser l'instruction suivante en utilisant le choix de la question précédente :
IF x THEN IF y THEN i:=j ELSE i:=k

Vous aimerez peut-être aussi