Vous êtes sur la page 1sur 4

Ecole Supérieure Privée Technologies & Ingénierie

Type d’épreuve : Devoir Examen


Enseignant : Hajer SALHI
Matière : Compilation et Implémentation des langages
Année Universitaire : 2022-2023 Semestre : 2
Classe : GLSI-II
Documents : Autorisés Non autorisés
Date : 10/05/2023 Durée : 1h30
Nombre de pages : 2 page
Barème : 8 pts + 6 pts + 6 pts = 20 pts

Exercice 1 : (8 pts)
1. Ecrire un analyseur lexical
• qui reconnaît les unités lexicales suivantes:
− Les mots clés : Program, Begin, Var, integer, if, then, else, endIf, End.
− L'opérateur d'affectation ‘ :=’
− Le séparateur ‘;’ ‘ :’ ‘,’.
− Les opérateurs relationnels : ‘<’ ‘<=’ ‘>’ ‘>=’ ‘<>’ ‘=’
− Les identificateurs représentant les variables
− Les nombres signés (+ et -) positifs et négatifs, entiers et réels flottants
(Exemple : ‘+15.236’ ‘−178’ ‘−0.35’)
• qui remplace :
− les opérateurs de comparaison par “opComp”
− les variables par le mot “id”
− les nombre entiers par “nbInt” et les nombres flottants par “nbFloat”
− l'opérateur d'affectation par “opaff”
− les séparateurs par “sep”
• qui élimine les espaces “blancs”, “les tabulations” et les “retour en ligne”
• qui déclenche une erreur si autre caractère est lu.

2. Déterminer la séquence d’unités lexicales des mots :


Program Test
Var x,y, max : integer;
Begin
if x >= y then
max := x ;
else max := y ;
EndIf
End
Program id Var id sep id sep id sep integer sep Begin if id opComp id
0 1 0 2 , 3 , 4 : 0 ; 0 0 1 >= 2

then id opaff id sep else id opaff id sep EndIf End


0 3 := 1 ; 0 3 := 2 ; 0 0

Table des Mots clés xxxxxxx Table des identificateurs


Program Program 1 x --
Var Var 2 y --
integer integer 3 max --
Begin Begin
if if
then then
else else
EndIf EndIf
End End
Exercice 2 : (6 pts)
Soit G la grammaire non contextuelle suivante : ({𝑆} , {𝑎, 𝑏}, 𝑅, 𝑆)
où 𝑅 contient les productions suivantes : 𝑆 → 𝑆𝑆 | 𝑎𝑆𝑎 | 𝑏𝑆𝑏 | 𝜀
1. Le mot « 𝒂𝒂𝒃𝒂𝒃𝒃 » est-il généré par la grammaire G. Justifier votre réponse.
On ne peut pas générer les mot « 𝒂𝒂𝒃𝒂𝒃𝒃 »
La grammaire génère des expressions comportant un nombre pair de ‘a’ (en utilisant la règle 𝑆 →
𝑎𝑆𝑎 ) et/ou un nombre pair de ‘b’ (en utilisant la règle 𝑆 → 𝑏𝑆𝑏 ). Alors que le mot comporte un
nombre impair de ‘a’ et de ‘b’

2. Construire une dérivation gauche de « 𝒂𝒂𝒃𝒂𝒂𝒃 » et dessiner l'arbre syntaxique associé.


Dérivation gauche Arbre syntaxique
𝑆 → 𝑆𝑆
S
→ 𝒂𝑺𝒂𝑆
→ 𝑎𝑎𝑆 (𝑎𝜀𝑎𝑆)
→ 𝑎𝑎𝑏𝑆𝑏 S S
→ 𝑎𝑎𝑏𝑎𝑆𝑎𝑏
→ 𝑎𝑎𝑏𝑎𝑎𝑏 (𝑎𝑎𝑏𝑎𝜀𝑎𝑏) a S a b S b

𝜀 a S a

