Bonjour,
Dans notre dernière leçon, nous avons utilisé le lemme de pompage pour démontrer les limites intrinsèques des langages réguliers. Nous avons prouvé que des langages apparemment simples, comme ou les palindromes, ne peuvent être reconnus par une machine à mémoire finie. Cette conclusion nous amène naturellement à la question suivante : quel formalisme plus puissant permet de capturer ces structures ?
Aujourd'hui, nous franchissons une étape décisive en entrant dans le monde des langages hors-contexte (ou context-free). Ces langages sont au cœur de la définition de la syntaxe de la plupart des langages de programmation, de la structure des fichiers de configuration comme XML ou JSON, et de nombreux autres domaines. L'objectif de cette leçon est d'introduire les deux outils fondamentaux et duaux qui les décrivent : les grammaires hors-contexte, qui permettent de les générer, et les automates à pile, qui permettent de les reconnaître.
1. Grammaires Hors-Contexte (CFG) : Le Modèle Génératif
Pour décrire un langage comme , nous avons besoin d'un mécanisme qui peut "compter" et assurer une correspondance. Une grammaire le fait de manière élégante par un processus de réécriture récursive.
Une grammaire hors-contexte (en anglais, Context-Free Grammar ou CFG) est un ensemble de règles de production qui décrivent comment former les chaînes d'un langage. L'idée est de partir d'un symbole de départ (l'axiome) et de le remplacer successivement en utilisant les règles jusqu'à n'obtenir qu'une séquence de symboles "finaux" (les terminaux).
Définition formelle
Pour poser les bases rigoureuses attendues à l'agrégation, nous allons directement aborder la définition formelle.
Introduction aux grammaires algébriques (hors contexte, context-free)
Pour commencer, visionnez cette vidéo de la chaîne 'Informatique Théorique' qui définit formellement une grammaire hors-contexte et ses quatre composantes essentielles.
Regardez le début de la vidéo (00:00 à 01:57). Portez une attention particulière à la distinction entre les symboles terminaux (Σ, l'alphabet du langage) et les symboles non-terminaux (V, les variables internes à la grammaire), ainsi qu'au rôle de l'axiome (S) et des règles de production (R).
Comme vous l'avez vu, une grammaire hors-contexte est un quadruplet où :
- est un alphabet de symboles non-terminaux (ou variables).
- est un alphabet de symboles terminaux, disjoint de .
- est un ensemble fini de règles de production de la forme , où et .
- est l'axiome (ou symbole de départ).
Le terme "hors-contexte" vient du fait que la variable à gauche d'une règle peut être remplacée par indépendamment du contexte dans lequel elle apparaît.
Le Processus de Dérivation
Pour générer un mot, on part de l'axiome et on applique les règles. Chaque application d'une règle est une étape de dérivation.
Par exemple, pour le langage , la grammaire est :
- Axiome :
Pour dériver le mot :
La vidéo suivante illustre ce processus de dérivation.
Introduction aux grammaires algébriques (hors contexte, context-free)
La même vidéo illustre ensuite comment utiliser ces règles pour 'dériver' ou générer des mots appartenant au langage.
Regardez la section de 01:57 à 03:46. Suivez l'exemple de dérivation pas à pas. Comprenez bien que le processus s'arrête lorsqu'il ne reste que des symboles terminaux.
Pour une référence écrite concise et formelle, vous pouvez consulter le document suivant, qui correspond au niveau de rigueur attendu.
Ce document de l'ENS Paris-Saclay, une de vos références, présente les grammaires hors-contexte (aussi appelées algébriques ou de type 2) de manière dense et formelle.
Lisez la page 90/149, section 'Grammaires algébriques'. Retenez la définition formelle et l'exemple classique {aⁿbⁿ | n ≥ 0}.
2. Automates à Pile (AP) : Le Modèle de Reconnaissance
Maintenant que nous savons générer des langages comme , il nous faut une machine capable de les reconnaître. Nous avons vu qu'un automate fini ne suffit pas car sa mémoire est limitée à ses états. L'ajout d'une pile (structure LIFO : Last-In, First-Out) est précisément ce qui lui manquait.
Un automate à pile (en anglais, Pushdown Automaton ou PDA) est un automate fini doté d'une pile de capacité illimitée. À chaque transition, l'automate peut non seulement changer d'état, mais aussi manipuler le sommet de la pile (empiler ou dépiler des symboles).

Définition formelle
Formellement, un automate à pile est généralement défini par un 7-uplet :
- : un ensemble fini d'états.
- : l'alphabet d'entrée.
- : l'alphabet de la pile.
- : la fonction de transition. C'est le cœur de l'automate. Elle prend en argument l'état courant, le symbole d'entrée (ou ) et le symbole au sommet de la pile, et retourne un ensemble de paires (nouvel état, chaîne à empiler).
- : l'état initial.
- : le symbole initial de la pile.
- : l'ensemble des états accepteurs.
L'intuition pour reconnaître est simple :
- Pour chaque
alu en entrée, on empile un symbole (disonsX) sur la pile. - Quand on commence à lire des
b, on dépile unXpour chaqueblu. - Si, à la fin de la lecture du mot, la pile est vide (et que l'on est dans un état accepteur), le mot est reconnu.
La vidéo suivante détaille magnifiquement cette construction.
Les Automates à Pile (1 sur 4)
Cette vidéo de Leila Ben Ayed est une ressource pédagogique remarquable. Elle explique l'intuition derrière les automates à pile et construit pas à pas un automate pour le langage {aⁿbⁿ}.
Regardez attentivement les segments suivants : Pourquoi une pile ? (04:29 - 05:46): Comprenez la nécessité de mémoriser un contexte. L'automate (05:46 - 09:09): Familiarisez-vous avec les composants (ruban, pile, contrôle) et l'idée de l'acceptation par pile vide. Les transitions (09:09 - 13:57): C'est la partie la plus importante. Analysez comment les transitions sont définies (symbole lu, symbole au sommet, action sur la pile) pour gérer les 'a' et les 'b'. Définition formelle (13:57 - 16:03): Faites le lien entre l'exemple concret et la définition formelle d'un automate et d'une configuration.
Pour la définition formelle écrite, le document de l'ENS reste notre référence.
Pour la définition formelle de l'automate à pile, référez-vous de nouveau au document de l'ENS.
Lisez la page 114/149, section 'Automates à pile'. Comparez cette définition (un 7-uplet) avec celles vues dans la vidéo. Notez également les différents modes de reconnaissance mentionnés (par état final, par pile vide). Nous explorerons leur équivalence dans une future leçon.
3. Le Lien Fondamental : CFG PDA
Tout comme le théorème de Kleene établit l'équivalence entre les automates finis et les expressions régulières, un théorème central de la théorie des langages établit l'équivalence entre les grammaires hors-contexte et les automates à pile.
Théorème d'équivalence : Un langage est généré par une grammaire hors-contexte si et seulement si il est reconnu par un automate à pile.
L'intuition de la preuve (de la grammaire vers l'automate) est que la pile de l'automate peut simuler une dérivation gauche de la grammaire. L'automate garde sur sa pile la partie de la chaîne (mélange de terminaux et non-terminaux) qui reste à dériver.
Ce résultat est le plus important de cette partie du cours. Le document de l'ENS l'énonce clairement.
Lisez la page 118/149, section 'Automates à pile et grammaires'. Retenez les deux propositions qui, ensemble, forment le théorème d'équivalence. La construction effective d'un automate à partir d'une grammaire (et vice-versa) fera l'objet de nos prochaines leçons.
Conclusion
Cette leçon a posé les fondations d'un nouveau chapitre de la théorie des langages.
Points clés à retenir :
- Les grammaires hors-contexte (CFG) sont un formalisme génératif défini par un quadruplet . Elles utilisent des règles de réécriture pour construire des mots et sont capables de décrire des structures récursives ou imbriquées que les expressions régulières ne peuvent pas capturer.
- Les automates à pile (PDA) sont un formalisme de reconnaissance. Ils sont constitués d'un automate fini augmenté d'une pile. Cette pile leur confère une mémoire LIFO illimitée, essentielle pour reconnaître les langages hors-contexte.
- Le théorème d'équivalence stipule que la classe des langages générés par les CFG est exactement la même que la classe des langages reconnus par les PDA. C'est la pierre angulaire de ce domaine.
Dans notre prochaine leçon, nous mettrons ces définitions en pratique. Nous nous concentrerons sur la construction effective d'un automate à pile pour un langage hors-contexte simple, en détaillant la logique de conception des états et des transitions.