PandaCodeur · Examen 4 / 4
Examen de compilation : 4. Synthèse et commandes
Adaptation thématique INF321 2024–2025 : 3 heures, 20 points.
Consignes et rappels
Ce sujet reformule et réorganise des thèmes du sujet figurant à la page PDF 180. Barème pédagogique sur 20 : 4 + 5 + 8 + 3. Les corrections ci-dessous ont été élaborées pour PandaCodeur. Les opérateurs du mini-langage sont # binaire, @ postfixé, les crochets et le terminateur &.
1. Définitions et clôtures : 4 points
Développer LL(1) (1 point). Expliquer compilation et interprétation (1 point). Montrer que les préfixes et les facteurs d’un langage régulier sont réguliers (2 points).
Afficher la correction expliquée
LL(1) : lecture gauche à droite, dérivation gauche, un token de prévision. La compilation produit une représentation cible ; l’interprétation exécute une représentation du programme. Pour pref(L), rendre finaux tous les états pouvant atteindre un ancien final. Pour fact(L), prendre de plus comme initiaux tous les états accessibles depuis l’ancien initial. Un nouvel initial relié par ε permet de représenter cet ensemble : on obtient un AFN, donc un langage régulier.
2. Deux parités : 5 points
Sur Σ={a,b}, reconnaître les mots ayant un nombre pair de a et impair de b. Construire l’AFD complet (2 points), prouver sa minimalité (2 points) et tester ε, b, aab et ab (1 point).
Afficher la correction expliquée
| État (parité a, parité b) | a | b | Final ? |
|---|---|---|---|
| q00 | q10 | q01 | Non |
| q10 | q00 | q11 | Non |
| q01 | q11 | q00 | Oui |
| q11 | q01 | q10 | Non |
Initial : q00 ; seul final : q01. Lire a inverse la première parité ; lire b inverse la seconde. Les quatre états sont accessibles par ε, a, b, ab. Depuis chaque état, il existe un suffixe de longueur au plus deux menant à q01 ; appliqué à tout autre état, ce suffixe conserve une différence de parité, donc le distingue. Les quatre états sont nécessaires. ε est refusé, b et aab sont acceptés, ab est refusé.
3. Un langage de commandes : 8 points
S → C &
C → α | C # C | C @ | [ C ]Montrer l’ambiguïté (1 point). Proposer une grammaire LL(1) où @ est plus prioritaire que # et # associe à droite (2 points). Construire sa table (3 points). Tracer α#α& (2 points).
Afficher la correction expliquée
α#α#α& possède deux regroupements : (α#α)#α et α#(α#α). Choisissons :
S → C &
C → P C′
C′ → # C | ε
P → A R
R → @ R | ε
A → α | [ C ]R applique zéro ou plusieurs @ au seul atome précédent. C′ renvoie à C après # : l’arbre abstrait de α#α#α est #(α,#(α,α)), donc l’associativité est à droite. Les crochets forcent un regroupement.
| Non-terminal | PREMIER | SUIVANT |
|---|---|---|
| S | {[, α} | {$} |
| C | {[, α} | {&, ]} |
| C′ | {#, ε} | {&, ]} |
| P | {[, α} | {#, &, ]} |
| R | {@, ε} | {#, &, ]} |
| A | {[, α} | {#, &, @, ]} |
| M | α | [ | ] | # | @ | & | $ |
|---|---|---|---|---|---|---|---|
| S | S → C & | S → C & | - | - | - | - | - |
| C | C → P C′ | C → P C′ | - | - | - | - | - |
| C′ | - | - | C′ → ε | C′ → # C | - | C′ → ε | - |
| P | P → A R | P → A R | - | - | - | - | - |
| R | - | - | R → ε | R → ε | R → @ R | R → ε | - |
| A | A → α | A → [ C ] | - | - | - | - | - |
Convention : sommet de pile à gauche ; $ marque la fin de l’entrée et le fond de pile.
| Pile | Entrée restante | Action |
|---|---|---|
| S $ | α # α & $ | S → C & |
| C & $ | α # α & $ | C → P C′ |
| P C′ & $ | α # α & $ | P → A R |
| A R C′ & $ | α # α & $ | A → α |
| α R C′ & $ | α # α & $ | Lire α |
| R C′ & $ | # α & $ | R → ε |
| C′ & $ | # α & $ | C′ → # C |
| # C & $ | # α & $ | Lire # |
| C & $ | α & $ | C → P C′ |
| P C′ & $ | α & $ | P → A R |
| A R C′ & $ | α & $ | A → α |
| α R C′ & $ | α & $ | Lire α |
| R C′ & $ | & $ | R → ε |
| C′ & $ | & $ | C′ → ε |
| & $ | & $ | Lire & |
| $ | $ | Accepter |
4. Non-clôture des langages algébriques : 3 points
Donner deux langages hors contexte dont l’intersection n’est pas hors contexte, puis en déduire la non-clôture par complémentation.
Afficher la correction expliquée
L1={aⁿbⁿcᵐ | n,m≥0} et L2={aᵐbⁿcⁿ | n,m≥0} sont hors contexte. Exemples de grammaires : S1 → U V ; U → aUb | ε ; V → cV | ε, et S2 → W X ; W → aW | ε ; X → bXc | ε. Leur intersection est {aⁿbⁿcⁿ | n≥0}, qui n’est pas hors contexte.
Justification par pompage : choisir aᵖbᵖcᵖ. Une fenêtre de longueur au plus p rencontre au plus deux blocs de lettres. Pomper les deux segments modifiés change au moins un compte sans changer les trois de façon égale, ou détruit l’ordre des blocs. On sort du langage. Enfin, si les langages hors contexte étaient clos par complémentation, leur clôture par union et la loi de De Morgan impliqueraient la clôture par intersection : contradiction.