3. Construire une dérivation gauche et une dérivation droite de « 𝒂𝒂𝒃𝒃 » et dessiner leurs
arbres associés.
Dérivation gauche Dérivation Droite Arbre syntaxique
𝑆 → 𝑆𝑆 𝑆 → 𝑆𝑆
S
→ 𝑎𝑆𝑎𝑆 → 𝑆𝑏𝑆𝑏
→ 𝑎𝑎𝑆 (𝑎𝜀𝑎𝑆) → 𝑆𝑏𝑏 (𝑆𝑏𝜀𝑏)
→ 𝑎𝑎𝑏𝑆𝑏 → 𝑎𝑆𝑎𝑏𝑏 S S
→ 𝑎𝑎𝑏𝑏 (𝑎𝑎𝑏𝜀𝑏) → 𝑎𝑎𝑏𝑏 (𝑎𝜀𝑎𝑏𝑏)
a S a b S b

𝜀 𝜀
Exercice 3 : (6 pts)
Eliminer la récursivité à gauche et l’ambiguïté des grammaires suivantes :
1. 𝐸 → 𝐸 𝑜𝑟 𝑇 | 𝑇 Récursive à gauche
𝑇 → 𝐸 𝑎𝑛𝑑 𝐹 | 𝐹
𝐹 → 𝑛𝑜𝑡 𝐹 | (𝐸) | 𝑡𝑟𝑢𝑒 | 𝑓𝑎𝑙𝑠𝑒

➔ 𝐸 → 𝑇𝐸 ′
𝐸 ′ → 𝑜𝑟 𝑇 𝑇 ′ | 𝜀
𝑇 → 𝐸 𝑎𝑛𝑑 𝐹 | 𝐹
𝐹 → 𝑛𝑜𝑡 𝐹 | (𝐸) | 𝑡𝑟𝑢𝑒 | 𝑓𝑎𝑙𝑠𝑒

2. 𝑃𝑟𝑜𝑔𝑟𝑎𝑚 → 𝐵𝑒𝑔𝑖𝑛 𝐼𝑛𝑠𝑡 𝐸𝑛𝑑


𝐼𝑛𝑠𝑡 → 𝑖𝑓 𝐶𝑜𝑛𝑑 𝑡ℎ𝑒𝑛 𝐼𝑛𝑠𝑡 𝐸𝑛𝑑𝐼𝑓 | 𝐼𝑓 𝐶𝑜𝑛𝑑 𝑡ℎ𝑒𝑛 𝐼𝑛𝑠𝑡 𝐸𝑙𝑠𝑒 𝐼𝑛𝑠𝑡 𝐸𝑛𝑑𝐼𝑓
Ambigüe
𝐶𝑜𝑛𝑑 → 𝐶𝑜𝑛𝑑 𝑜𝑟 𝐶𝑜𝑛𝑑 | 𝐶𝑜𝑛𝑑 𝑎𝑛𝑑 𝐶𝑜𝑛𝑑 | 𝐸𝑥𝑝𝑅
Récursive à gauche et ambiguë ➔ On élimine d’abord la récursivité à gauche
𝐸𝑥𝑝𝑅 → 𝑖𝑑 < 𝑖𝑑 | 𝑖𝑑 < 𝑛𝑏 | 𝑇𝑟𝑢𝑒 Ambigüe

➔ 𝑃𝑟𝑜𝑔𝑟𝑎𝑚 → 𝐵𝑒𝑔𝑖𝑛 𝐼𝑛𝑠𝑡 𝐸𝑛𝑑


𝐼𝑛𝑠𝑡 → 𝑖𝑓 𝐶𝑜𝑛𝑑 𝑡ℎ𝑒𝑛 𝐼𝑛𝑠𝑡 𝐼𝑛𝑠𝑡′
𝐼𝑛𝑠𝑡′ → 𝐸𝑛𝑑𝐼𝑓 | 𝐸𝑙𝑠𝑒 𝐼𝑛𝑠𝑡 𝐸𝑛𝑑𝐼𝑓
𝐶𝑜𝑛𝑑 → 𝐸𝑥𝑝𝑅 𝐶𝑜𝑛𝑑′
𝐶𝑜𝑛𝑑 ′ → 𝑜𝑟 𝐶𝑜𝑛𝑑 𝐶𝑜𝑛𝑑 ′ | 𝑎𝑛𝑑 𝐶𝑜𝑛𝑑 𝐶𝑜𝑛𝑑 ′ | 𝜀
𝐸𝑥𝑝𝑅 → 𝑖𝑑 < 𝐸𝑥𝑝𝑅′ | 𝑇𝑟𝑢𝑒
𝐸𝑥𝑝𝑅′ → 𝑖𝑑 | 𝑛𝑏

