Vous êtes sur la page 1sur 32

Thorie des langages et de la

compilation
Travaux pratiques

Sebastien
COLLETTE

Gilles GEERAERTS

Universite Libre de Bruxelles

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.1/32

Coordonnes
Gilles GEERAERTS, Tl. 02-650.55.96
E-mail : gigeerae@ulb.ac.be
Bureau : 2N8.211

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.2/32

O trouver les documents


La page du cours:
http://www.ulb.ac.be/di/ssd/tmassart/Compil

La page des t.p.:


http://www.ulb.ac.be/di/ssd/ggeeraer

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.3/32

Langage rgulier
Soit un alphabet (fini).
est un langage rgulier ;
{} est un langage rgulier ;
Pour tout a , {a} est un langage rgulier ;
Si L1 et L2 sont rguliers, alors
L1 L2 = {w1 w2 | w1 L1 w2 L2 } est
rgulier ;

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.4/32

Langage rgulier suite


Si L est rgulier, alors
L = {} {www w | w L} est rgulier ;
Si L1 et L2 sont rguliers, alors L1 L2 est
rgulier.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.5/32

Automate fini
M = hQ, , , q0 , F i o
Q ensemble fini des tats;
alphabet des symboles lentre;
fonction de transition;
q0 tat initial;
F Q ensemble des tats accepteurs.
M est fini dterministe si la fonction
: Q Q est une fonction totale.
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.6/32

Exercice 1
Dmontrez, laide de la dfinition inductive des
langages rguliers, que les deux langages
suivants sont rguliers (lalphabet considr est
= {0, 1}):
1. Lensemble des mots composs dun nombre
arbitraire de 1, suivis de 01, suivis dun
nombre arbitraire de 0.
2. Lensemble des nombres binaires impairs.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.7/32

Exercice 2
1. Dmontrez que tout langage fini est rgulier.
2. Le langage L = {0n 1n | n = 0, 1, 2, . . .} est-il
rgulier ? Expliquez.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.8/32

Exercice 3
Donnez un automate non dterministe qui accepte chacun
des langages suivants (dfinis sur lalphabet = {0, 1}):
1. Toutes les chanes qui se terminent par 00.
2. Toutes les chanes dont le 10me symbole, compt
partir de la fin de la chane, est un 1.
3. Ensemble de toutes les chanes dans lesquelles
chaque paire de 0 apparat devant une paire de 1.
4. Ensemble de toutes les chanes ne contenant pas 101.
5. Tous les nombres binaires divisibles par 4.
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.9/32

Exercice 4 1
Dterminisez:

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.10/32

Exercice 4 2
Dterminisez:

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.11/32

Exercice 4 3
Dterminisez:

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.12/32

Exercice 5
crivez une fonction C qui implmente cet
automate et renvoie le numro dtat accepteur.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.13/32

Exercice 1.1 correction


1 et 0 . Donc {1} et {0} sont des
langages rguliers.
La fermeture de Kleene dun langage rgulier
est un langage rgulier. Donc {1} et {0}
sont des langages rguliers.
La concatnation de langages rguliers est
un langage rgulier. Donc
{1} {0} {1} {0} est un langage rgulier.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.14/32

Exercice 1.2 correction


Un nombre binaire impair se termine
ncessairement par 1.
{1} et {0} sont des langages rguliers.
{1} {0} est rgulier.
({1} {0}) est rgulier.
({1} {0}) {1} est rgulier.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.15/32

Exercice 2.1 correction


Soit L = {w1 , w2 , . . . wn } un langage fini.
Comme chaque mot wi est une concatnation
finie de caractres de , il est clair que {wi }
est rgulier pour tout 1 i n.
Donc, {w1 } {w2 } {wn } = L est
rgulier.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.16/32

Exercice 2.2 correction


Non !
Preuve par contradiction. Supposons que L
est rgulier.
Donc, il existe un automate fini
A = hQ, , , q0 , F i.
Intuitivement: comme Q est fini, il existe un
mot de L qui est accept en passant deux
fois par le mme tat q. Par exemple:
w = 02|Q| 12|Q| .
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.17/32

Exercice 2.2 correction


Donc, il existe un chemin de q0 q labell par
0k1 , une boucle allant de q q labelle par 0k2
et un chemin allant de q q 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 nest pas dans
L.
Contradiction: A ne peut pas exister et donc
L nest pas rgulier.
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.18/32

Exerice 3.1 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.19/32

Exerice 3.2 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.20/32

Exerice 3.3 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.21/32

Exerice 3.4 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.22/32

Exerice 3.5 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.23/32

Exercice 4.1 correction

1
0
{p}
{p}
{p, q}
{p, t} {p, q, r, s}
{p, q}
{p, t}
{p, s}
{p, q}
{p, q, r, s} {p, t} {p, q, r, s}
{p}
{p, q}
{p, s}
tat initial: {p}. tats accepteurs: {p, t}, {p, s} et
{p, q, r, s}.
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.24/32

Exercice 4.2 correction

1
0
{p}
{q}
{q, s}
{q, r}
{r}
{q}
{r}
{p}
{s}
{s}
{p}

{q, s} {p, q, r} {r}

1
0
{r, s}
{p}
{s}
{p, q, r} {p, q, r} {q, r, s}
{q, r, s} {p, q, r} {r, s}

tat initial: {p}. tats accepteurs: {q}, {s},


{q, s}, {r, s}, {p, q, r} et {q, r, s}.
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.25/32

Exercice 4.3 correction


Calcul des -closures:
a
b
c
p
{p}
{p, q} {p, q, r}
q {p, q} {p, q, r} {p, q, r}
r {p, q, r} {p, q, r} {p, q, r}
NB: cet automate est non-dterministe !

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.26/32

Exercice 4.3 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.27/32

Exercice 4.3 correction


Dterminisation:

a
b
c
{p}
{p}
{p, q} {p, q, r}
{p, q}
{p, q} {p, q, r} {p, q, r}
{p, q, r} {p, q, r} {p, q, r} {p, q, r}
tat initial: {p}.tat accepteur: {p, q, r}.

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.28/32

Exercice 4.3 correction

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.29/32

Exercice 5 correction
char buffer ; // Initialise au 1er car de linput
char next_char() {
return buffer ;
}
void read_next(){
buffer = getchar() ;
}
bool alpha(char c) {
return (c >= A && c <= Z) ;
}
Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.30/32

Exercice 5 correction
int automate() {
int state = 8 ;
char c ;
while (true){
switch state {
case 8:
if (next_char() == W) state = 4 ;
else if (next_char() == I) state = 9 ;
else if (alpha(c)) state = 3 ;
else state = 8 ;
read_next() ;
break ;
case 4:
Sciences Informatique
...

Theorie
des langages et de la compilationTravaux pratiques p.31/32

Exercice 5 correction
case 2 :
if (alpha(c)) state = 3 ;
else return 2 ; // Pas de read_next !
read_next() ;
break ;

Sciences Informatique

Theorie
des langages et de la compilationTravaux pratiques p.32/32