Aller au contenu principal

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

  1. 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
  2. Ajoutez une étape de reconnaissance des mots-clés après le découpage lexical.
  3. 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 ?
Quelle stratégie de matching est la plus courante pour les lexers ?