PandaCodeur · Cours 2 / 5
Compilation : 2. Expressions régulières et analyse lexicale
Décrire les tokens et suivre la construction d’un scanner.
Trois notions à distinguer
| Notion | Exemple | Rôle |
|---|---|---|
| Lexème | compteur42 | Texte réellement rencontré |
| Token | ID | Catégorie envoyée au parseur |
| Attribut | Référence de compteur42 | Information associée au token |
Le scanner avance dans un flux de caractères. Les blancs et commentaires sont généralement ignorés selon les règles du langage ; les positions restent utiles pour les diagnostics.
Construire une expression régulière
Les briques formelles sont ∅, ε, les symboles de l’alphabet, l’union |, la concaténation et l’étoile *. L’étoile est prioritaire sur la concaténation, elle-même prioritaire sur |. Ainsi ab|c* décrit {ab} ∪ {ε,c,cc,…}.
| Forme abrégée | Définition | Exemple |
|---|---|---|
| r+ | rr* | a+ exclut ε |
| r? | r|ε | a? accepte ε ou a |
| [a-z] | Union des lettres a à z | Convention ASCII de ce chapitre |
| [0-9]+ | Au moins un chiffre | 0, 17, 2048 |
lettre = [A-Za-z_]
chiffre = [0-9]
identifiant = [A-Za-z_][A-Za-z0-9_]*
entier = [0-9]+
nombre = [0-9]+(\.[0-9]+)?([Ee][+-]?[0-9]+)?Ces motifs décrivent un mini-langage ASCII. Le nombre accepte 12, 12.5 et 12E-3, mais exclut .5 et 12. ; un signe initial peut être traité séparément comme opérateur. Pour valider une chaîne entière, utilisez une correspondance complète et non une recherche de sous-chaîne.
Choisir le plus long lexème
Avec les opérateurs = et ==, l’entrée a==b doit donner ID EQEQ ID. Le scanner choisit la plus longue correspondance depuis la position courante. En cas d’égalité de longueur, une priorité de règles départage les tokens, par exemple le mot-clé if avant ID. En revanche ifx reste un identifiant car sa correspondance est plus longue.
tant que la source n’est pas terminée :
état = état_initial ; dernier_final = aucun
avancer tant qu’une transition existe
mémoriser chaque état final et sa position
si aucun état final n’a été atteint : erreur lexicale
sinon revenir à la dernière position acceptante
émettre le token ou ignorer le blanc/commentaireDes motifs à un analyseur
La construction de Thompson associe un ε-AFN à chaque expression : un chemin pour un symbole, un branchement pour l’union, des raccordements pour la concaténation et une boucle avec passage vide pour l’étoile. On réunit les automates de tokens sous un nouvel état initial, puis on déterminise. Les états finaux gardent la priorité du token gagnant. Le chapitre suivant détaille la déterminisation et la minimisation.
Mini-exercice : découper une instruction
if ifx == 12E-3;Donner les lexèmes et catégories. Tester ensuite le motif nombre sur 7., 7.0 et 7E+.
Afficher la correction expliquée
if → IF
ifx → ID
== → EQEQ
12E-3 → NUMBER
; → SEMIEn correspondance complète, 7. est refusé, 7.0 est accepté et 7E+ est refusé car l’exposant exige au moins un chiffre. Un scanner pourrait reconnaître un préfixe numérique puis d’autres tokens ; cela diffère d’une validation du nombre entier.