3. 𝐴 → 𝐴𝑎𝑏 | 𝐴𝑎𝐶 | 𝐵 Récursive à gauche et ambiguë


➔ On élimine d’abord la récursivité à gauche
𝐵 → 𝑏𝐵𝑐 | 𝐵𝑑 | 𝑏 𝐶 Récursive à gauche et ambiguë
➔ On élimine d’abord la récursivité à gauche
𝐶 → 𝑎𝑏𝐶 | 𝑎𝑏𝑑𝑑 | 𝑏𝑏𝐶 | 𝑏𝑏𝑑𝑑 | 𝑏𝑏 Ambiguë

➔ 𝐴 → 𝐵𝐴′ ➔ 𝐴 → 𝐵𝐴′
𝐴′ → 𝑎𝑏 𝐴′ | 𝑎𝐶 𝐴′ | 𝜀 Ambigüe 𝑨′ → 𝒂𝑨′′ | 𝜺
𝑨′′ → 𝒃 𝑨′ | 𝑪 𝑨′
𝐵 → 𝑏𝐵𝑐 𝐵′ | 𝑏 𝐶 𝐵′ Ambigüe 𝑩 → 𝒃𝑩′′
𝑩′′ → 𝑩𝒄 𝑩′ | 𝑪 𝑩′
𝐵′ → 𝑑 𝐵′ | 𝜀 𝐵′ → 𝑑 𝐵′ | 𝜀
𝐶 → 𝑎𝑏𝐶′ | 𝑏𝑏𝐶′′ 𝐶 → 𝑎𝑏𝐶′ | 𝑏𝑏𝐶′′
𝐶′ → 𝐶 | 𝑑𝑑 𝐶′ → 𝐶 | 𝑑𝑑
𝐶′′ → 𝐶 | 𝑑𝑑 | 𝜀 𝐶′′ → 𝐶 | 𝑑𝑑 | 𝜀

4. 𝑆 → 𝐴𝐴 | 𝑏𝐴𝑎 | 𝑎𝑏𝑏
𝐴 → 𝑏𝐴 | 𝐴𝑏 | 𝑎 | 𝑥𝐵𝑦 | 𝑥 Récursive à gauche et ambiguë
𝐵 → 𝐵𝐶𝑦 | 𝑦 Récursive à gauche
𝐶 → 𝑐 | 𝑐𝑥 Ambigüe

➔ 𝑆 → 𝐴𝐴 | 𝑏𝐴𝑎 | 𝑎𝑏𝑏 ➔ 𝑆 → 𝐴𝐴 | 𝑏𝐴𝑎 | 𝑎𝑏𝑏


𝐴 → 𝑏𝐴𝐴′ | 𝑎𝐴′ | 𝑥𝐵𝑦 𝐴′ | 𝑥𝐴′ Ambigüe 𝐴 → 𝑏𝐴𝐴′ | 𝑎𝐴′ | 𝑥𝐴′′
𝐴′′ → 𝐵𝑦 𝐴′ | 𝐴′
𝐴′ → 𝑏 𝐴′ | 𝜀 𝐴′ → 𝑏 𝐴′ | 𝜀
𝐵 → 𝑦𝐵′ 𝐵 → 𝑦𝐵′
𝐵 → 𝐶𝑦 𝐵′ | 𝜀 𝐵 → 𝐶𝑦 𝐵′ | 𝜀
𝐶 → 𝑐 𝐶′ 𝐶 → 𝑐 𝐶′
𝐶′ → 𝜀 | 𝑥 𝐶′ → 𝜀 | 𝑥
Bon travail.

Vous aimerez peut-être aussi