Vous êtes sur la page 1sur 4

UNIVERSITE DE DOUALA Année Académique 2020 – 2021

FACULTE DE SCIENCES Département de Maths - Info


Filière : IN NIVEAU : Licence

Examen de E.C. INF 325 : Langage Formel et Compilation Durée : 1 h 30 mn

EXERCICE I : (7 points)
Soit la grammaire suivante, d’axiome S.

S → S + S | S S | S* | ( S ) | a

1) Montrer que cette grammaire est ambiguë 0,5 pt


La grammaire est ambiguë, en effet nous pouvons trouver pour une chaine comme aaa deux arbres de dérivation
les deux arbres de dérivation.

2) Factoriser cette grammaire à gauche 0,5 pt


La grammaire étant factorisable à gauche, nous pouvons avoir :
S→ST|(S)|a
T→+S | S|*

3) Cette grammaire est-elle récursive à gauche ? Si oui lever la récursivité gauche. (0,5+0,5) pt
Oui la grammaire est récursive à gauche
Pour lever la récursivité gauche, nous allons définir une nouvelle grammaire G’ dont les règles de
production sont les suivantes :
S → ( S ) S’ | a S’
S’ → T S’| є
T→+S | S|*

4) Quel est l’intérêt de la nouvelle grammaire G’ d’être LL(1) 1 pt


L’intérêt d’avoir une grammaire G’ LL(1) est qu’on a une grammaire déterministe et l’analyse se fait de
gauche vers la droite en dérivant le non terminal le plus à gauche.

5) Calculer la fonction FRIST et FOLLOW 1,5 pt (0,25pt *6)


