Documente Academic
Documente Profesional
Documente Cultură
1
exercices plus importants ou plus difficile sont 2.2 optionnel : ExprRat compliqué.
répartis sur deux TDs : le premier TD traite
L7 = {w | w ne contient pas deux occur-
un exemple facile, et le TD de la semaine sui-
rences successives de la lettre a}
vant un deuxième exemple plus difficile. C’est
L8 = {w | w ne contient pas trois occurrences
le cas pour les automates d’état finis (TD 1 et
successives de la lettre a}
2), la résolution d’équations de langages (TD 2
L9 = {w | le nombre de a dans w est pair
et 3), est-il-algébrique (TD 6,7 et 8, car il y a
} = {w | |w|a = 0 (mod 2)}
plusieurs méthodes), l’analyse ascendante (TD
9 et 10), les machine de Turing (TD 10 et 11). L10 = {w | |w|a = 1 (mod 3)}
2
— Les écritures de nombre à virgule a a, b
— A = {a, b, c}, L = {w | w contient au b
moins une fois chacune des trois lettres } b
1 2 3
— Optionnel. A = {a, b}, L = {w | |w|a est
a
pair, ainsi que |w|b }
— Optionnel A = {a, b}, L = {w | w
contient un nombre pair de fois le facteur 5.2 Exemple optionnel.
bab}
— Optionnel. A = {0, 1}, L = {w | en base 4 a, b
2, w représente un nombre valant 1 mo- a b
dulo 3 } b
b
1 2 3 a
a
4 Déterminisation
b 5 a
4.1 Méthode de déterminisation.
a, b
Déterminisez : 2l b- 3l
1 2
?a b
l
@
4h
la, b
R
@
1
a, b - a, b
b@
@ a
5l - 6l
R
b
6 Construction d’automates.
4.2 Boum !
6.1 Construction classiques
Soit Ln l’ensemble des mots sur {a, b} de lon-
L est reconnu par l’automate A =
gueur au moins n dont la nième lettre avant la
(Σ, Q, δ, q0 , F ). Construire des automates re-
fin est un b. Donnez un petit automate non-
connaissant :
déterministe pour L3 . puis son déterminisé.
— miroir(L) =
Comparez leur nombre d’états. Au lieu de faire
{an an−1 ...a3 a2 a1 |a1 a2 ...an ∈ L}
marcher l’algorithme de déterminisation, on
— l’ensemble des mots obtenus a partir des
commencera par réfléchir quels doivent être les
mots de L en effaçant tous les a.
états, puis on rajoutera les transitions.
— le complémentaire de L, en supposant A
déterministe.
5 Resolution d’équations — Optionnel : l’ensemble des mots obtenus
en effaçant un nombre pair de lettres d’un
Rappel de cours : à tout automate on peut mot de L
associer un système d’équations dont les va-
riables représentent les langages reconnus par 6.2 Construction du produit syn-
cet automate à partir de chacun de ses états. chronisé pour l ’intersection.
L1 et L2 sont reconnus par les automates A1
5.1 Exemple à faire
et A2 .
À l’aide du système d’équations précédent, On suppose que A1 et A2 sont déterministes
que l’on résoudra par élimination et utilisation complets.
du lemme d’Arden, déterminer une expression — Donner un algorithme linéaire en |u| pour
rationnelle correspondant aux automates sui- savoir si u ∈ L1 ∩ L2 .
vants : ( sur l’alphabet A = {a, b} ) — En déduire la construction d’un automate
a a, b déterministe reconnaissant l’intersection.
il s’appelle le ”produit synchronisé”.
b — Construire également un automate
1 2
déterministe reconnaissant l’union
3
— Les constructions précédentes s’adaptent- 3) Donnez un automate non déterministe
elles aux automates non complet ?non- (avec éventuellement plusieurs états entrée) qui
déterministes ? donne toutes les séquences d’annonces les bons
choix).
4) Donnez un automate qui donne les coups
6.3 Optionnel : Le barman boxeur qui assurent au barman de gagner quel que
Un très bon exercice ludique, de Laurent Ro- soit le comportement du client. On utilisera
saz : il met en jeu des techniques de construc- le résultat suivant : Soit A un automate
tion d’automate, il permet de bien comprendre détérministe complet qui reconnaı̂t un langage
comment le non-détermisme est fondamental L, pour obtenir un automate qui reconnaı̂t le
pour modéliser certain problèmes. Corrigé dans complémentaire, il suffit d’inverser final/ non-
l’appendice. final. Attention, cette méthode ne marche pas
Un barman et un client jouent au jeu sui- si A est non-deterministe ou si A est non-
vant : Le barman met un bandeau sur les yeux complet.
qui le rend aveugle, et il met des gants de
boxe qui l’empêchent de ”sentir” si un verre 5) Jouez-vous de l’argent contre le barman ?
est à l’endroit ou à l’envers. Devant le bar-
man, se trouve un plateau tournant sur lequel 7 Minimisation
sont placés quatre verres en carré. Ces verres
peuvent être à l’envers ou à l’endroit. Le sens 7.1 Construction de l’automate mi-
des verres est choisi par le client et est inconnu nimal.
du barman. Si les verres sont tous dans le même
sens, alors le barman gagne (Quand le barman Minimisez l’automates suivant :
gagne, un autre client, ”arbitre”, annonce qu’il
a
a gagné et le jeu s’arrête.) Le barman peut a
? ?
répéter 10 fois l’opération suivante : Il annonce - 1j a- 2 a- 3 a- 4 a- 5
au client qu’il va retourner certains verres (par
@b
exemple le verre en bas à gauche et celui en bas b6 @ b b b b
@ R?
?
à droite). Le client fait alors tourner le plateau, 6 7j 8
a
a, b
puis le barman retourne les verres comme il l’a
6
annoncé. Si les verres sont alors tous dans le
b
même sens, le barman gagne.
1)On se place du point de vue du client.
7.2 Egalité entre automates.
Donnez un automate dont les états sont les
différentes configurations du plateau, les lettres Montrer que les deux automates suivants,
les coups annoncés par le barman et où les (état initial 0), reconnaissent le même langage.
flèches décrivent les évolutions possibles des
configurations. Le fait que 1- le client fait tour- δ 0 1 2 3
ner le plateau comme il veut, et 2- on ne a 1 2 1 3 état terminal : 1
se préoccupe pas que tout les verres soit a b 3 1 3 3
l’endroit, mais seulement qu’ils soient dans le
même sens, conduit à beaucoup simplifier : il y δ 0 1 2 3 4 5
a seulement quatre états à distinguer, et seule- a 1 2 3 2 2 5 terminaux : 1,3,4
ment trois coups possibles à jouer, pour passer b 5 4 5 3 4 5
d’un état à un autre.
2) A partir de l’état ou 2 verres a Cote l’un 7.3 Construction de l’automate mi-
de l’autre dans un sens et les 2 autres dans nimal à partir du langage.
l’autre, donner une séquence de coup permet-
7.3.1 Rappel de cours.
tant au barman de gagner. Comme on a utilisé
une seule lettre pour nommer les coups, cette L’exercice fait intervenir des concepts un peu
suite corresponds à un mot d’un langage for- difficile à digérer en cours, c’est pourquoi on
mel. vous les redonne ici, résumé. Si L étant un
4
langage sur l’alphabet A, la relation de demi tomate minimal.
congruence syntaxique sur A∗ , notée ∼L , est 1. A∗
définie par la relation suivante :x ∼L y ssi ∀z ∈ 2. {a}
A∗ , (xz ∈ L ⇔ yz ∈ L) C’est une relation
3. a∗ b∗
d’équivalence. Deux mots sont en relation pour
la demi-congruence, si ils ont le même avenir 4. abba + ababa
avec avenirL (u) qui est {v|uv ∈ L}. Si un au- 5. {an bn , n ≥ 0}
tomate A reconnait L, à un état q , on asso- 6. Optionnel : {uu|u ∈ A∗ }
cie un language AvenirL (q) qui est les mots
qui mènent de cet état a un final. Ce langage
8 Le lemme de la pompe
est précisément celui qui se calcule en résolvant
les équations associé a chaque nœud avec le 8.1 Non pompabilité
Lemme d’Arden. L’avenir d’un état est égal
à l’avenir d’un mot qui y mène. Deux états Montrez, en utilisant le lemme de la pompe
peuvent être fusionnés, si ils ont le même ave- que les langages suivants ne sont pas reconnais-
nir. Dans l’automate minimal, il y a donc un sables
seul état par classe d’équivalence, la classe d’un — {an b2n |n ≥ 0}
état p, c’est l’ensemble des mots qui vont de q0 — {(ab)n cn |n ≥ 0}
à p, et l’avenir de p, c’est les mots qui vont de — {an bm | n ≥ m ≥ 0}
p a un final. — {an bm | m ≥ n ≥ 0}
Théoreme : L reconnaissable ssi si L a un — {an bn |n ≥ 0} + {ap bq |p 6= q[7]}
nombre fini de classes, le nombre de classe etant — optionnel {an bm |n 6= m}
en fait le nombre d’états dans le determiste mi-
nimal 8.2 Pompabilité-optionnel
Si L reconnaissable, alors les classes sont en Montrez que le langage suivant est pompable
nombre fini, puisque il y a une classe par état. mais pas reconnaissable : {bm an bn | m > 0, n ≥
Si il y a un nombre fini de classe, alors on fait 0} ∪ a(a + b)∗
l’automate comme suit : un état par classe, ou,
ce qui revient au même et rend la chose plus
compréhensible, un état par avenir distinct. On 9 Clôture langages réguliers.
met une flèche de p vers q avec la lettre a si
En utilisant les propriétés de clôture des lan-
Classe(p).a est inclus dans classe de q, L’etat
gages rationnels et le fait que {an bn } n’est pas
initial = la classe de epsilon, Un état est final
rationnel, montrer que les langages suivants ne
si il a epsilon dans son avenir.
sont pas rationnels :
— L1 = {w ∈ (a + b)∗ | |w|a = |w|b }
7.3.2 Calcul des classe d’équivalence et — L2 = {an bp | n 6= p}
construction de l’automate. — L3 = {a2n b2n | n ≥ 0}
— L4 = {an bp |n ≥ p}
Soit A = {a, b}. Pour chacun des langages Pour le dernier, vous pourrez utiliser deux
ci-dessous, déterminer les classes d’équivalences méthodes : Une première qui établit une re-
pour la relation de congruence syntaxique. Dire lation entre {an bp |n ≥ p} et {an bp |n > p}. Une
s’il est reconnaissable, et si oui, construire l’au- deuxième qui utilise la stabilité des reconnais-
tomate minimal le reconnaissant, à partir de sables par miroir.
ces classes. .
On procédera en choisissant d’abord des pe-
tits mots u, en calculant l’avenir de u, puis la
classe de u qui est l’ensemble des mots qui on le 10 Grammaires hors contexte
même avenir ; On choisis u seulement parmi les
10.1 De la grammaire vers le langage
mots qui sont des préfixes d’un mot du langage,
les autres mots ont tous le même avenir : l’en- Déterminer les langages engendrés par les
semble vide, et sont donc dans la même classe grammaires dont les règles de production sont
qui corresponds à un état poubelle dans l’au- les suivantes :
5
1. S → | aaaS 11 Grammaire et compilation.
2. S → ab | aSb
Faut avoir parlé d’analyse lexicale en cours.
3. S → XY | Z ; X → Xa | a ; Y → aY b | ;
Z → aZb | W ; W → bW | b
11.1 Analyse lexicale
4. S → SS | | (S)
5. S → SS | () | [] | (S) | [S] l’utilisation d’ocamllex n’est pas limitée a
l’analyse lexicale des que l’on souhaite analyser
6. S → S → ai Sai pour tout i, un texte (chaı̂ne, fichier, flux) sur la base d’ex-
1≤i≤n pressions régulières, ocamllex est un outil de
7. S → bS | aT ; T → aT | bU ; U → aV | bS ; choix en particulier pour écrire des filtres, i.e.
V → aT | bU | des programmes traduisant un langage dans un
Ces grammaires sont-elles ambiguës ? Si autre par des modifications locales et relative-
oui, pouvez-vous donner une grammaire non- ment simples.
ambiguë ? Écrire un programme occamlex qui imprime
un fichier en ayant préalablement enlevé toutes
les lignes vides, et un autre qui compte les oc-
10.2 Du langage vers la grammaire currences d’un mot dans un texte le mot et le
Trouver des grammaires pour les langages nom du fichier texte sont passés en paramètres
suivants.
1. (a + (a + b)∗ )(ab∗ )∗ 11.2 Grammaire d’un Language de
programmation
2. {an bp | 0 < p < n}
3. {an bp | 0 ≤ n ≤ p + 1} Considérons le petit programme suivant écrit
en Pascal :
4. {an bn cm dm | n, m ∈ N }
5. {an bm cn+m | n, m ∈ N } program calcul;
6. {an bm cp | n = m ou m = p} var
7. optionnel {an bm cp dq | n + q = m + p} T : array[1..10] of integer;
S,I : integer;
8. optionnel {an bm cp dq | n + p = m + q} begin
S:=0; (* initialisation *)
10.3 Désambiguiser à la main for I:= 1 to 10 do
begin
Soit F1 la grammaire read(T[I]);
S := S + T[I]
E → E + E | E − E | (E) | id end;
writeln(S)
et G1 la grammaire F1 plus les règles : end.
E → E ∗ E | E/E | E ∧ E
L’analyseur lexical découpe ce programme en
1. Donner tous les arbres de dérivations du
une liste des entités lexicales appelées ”token”
mot id − id − id. Combien y en a-t-
dont nous donnons ici le début :
il ? Correpondent-ils à des interprétations program calcul ;
<0> <-1,50> <11>
équivalentes ? var T : array [ 1
<1> <-1,51> <12> <2> <13> <3,1>
2. Donner des grammaires F2 et G2 telles que Chaque token est donné par une classe et sa
L(F1 ) = L(F2 ), que L(G1 ) = L(G2 ), que valeur, s’il y en a une. Pour les identificateurs,
chaque mot w possède une seule dérivation la valeur sera la chaine de caractére, ou mieux,
à partir du symbole initial de G2 , et que l’adresse d’entrée dans une table des symboles.
la décomposition en arbre corresponde au Lorqu’elle rencontre des identificateurs,
regles usuelles de priorité. l’analyse lexicale les ranges dans une table des
6
symboles qui permettra de centraliser les infor- appartient.
mations rattachées aux identificateurs. Aprés 6. Donner l’arbre de dérivation syntaxique
l’analyse lexicale, cette table sera : associé à ce programme. Il couvre plusieurs
adresse chaı̂ne information
0 program pages, on pourra le finir chez soi. Indiquez
1 var les valeurs des tokens.
2 array
3 of 7. Lorsqu’on compile, on construit une ver-
4 integer
5 begin
sion résumée de l’arbre d’analyse appelée
6 for ”Arbre de Syntaxe Abstraite” (AST). Elle
7 to contient juste les informations utiles. Pro-
8 do
9 end poser un AST pour ce programme.
.. ..
. .
50 calcul
51 T 12 DM pour mardi 17 mars.
52 S
53 I Ce devoir est à faire individuel. Il est à rendre
54 read
55 writeln impérativement à votre prof de TD, sauf le
.. .. groupe du mercredi qui peut le rendre ou bien
. .
La table est découpée en une zone pour les en cours, ou bien à Sandrine. Un devoir rendu
mots-clés, occupée ici de 0 à 9 et une zone pour après mardi 17 mars aura pour note zéro.
les identificateurs à partir de 50. Cette table est Ce DM reprends le TD11.2 qui va trop vite
composée d’un champ représentant la chaı̂ne pour que tout le monde comprenne. Il vous per-
de caractères et d’un champ pouvant contenir mettra de 1- dissocier le travail fait par l’ana-
différentes informations utiles à l’analyse lyse lexicale 2- apprendre à écrire des gram-
sémantique. On suppose les différentes entités maires ”grandeur nature” 3- Aborder la notion
rangées dans l’ordre de leur apparition, sauf les de syntaxe abstraite.
mots-clés qui sont chargés préalablement dans On considére le programme PASCAL sui-
la table. Les symboles ; : [], ., .. sont associés vant :
dans l’ordre à des tokens de classe 11 à 17 ; program factoriel ;
Comme il n’y a qu’une unité lexicale dans var
chacune de ces classes il n’est pas nécessaire i,n : integer ;
de passer de valeurs. f : longint ;
begin
On souhaite écrire un grammaire permet- write(’ Donner un entier : ’) ;
tant de générer des programme Pascal, et en readln(n) ; f:=1 ;
particuler notre programme. Plus précisément, for i:=2 to n do
la grammaire doit générer non pas le texte f:= f * i ;
du programme mais le ”mot” représentant la writeln(’Le factoriel est ’, f);
suite de token de ce programme. On commence End.
par quelques questions pour déjà mieux com-
prendre c’est quoi ce ”mot”.
1. A quoi corresponds la classe d’un token 12.1 Analyse lexicale : Classe, valeur
pour cette grammaire ?
2. A quoi corresponds la classe -1, sur cet L’analyseur lexical découpe ce programme en
exemple ? token (comprenant toujours une classe et par-
fois une valeur) et range les identificateurs dans
3. Que sont les mots clefs pour cette gram-
une table des symboles.
maire ?
4. Quelle valeur a un token constante entiére, 1. Que code le numéro de classe d’un token ?
à quelle étape on la calcule, et comment la 2. Les identificateurs sont ils tous de la même
calculer ? classe ?
5. Proposer une grammaire permettant d’en- 3. Les mots clefs sont ils tous de la même
gendrer le langage auquel ce programme classe ?
7
4. Quelle valeur a un token identificateur ? Quand on veut faire un nettoyage com-
5. Quelle valeur a un token mot clef ? plet, l’ordre dans lequel on effectue ces deux
opérations est-il indifférent ? Pourquoi ?
6. Comment peut on reconnaı̂tre les mots Nettoyer la grammaire :
clefs de facon simple, lors de l’analyse lexi- S→X X→Y Z → W |eS
cale ? (On suppose que les mot clefs sont W → b|f X Y → aT |T K
préchargés dans cette table.) U → bdX|Y |dZ K → cV |Z
7. Décrivez l’état de la table des symboles, X → abcY W →U
aprés l’analyse lexicale. T → aT ||ef |aY V → af
8. Ecrire la suite de tokens générée par ce
programme, avec les classes et les valeurs 13.2 Désambiguı̈sation difficile.
des tokens. pour le bout suivant Soient D1 , D2 et D3 les langages suivants :
for i:=2 to n do
f:= f * i ; D1 = {w ∈ {a, b}∗ | |w|a = |w|b }
8
3. Construire un automate à pile qui re- 16 Analyse Syntaxique.
connaı̂t le langage des mots de Dyck sur
1 puis sur 2 types de parenthésés. 16.1 Analyse ascendante à la main.
4. Construire un automate à pile qui re- Le cours d’analyse syntaxique ascendante
connaı̂t le langage des mots qui ont autant sera fait la semaine prochaine. Néanmoins, ce
de a que de b (deux solutions : la premiere TD introduit gentiment un exemple concret
n’utilise qu’un état, la seconde qu’un seul sur ce thème. De cette façon, les notions du
symbole de pile) cours, plus abstraites, seront plus digestes. Soit
la grammaire suivante :
5. Construire un automate à pile qui re-
connaı̂t le langage des palindromes. E ::= E + T E ::= T
6. Cherchez des automates a pile qui T ::= T ∗ F T ::= F
reconnaissent {an bn cn |n ≥ 0} et F ::= id F ::= cte
{an bm an bm |n, m ≥ 0}. 1. Que reconnait t’elle ? est elle ambigue ?
2. Utiliser la grammaire pour générer la
chaı̂ne id*id+cte par une dérivation droite.
15 Est il Algébrique ? Clôture,
3. On considére un formalisme étendu d’au-
pompe. tomate à pile qui permet de dépiler un
nombre arbitraire de symboles de la pile.
Les langages suivants sont-ils algébriques ? Cela change t’il la puissance du modèle ?
On utilisera les quatre méthodes possibles pour
4. Écrivez l’automate à pile suivant, pour
répondre à cette question : On montre qu’un
cette grammaire : Il utilise un seul état et
langage est algébrique, en 1- le générant par
deux sortes de transitions : 1- pour chaque
une grammaire hors contexte ou 2-le reconnais-
régle X → α, une transition appelée ”re-
sant par un automate à pile. On montre par
duction” qui ne lit pas le mot (epsilon tran-
l’absurde qu’un langage n’est pas algébrique
sition), qui dépile α et empile X. 2- pour
avec 3- les propriétés de clôtures 4- La contra-
chaque terminal a une transition appellée
posée du lemme de la pompe algébrique
”lecture” ou ”shift” (traduc anglais) qui lit
1. {an bm | m 6= n et m 6= 2n} a et empile a.
2. {an bm an bm | n, m ∈ N } 5. L’automate de la question précédente per-
2
met de reconnaı̂tre le langage associé à
3. {an | n ∈ N } la grammaire, avec une analyse ”ascen-
4. {u | |u|a = |u|b = |u|c } dante”, i.e en remontant des feuilles vers
la racine. Reconnaı̂tre la chaı̂ne id*id+cte.
5. {uu | u ∈ A∗ } On mettra la colonne de l’état de pile à
6. optionnel Le complémentaire du gauche de celle de l’état du mots.
précédent. 6. Cet automate n’est pas déterministe,
7. {u | |u|a + 3|u|b = 2|u|c } préciser pourquoi :
7. Est ce que c’est gènant ?
8. {u | |u|a = 3|u|b = 2|u|c }
8. Ben KesKiFautfaire alors ?
9. {an bn an bn |n ≥ 0}
9. Un peu d’introspection, vous-même, quelle
10. optionnel {ap bq cr |p ≤ q ≤ r} stratégie avez vous suivi pour orienter vos
11. optionnel {an bn (ab)n |n ≥ 0} choix, lorsque vous avez utilisé l’automate
à la main.
12. optionnel {f (y) | y ∈ Y } où Y
10. L’analyse LR(1) autorise un automate a
est algébrique et ù f (a1 a2 a3 a4 a5 ...) =
pile à consulter quelle est la prochaine
a1 a3 a5 ... (f efface les lettres qui sont à
lettre du mot à lire, sans pour autant la
une position paire)
“consommer”. Mais alors, quelle sera cette
13. optionnel {ap bq cr ds et f u |(p, q, r, s, t, u) lettre, lorsqu’on sera arrivé au bout du
croit ou décroit } mot ?
9
16.2 Calcul premiers et suivants Construire L’automate LR(0) puis l’automate
SLR(1) si nécessaire.
Soit la grammaire :
10
quoi servent les états, on pourra aussi des- — (bb,b),(ab,ba),(c,bc)
siner les états de la machine, en particulier — (#, #p00000000#), (0, 0), (1, 1), (#,
lorsque les conditions de sortie d’une boucle #), (p0, 0p), (p#, q#), (0q, 1p), (1q,
sont vérifiées. q0), (# q0, #q), (#q#, #). Sur ce der-
— ajouter 1 à une séquence de 1 nier problème de Post, on impose de plus
— ajouter 1 à un nombre écrit en binaire. de commencer par la première paire (#,
n
— reconnaı̂tre le langage {a2 /n ∈ N} #p00000000#). On peut montrer que les
— dupliquer le mot en entrée problèmes de Post ainsi contraints sont
— reconnaı̂tre le language {ww, w ∈ équivalents aux problèmes de Post en
{0, 1}∗ }. général (on peut encoder les un par les
— calculer la fonction n 7→ n + 1. autre).
11
19 TP d’analyse syntaxique. une règle matche, ocamlyacc execute le code
placé dans les {} et calcule la valeur d’une
L’objectif du TP est de comprendre le fonc- variable associée au non-terminal du membre
tionnement d’un analyseur syntaxique associé gauche. Pour cela il utilise la valeur des va-
à une grammaire puis d’étendre son fonction- riables associée au ieme symbole (qui doit être
nement en lui ajoutant des éléments. Nous uti- aussi non-terminal) du membre droit, dénotée
liserons pour cela l’outil Yacc, un générateur $i Dans cette partie, vous serez amenez à
d’analyseurs syntaxique associé au générateur modifier ce code
d’analyseurs lexical Lex dans leur versions — Modifiez le code executé afin de calculer
pour Ocaml (ocamlyacc et ocamllex). la valeur plutôt que l’AST des l’expres-
sions reconnues.
19.1 Analyseur syntaxique simple — Rajouter des registres pour que le pro-
gramme puisse maintenant affecter des
Le squelette de base d’un analyseur syn-
variables et les utiliser. Il vous faudra
taxique vous est fournis. Les programmes
pour cela modifier la grammaire de façon
express.mli, express.ml, ana_lex.mll,
plus significative. [A<-6][B<-7]2*B+A
ana_synt.mly et test_expr.ml vous per-
est une expression valide ou les variables
mettent de générer un analyseur syntaxique
A et B peuvent être utilisé dans le calcul.
et de l’utiliser pour effectuer une analyse per-
Ici, l’expression est évalué a 20.
mettant d’afficher l’arbre de syntaxe abstraite
d’une expression arithmétique ne comprenant
que des additions et des soustractions. Dans 20 Corrigés optionnels
un premier temps, vous analyserez le squelette
de l’application et la modifierez pour ajouter Ils ne sont pas tous là. Si vous souhaitez avoir
des éléments à la grammaire. un corrigé sur un Optionnel spécifique, deman-
— Lisez les différents fichiers et com- dez moi, je le rajouterai.
prenez leur fonctionnement. Écrivez la
grammaire reconnu par l’analyseur syn- 20.1 Démonstration d’égalité entre
taxique. deux langages
— Compiler le programme en utilisant la
commande make. Quelle est la significa- (L∗ .M )∗ = {}+(L+M )∗ .M On utilise donc
tion du message adressé par Ocamlyacc ? la double inclusion comme cela a déjà était fait
Que se passe t-il quand vous exécuter en cours et en TD.
tout de même le programme ? Dans le sens (L∗ .M )∗ ⊆ {} + (L + M )∗ .M
— Modifier la définition de la grammaire Si w = , trivial. Si w 6= , alors w ∈
pour enlever l’ambiguı̈té (L∗ .M )n (n > 0), donc il peut s’écrire comme
— Rajouter le cas de la multiplication et k1 . . . . kn avec ki ∈ (L∗ .M ). On écrit chaque ki
de la division. Celle-ci doivent être prio- comme li .mi avec li ∈ L∗ and mi ∈ M . On a
ritaire sur l’addition et la soustraction. li ∈ L∗ ⊆ (L+M )∗ et mi ∈ (L+M )∗ , donc u =
Ajouter ensuite le cas des expression pa- l1 .m1 . . . . .ln−1 .mn−1 .ln ⊆ (L + M )∗ . . . . .(L +
renthésées. D’autres fichiers sont amenés M )∗ ⊆ (L + M )∗ et donc w = u.mn ∈ (L +
à être modifier pour observer les résultats M )∗ .M .
On pourra tester 3 + 4 ∗ 5 + 2 et tester que Dans l’autre sens {} + (L + M )∗ .M ⊆
ca calcule bien 25, i.e que le parenthésage (L∗ .M )∗
implicite se fait autours de (4*5) à cause Si w = , alors w ∈ (L∗ .M )∗ . Si w 6= ,
des règles de précédence. w = v.m avec v ∈ (L+M )∗ et m ∈ M . On peut
écrire v comme k1 . . . . .kn avec ki ∈ (L + M ).
On démontre par récurrence sur n que v.m ∈
19.2 Evaluer les expressions
(L∗ .M )∗ . Si n = 0, trivial. Suppose vrai jusque
Comme vous avez pu le constater n−1. Si pour tout h, vh est dans L, alors trivial,
précédemment, en même temps qu’il re- sinon soit g le plus petit indice tel que vg est
connait un mot, Yacc construit l’Arbre de dans M . On applique l’hypothèse de récurrence
Syntaxe Abstraite (AST). Pour cela, lorsqu’ à kg+1 ...kn .m et on dit que k1 ...kg ∈ L∗ M
12
20.2 Expression rationnelle chaine lettre est j, je vais en (2i + j)[3]
(0, 0, 0), (0, 1, 1), (1, 1, 0), (1, 0, 2), (2,
ExprRat compliqué.
0, 1), (2, 1, 2). L’état final est 1. L’état
1. L7 = {w | w ne contient pas deux occur- initial est 0. Pour l’expression, On utlise
rences successives de la lettre a} Correc- Arden : (0 + 1(01∗ 0)∗ 1)∗
tion : ( + b + a.b)∗ .( + a)
2. L8 = {w | w ne contient pas trois occur- 20.4 Construction d’automates
rences successives de la lettre a} Correc-
tion : ( + b + a.b + a.a.b)∗ .( + a + a.a) Automate reconnaissant l’ensemble des
mots obtenus en effaçant un nombre pair
3. L9 = {w | le nombre de a dans w est pair de lettres d’un mot de L : Correction : On
} = {w | |w|a = 0 (mod 2)} Correction : fait le produit synchronisé avec l’automate re-
(b∗ .a.b∗ .a.b∗ )∗ connaissant un nombre pair de lettres, qui a
4. L10 = {w | |w|a = 1 (mod 3)} Correction : seulement deux états 0, et 1, ou l’état 0 recon-
(b∗ .a.b∗ ).(a.b∗ .a.b∗ .a.b∗ )∗ nait les mots de longeur paire. On enléve toutes
les lettres des transitions ; on rajoute les transi-
20.3 Automate reconnaissant un lan- tion (q,0) −a− > (q’,0)) et (q,1) −a− > (q’,1))
gage donné. si q, −a− > q’ etait une transition de l’auto-
mate reconnaissant L. On obtient un automate
— Nombre pair de facteur u : faire deux oc- non déterministe, on peut choisir à tout instant
curences de l’automate cherchant le fac- d’ aller se balader dans les état (*,1) quand on
teur u. Dans la premiere version, j’ai lu reviendra dans les (*,0), on aura effacé deux
le facteur un nombre pair de fois (sauf lettres. Les états final sont donc (q,O) ou q est
à l’extremité de l’automate ou je viens final.
de lire une occurence de plus), dans la
deuxieme impair. Quand j’ai reussi a lire
Le barman aveugle
un u de plus, la parite change, on se dirige
donc vers l’autre automate. Donc pour
chacune de deux versions, remplacer la question 1 : Il y a 4 configurations pos-
flèche qui conduit à l’état le plus à droite, sibles :
par une flèche qui passe sur l’autre ver- — T : les verres Tous retournés dans le
sion, dans l’état ou on a deja lu v, v etant meme sens
le plus long préfixe de u qui est aussi suf- — U : Un verre retourné dans un sens, et les
fixe de u, avec v different de u. 3 autres dans l’autre
Pour u = bab, ca fait six etats (1, a, 1) — D : 2 verres en Diagonale dans un sens et
(1, b, 2) (2, b, 2) (2, a, 3) (3, a, 1) (3, b, les 2 autres dans l’autre
2’) (1’, a, 1’) (1’, b, 2’) (2’, b, 2’) (2’, a, — C : 2 verres a Coté l’un de l’autre dans
3’) (3’, a, 1’) (3’, b, 2). Initial 1, finals 1 un sens et les 2 autres dans l’autre
2 et 3 3 coups possibles (on laisse “tout retourner” et
— Nombre pair de a et de b : Encore plus “rien retourner” qui ne font rien)
dur, l’automate à 4 états : on se souviens — u : retourner un verre (revient au meme
si on a lu un nombre pair/impair de a et qu’en retourner trois)
itou pour b (0, a, 1), (1, a, 0), (2, a, 3), (3, — d : retourner deux verres en diagonale
a, 2), (0, b, 2), (2, b, 0), (1, b, 3), (3, b, 1) — c : retourner deux verres cote à cote
final is 0 En utilisant Arden, on trouve : Etats initiaux : tous (au choix du client) Les
∗
(aa + bb + (ab + ba)(bb + aa) (ab + ba)) . ∗ u d c
— multiples de trois : difficile, surtout l’ex- T U D C
pression. il faut commencer par l’auto- transitions : U T,D,C U U
mate. Il y a 3 états numérotés 0,1,2. On D U T C
est dans l’état i quand a lu un nombre C U C T,D
qui vaut i modulo 3. Pas besoin de faire
un cas spécial pour epsilon car 0 pas re- question 2 : Il suffit de jouer ”cd”. ’c’ oblige
connu. Si j’ai lu un i mod 3 et que la pro- le barman à passer dans D, puis ’d’, fait gagner
13
le client. Correction : soit N = 2, soit u un mot quel-
conque de longeuer au moins 2, s’il est dans
question 3 : Le client gagne si il fait se ba- a(a + b)∗ , je peux pomper la deuxieme lettre,
lader dans l’automate ci-dessus sans passer par s’il est en b≥2 an bn , je peux pomper le premier
l’état T . Donc l’automate en question est celui- b, je reste dans {bm an bn }, s’il est en ban bn , je
ci dessus dans lequel on enleve l’etat T, et où peux pomper aussi le premier b, puissance 0, je
tous les états sont finaux suis dans a(a + b)∗ , puissance 2 et plus, je suis
dans {bm an bn }. S’il était reconnaissable, alors
son intersection avec le reconnaissable b(a + b)∗
question 4 : Il faut reconnaı̂tre le
le serait aussi, mais c’est {baN bN } qui lui n’est
complémentaire. Donc on déterminise l’auto-
pas pompable
mate ci-dessus. Attention : l’état initial sera
la réunion des trois états U,C,D. On voit que
l’on peut progressivement réduire l’incerti- 20.7 Grammaires hors contexte
tude, c’est a-dire que nos états vont être des Trouver des grammaires pour les lan-
ensembles d’états de plus en plus petits. Le gages suivants. {an bm cp dq | n + q = m + p}
non-deterministe avait tous ses états finaux, le Correction : L7 = {(an bn )bm (cp dp )dm } +
déterminisé a donc aussi tous ses états finaux. {an (am bm )cn (cp dp )|m > 0} (on décompose sui-
On rajoute la poubelle, seul états non-final. vant plus de a que b ou contraire) d’ou gram-
Puis on intervertit les finals et non-finals, pour maire non ambiguë
trouver le complémentaire. La poubelle se L8 = {an bm cp dq | n + p = m + q} : S− >
retrouve donc seul état final. On trouve une aSd|T |U ;
séquence gagnante (un mot reconnu) qui est Correction : T − > ...ax bx+y cy ; U − >
dcdudcd. Youpi ! b cx+y dy , y > 0, (ambigu si je met pas le y > 0,
x
14