Vous êtes sur la page 1sur 5

Techniques de compilation

4ème année G. Informatique


Année : 2011/2012
Ecole Nationale des Corrigé du TD 1 Prof. Redouane Ezzahir
Sciences Appliquées Agadir
Université Ibn Zohr
Ex. 1 — Démontrez, à l’aide de la définition inductive des langages réguliers, que les deux
langages suivants sont réguliers (l’alphabet considéré est Σ = {0, 1}) :
1. L’ensemble des mots composés d’un nombre arbitraire de 1, suivis de 01, suivis d’un
nombre arbitraire de 0.
2. L’ensemble des nombres binaires impairs.

Solution (Ex. 1) — 
R.Q.1 
–1 ∈ Σ et 1 ∈ Σ. Donc {1} et {0} sont des langages réguliers.
–La fermeture de Kleene d’un langage régulier est un langage régulier. Donc {1}∗ et {0}∗ sont des
langages réguliers.
–La concaténation de langages réguliers est un langage régulier. Donc {1}∗ .{0}.{1}.{0}∗ est un
langage régulier.

R.Q.2
–Les nombres binaires impairs se terminent nécessairement par 1.
–{1} et {0} sont des langages réguliers. Donc {1} ∪ {0} est un langage régulier.
–d’où ({1} ∪ {0})∗ est un langage régulier.
–Donc ({1} ∪ {0})∗ ∪ {1} est un langage régulier.

Ex. 2 — Langages non réguliers


1. Démontrez que tout langage fini est régulier.
2. Le langage L = 0n 1n |n = 0, 1, 2, ... est-il régulier ? Expliquez.

Solution (Ex. 2) — 
R.Q.1 
–Soit L = {w1 , w2 , ...wn } un langage fini.
–Comme chaque mot wi est une concaténation finie de caractères de Σ, il est clair que {wi } est
régulier pour tout 1 ≤ i ≤ n . Donc, L = {wi } ∪ {wi } ∪ ... ∪ {wi } est régulier.

R.Q.2
–Non, c’un langage non contextuelle ou algébrique/hors-contexte.
–Preuve par contradiction. Supposons que L est régulier. Donc, il existe un automate fini (Q, Σ, δ, q0 , F)
reconnaissant L.
–Intuitivement : comme Q est fini, il existe un mot de L qui est accepté en passant deux fois par
le même état q. Par exemple : w = 02|Q| 12|Q| .
–Donc, il existe un chemin de q0 à q labellé par 0k1 , une boucle allant de q à q labellée par 0k2
et un chemin allant de q à qf ∈ F, labellé par par 0k3 12|Q| , avec k1 + k2 + k3 = 2|Q|.
–Mais alors, on peut aussi accepter, par exemple le mot 0k1 0k3 12|Q| , qui n’est pas dans L.
Contradiction : A ne peut pas exister et donc L n’est pas régulier.

Ex. 3 — Caractériser les langages reconnus par les ER suivantes :


–E1 : (a + b)* −E2 : (a + b)(a + b + 0 + 1)∗ −E3 : (aa)*b(bb)*
–E4 : 0(0 + 1)*0 −E5 : ((e + 0)1*)* −E6 : 0*10*10*

1
Solution (Ex. 3) — 
E1 : Le monoïde libre contenant tous les mots sur Σ = {0, 1}.
E2 : Langage des mots sur Σ = {a, b, 0, 1} commençant par a ou b.
E3 : Langage des mots sur Σ = {a, b} commençant par un nombre paire de a et terminant par
un nombre inmpaire de b.
E4 : Langage des mots binaires commençant et terminant exactement par zéro.
E5 : ((e + 0)1∗ )∗ = (e1∗ + 01∗ )∗ c’est les mots sur Σ = {e, 0, 1} contenant un nombre arbitraire
de 1.
E6 : 0∗ 10∗ 10∗ Langage des mots binaires contenant exactement deux 1.

Ex. 4 — Donner une expression rationnelle pour :


1. Le langage contenant les mots contenant un nombre pair de 0 et un nombre impair de 1.
2. Le langage ne contenant pas de mot avec le facteur 011

Solution (Ex. 4) — 
1.(00)*+(11)*1
2.Les deux langages 0* et 1* constituent une partie du langage. Pour la pertie qui reste il
faut après chaque bloc de 0 (sauf éventuellement un bloc à la fin qui peut être suivi par un
seul 1) on doit avoir un 10. D’ou l’expression (0∗ + 1∗ + ((0∗ 10)∗ ( + 0∗ 1)))

Ex. 5 — Simplifier les expressions rationnelles suivantes :


