Corrigé Centrale 2026 Option informatique MP — Partie A (Q1 à Q8) : Coloration syntaxique : automates et analyse lexicale
Sujet officiel du concours Centrale, session 2026, épreuve Option informatique MP. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
On réalise l'analyse lexicale d'un code OCaml à l'aide d'un automate. Les lexèmes reconnus sont décrits par le type donné par le sujet :
type token =
| Let | In | Var of string | Int of int | Lpar | Rpar | Add | Equal
Un nom de variable est une suite non vide de minuscules autre qu'un mot clé ; un entier s'écrit 0 ou par une suite de chiffres ne commençant pas par 0 ; les caractères espace, '\n', '\t' ne font que séparer les lexèmes. L'analyse lit la liste des caractères dans un automate déterministe dont chaque état final porte un constructeur (un mot clé l'emporte sur un nom de variable) ; un lexème est reconnu dès que l'automate échoue depuis un état acceptant, ou à la fin de la lecture dans un état acceptant (plus long lexème), puis on recommence au caractère qui a provoqué l'échec. Exemple du sujet : la liste des caractères de let valeur = 42 donne [Let; Var "valeur"; Equal; Int 42].
L'automate non déterministe de la figure 1 :
Q1. Sur , expression régulière des écritures binaires des entiers (0 ou un mot commençant par 1).
Q2. Automate déterministe reconnaissant ce langage ; adaptation à la base 10.
Q3. Langage reconnu par ; automate déterministe équivalent.
Q4. Justifier l'existence d'un automate déterministe reconnaissant l'ensemble des lexèmes du type token.
Q5. Automate déterministe sur reconnaissant in, let et les noms de variables, avec le constructeur de chaque état final.
Q6. Complexité de l'analyse lexicale d'une liste de caractères.
Q7. Montrer que n'est pas régulier.
Q8. Décider en temps linéaire si une liste de tokens est bien parenthésée (sans code).
Corrigé
Q1. L'expression régulière
convient : le premier membre dénote le seul mot , le second exactement les mots dont la première lettre est , suivie d'un mot quelconque de . L'union des deux est le langage demandé ; les deux membres sont disjoints, ce qui assure qu'aucune écriture n'a de zéro de tête superflu (le mot n'est dénoté ni par l'un ni par l'autre).
Q2. On prend trois états : initial, (on a lu exactement ) et (on a lu puis n'importe quoi), et acceptants :
Il est déterministe : de chaque état part au plus une transition par lettre (on peut le compléter par un état puits non acceptant recevant les transitions manquantes, par exemple puits). Un mot est accepté ssi il vaut (arrêt en ; toute lettre supplémentaire bloque) ou commence par (on reste ensuite en ) : c'est le langage de Q1.
Base 10 : on remplace l'alphabet par , l'étiquette de par et la boucle sur par ; la transition ne change pas. On reconnaît alors .
Q3. Un mot est accepté ssi il existe un calcul de à : on boucle en sur un préfixe , on lit , , , puis on boucle en sur un suffixe . Donc
l'ensemble des mots qui contiennent le facteur let ( désigne ici l'alphabet des caractères, qui contient , , ). Un automate déterministe (complet) mémorise le plus long suffixe du mot lu qui est préfixe de let : état (aucun), (l), (le), (facteur let déjà vu, puits acceptant). Sur le dessin, « autre » désigne toute lettre non écrite sur une autre flèche sortant du même état :
Depuis l'état , lire l ramène en (et non en ) : le suffixe l de lel peut commencer une occurrence. Par récurrence sur la longueur du mot lu, l'état atteint est le plus long suffixe préfixe de let tant que let n'est pas apparu, et ensuite ; le mot est donc accepté ssi il contient let. (Vérifié en OCaml contre la définition sur tous les mots de longueur au plus sur .)
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.