First ( S ) = { ( , a } First ( T ) = { ( , a , + , * } First ( S’ ) = { ( , a , + , * , є }

Follow ( S ) = { $, ( , a , + , * , ) } Follow ( T ) = { $, ( , a , + , * , ) } Follow ( S ) = { $, ( , a , + , * , ) }

6) Construire la table d’analyse et dire si la grammaire est-elle LL(1) ? (2+0,5) pts

Proposé par M. DJIKEN GUY LAHLOU


On obtient la table d’analyse ci-dessus. De cette table, nous pouvons conclure que cette grammaire n’est pas
LL(1)

EXERCICE II : (7 points)

Soit la grammaire G dont les règles de productions sont :

P⟶SS

S⟶cS│d

1. Donner une grammaire augmentée G’ 0,5pt

Soit la grammaire augmentée G’ dont les règles de production sont : P’ ⟶ P ; P ⟶ S S ; S ⟶ c S │ d

2. Déterminer l’ensemble des Item partant de l’item-0 Ferm{[P’→ . P ; #]} 2pts

Partant de l’item – 0, I0 = {[P’→ .P, #], [P → .SS, #], [S → .cS, c], [S → .cS, d], [S → .d, c], [S → .d, d]}

Explications : comme I0 contient l’item LR(1) [S’ → .P, #] on ajoute tous les items LR(1) avec S en partie gauche
et qui ont pour symbole de prévision un élément de First (𝝐 #) = {#}. On ajoute [P → . SS, #].

Comme I0 contient [P → .SS, #] on ajoute maintenant tous les items LR(1) avec S en partie gauche et qui ont
comme symbole de prévision un terminal de First (S #) = {c, d}. On ajoute [S → .cS, c], [S → .cS, d] et [S → .d,
c], [S → .d, d].

Calcul des autres états de l’automate LR(1) : I1 = Transition (I0, P) = {[S’ → P., $]}

I2 = Transition (I0, S) = {[P → S.S, #], [S → .cS, $], [S →.d, #]}

I3 = Transition (I0, c) = {[S → c.S, {c, d}], [S → .cS, {c, d}], [S → .d, {c, d}]}

I4 = Transition (I0, d) = {[S → d., {c, d}]}

I5 = Transition (I2, S) = {[S → SS., #]}

I6 = Transition (I2, c) = {[S → c.S, #], [S → .cS, #], [S → .d, #]}

I7 = Transition (I2, d) = {[S → d., #]}

I8 = Transition (I3, S) = {[S → cS., {c, d}]}

Transition (I3, c) = I3, Transition (I3, d) = I4

I9 = Transition (I6, S) = {S → cS., #]}

Transition (I6, c) = I6, Transition (I6, d) = I7.

3. Construire l’automate LR(1) pour la grammaire augmentée de G 1,5pt

Par convention dans la suite de cette correction, nous avons noté : P = S ; S = C ; c = a et d = b

La construction de l’automate LR(1) se fait par application de l’algorithme d’obtention de l’automate LR(0) avec
I0 = fermeture {[P’ → .P, $]}. Ici, il faut

Proposé par M. DJIKEN GUY LAHLOU


4. Construire la table d’analyse LR(1) et Dire si la grammaire est-elle dite LR(1) ? 3pts

Comme l’automate a été déjà construit, il revient de remplir la table LR(1) question de savoir si on admet au
maximum une seule règle de production par case.

EXERCICE III : (6 points)

On considère le mini-langage de programmation suivant :


➢ L'alphabet Alp du langage L est formé des lettres {a, ..., z, A, ..., Z}, des chiffres {0, ..., 9}, du point {.},
de la quote {'} et les caractères {+, -, *, /, =}.
➢ Un identificateur est composé de lettres et de chiffres et commence par une lettre.
➢ Un nombre peut être un entier (composé de chiffres) ou un décimal (composé d'une partie entière et d'une
partie fractionnaire séparées par un point).
➢ Un opérateur est l'une des 4 opérations arithmétiques.
➢ Une expression numérique est une suite de nombres ou d’identificateurs reliés par des opérateurs.
➢ Une affectation numérique associe un identificateur à une expression numérique (par le symbole =).
➢ Un littéral est une suite de symboles entre simple quotes.
➢ Une expression alphanumérique est une suite de littéraux ou d'identificateurs reliés par l'opérateur de
concaténation (symbole &).
➢ Une affectation alphanumérique associe un identificateur à une expression alphanumérique.
➢ Une expression syntaxiquement correcte du langage défini sur Alp est une affectation numérique ou
alphanumérique.
On cherche les expressions syntaxiquement correctes
Proposé par M. DJIKEN GUY LAHLOU
Décomposer ce problème en Analyse Lexicale et Analyse Syntaxique.

Il peut exister plusieurs décompositions lexicales/syntaxiques en fonction des lexèmes que l'analyse lexicale
reconnaît.
Ici, on suppose que les lexèmes reconnus par l'analyse lexicale sont: identificateur, nombre, litteral, operateur
numérique, concaténation et affectation.
L'analyse lexicale
Les phrases suivantes définissent les règles pour fabriquer les lexèmes.

• 01) L'alphabet Alp du langage L est formé des lettres {a, ..., z, A, ..., Z}, des chiffres {0, ..., 9}, du
point {.}, de la quote {'} et les caractères {+, -, *, /, =}.
• 02) Un identificateur est composé de lettres et de chiffres et commence par une lettre.
• 03) Un nombre peut être un entier (composé de chiffres) ou un décimal (composé d'une partie
entière et d'une partie fractionnaire séparées par un point).
• 04) Un opérateur est l'une des 4 opérations arithmétiques.
• 07) Un littéral est une suite de symboles entre simple quotes.
Il faut également ajouter des règles permettant de reconnaître les lexèmes de concaténation et d'affectation.

• 11) L'opérateur de concaténation est le signe &.


• 12) L'opérateur d'affectation est le symbole =.
L'analyse syntaxique
Pour l'analyse syntaxique, on parle de vocabulaire plutôt que d'alphabet.

Le vocabulaire est formé des lexèmes obtenus après l'analyse lexicale. Ces lexèmes sont ceux décrits précédemment
: identificateur, nombre, litteral, operateur numérique, plus et affectation.

Les phrases suivantes définissent les règles pour valider la suite de catégories de lexèmes obtenue après l'analyse
lexicale.
✓ Une expression numérique est une suite de nombres ou d'identificateurs reliés par des opérateurs.
✓ Une affectation numérique associe un identificateur à une expression numérique (par le symbole =).
✓ Une expression alphanumérique est une suite de littéraux ou d'identificateurs reliés par l'opérateur
de concaténation (symbole &).
✓ Une affectation alphanumérique associe un identificateur à une expression alphanumérique.
✓ Une expression syntaxiquement correcte du langage défini sur Alp est une affectation numérique
ou alphanumérique.

Proposé par M. DJIKEN GUY LAHLOU

Vous aimerez peut-être aussi