–E1 : (a*b*)*(a*b*)* −E2 : ab((ab*)* +(ba*)*)ba −E3 : (a* + b*)*
–E4 : (aa*ba + aaba + aba + ba) −E5 : ((a + aaaa)*b*)*

Solution (Ex. 5) — 
E1 : (a*b*)*(a*b*)* = (a*b*)* = (a+b)*.
E2 : ab((ab*)* +(ba*)*)ba.
E3 : On a (ab*)* = (a*b)* = a*b* (vérification : utiliser les automates équivalents) d’où E2 =
aba*b*ba.
E4 : (aa*ba + aaba + aba + ba) = a*ba
E5 : (a*b*)*=(a+b)*

Ex. 6 — Donnez une expression régulière (définis sur l’alphabet = {0, 1}) qui accepte chacun
des langages suivants :
1.Toutes les chaînes qui se terminent par 00.
2.Toutes les chaînes dont le 10ème symbole, compté à partir de la fin de la chaîne, est un 1.
3.Ensemble de toutes les chaînes dans lesquelles chaque paire de 0 apparaît devant une paire
de 1.
4.Ensemble de toutes les chaînes ne contenant pas 101.
5.Tous les nombres binaires divisibles par 4

Solution (Ex. 6) — 

2
1. (0 + 1)*00
2. (0 + 1)*1(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1)(0 + 1) = (0+1)∗ 1(0+1)9
3. (1 + 01 + 0011)*(0 + )
4. 0*(1 + 00+)*0*
5. (0 + 1)*00

Ex. 7 — Determiniser les automates suivants :

automate 1 automate 2

Solution (Ex. 7) — 
Automate 1.
a b
a b
→{q0} {q1,q2} -
→q0 {q1,q2} -
{q1,q2} {q3} {q0,q1,q3}
q1 {q3} {q0,q1}
←{q3} {q3} {q3}
←{q2} - {q0,q3}
←{q0,q1,q3} {q1,q2,q3} {q0,q1,q3}
←{q3} {q3} {q3}
←{q1,q2,q3} {q3} {q0,q1,q3}

a b
→0 1 -
1 2 3
←2 2 2
←3 4 3
←4 2 3

Automate 2.
0 1 0 1
→p {p,q} {p} →{p} {p,q} {p}
q {r,s} {t} {p,q} {p,q,r,s} {p,t}
r {p,r} - ←{p,q,r,s} {p,q,r,s} {p,t}
←s - - ←{p,t} {p,q} {p,s}
← t - {s} ←{p,s} {p,q} {p,s}

0 1
→a b a
b c d
←c c d
←d b e
←e b e

Ex. 8 — Construire un automate reconnaissant l’expression rationnelle (a+b)*aa(a+b)*, le


déterminiser si nécessaire.

3
Solution (Ex. 8) — 

qui peut être minimiser en :

Ex. 9 — Determiniser et minimiser l’automate suivant :

Solution (Ex. 9) — 
a b a b
→{q0} {q1} {q1} →0 1 1
{q1} {q0,q2} {q0,q3} 1 2 3
←{q0, q2} {q1} {q1} ←2 1 1
←{q0, q3} {q1} {q1} ←3 1 1

minimal :

Ex. 10 — Donner, pour chacun des langages suivants, un automate qui le reconnaît.
–L1 = { a*bb*}, L2 = { aa*bb*}
–L3 = { mots dans {a,b}* commençant par n b, n > = 0, finissant par un nombre pair de a}
–L4 = { mots dans {a,b}* commençant par ab et finissant par bb}
–L5 = { mots engendres par aa*bb* de longueur impaire}
–L6 = { mots dans {a,b}* n’ayant pas aa comme facteur}
–L7 = { mots dans {a,b}* de longueur paire} L8 = { mots dans {0,1}* dont l’écriture en base
2 est un multiple de 3}

Solution (Ex. 10) — 

4
L1 : L2 :
Le symble λ représente ici le mot vide 

L3 : L4 :

L6 : L7 :

L8 :

Ex. 11 — A quelle phase de la compilation peut-on détecter les erreurs suivantes ?


–Identificateur mal formé en java ?
–Conflit de type sin("a")
–Variable non déclarée
–Commentaire non fermé
–Parenthèse non fermée
–Begin non fermé
–Mot réservé (if par exemple) utilisé comme identificateur
–Non-conformité entre le nombre de paramètres formels et effectifs

Solution (Ex. 11) — 


1.Analyse lexicale
2.Analyse Sémantique
3.Analyse Syntaxique où Sémantique
4.Analyse lexicale
5., 6., 7. et 8. Analyse Syntaxique

Vous aimerez peut-être aussi