Lexing
Progression
#Lexing (analyse lexicale)
À quoi ça sert ?
À quoi ça sert: découper une chaîne en unités significatives (tokens) pour simplifier le parsing. Comment: règles (regex ou DFA), gestion des espaces/commentaires et résolutions d’ambiguïté (plus long match, ordre des règles).
Objectifs d’apprentissage
- Écrire des règles de tokens et gérer espaces/commentaires.
- Gérer priorités/ambiguïtés (plus long match, ordre des règles).
- Éviter le backtracking excessive; préférer automates déterministes.
#Tokenizer (regex — expressions arithmétiques)
Chargement de l’éditeur...
#Exercice : Extension du tokenizer pour identifiants et mots-clés
Étendez le tokenizer pour reconnaître des identifiants (noms de variables/fonctions) et des mots-clés.
#Instructions
- Modifiez l'expression régulière pour reconnaître :
- Des identifiants : suites de lettres et chiffres commençant par une lettre
- Des mots-clés :
if
,else
,while
,for
- Ajoutez une étape de reconnaissance des mots-clés après le découpage lexical.
- Gérez correctement les majuscules/minuscules.
#Exemple de code
pythonpython
1import re2 3# Expression régulière étendue4TOKS = re.compile(r'\s*(?:(\d+)|([a-zA-Z][a-zA-Z0-9]*)|(.))')5 6# Mots-clés7KEYWORDS = {'if', 'else', 'while', 'for', 'def', 'return'}8 9def tokenize(s):10 out = []11 for num, ident, other in TOKS.findall(s):12 if num:13 out.append(('NUM', int(num)))14 elif ident:
Chargement de l’éditeur...
Espaces et commentaires
En pratique, on ignore espaces et commentaires au lexing pour simplifier le parsing.
Ambiguïtés
Mot‑clé vs identifiant: privilégier le plus long match et ordonner les règles pour détecter les mots‑clés exacts avant les identifiants génériques.
#Mini‑quiz
Quelle stratégie de matching est la plus courante pour les lexers ?