Aller au contenu principal

Parsing

Progression

#Parsing (analyse syntaxique)

À quoi ça sert ?

À quoi ça sert: vérifier qu’une séquence de tokens suit une grammaire et construire une structure hiérarchique (AST). Comment: parseurs descendants (récursifs) ou ascendants (LR), précédence/associativité et récupération d’erreurs avec messages utiles.

Objectifs d’apprentissage

  • Écrire une grammaire sans ambiguïtés (EBNF), comprendre précédences/associativités.
  • Reconnaître LL vs LR; choisir un parseur récursif descendant simple quand adapté.
  • Distinguer AST vs CST et conserver les positions source.

#Descente récursive minimale

#Exercice : Extension du parseur pour les affectations

Étendez le parseur pour gérer des affectations de variables et des instructions simples.

#Instructions

  1. Modifiez la grammaire pour inclure :
    • Des instructions d'affectation : ID = expr
    • Des programmes comme séquence d'instructions
  2. Ajoutez des règles pour parser les identifiants et les affectations.
  3. Le parseur doit retourner un AST représentant un programme avec des instructions.

#Exemple de code

pythonpython
1import re2 3# Expression régulière étendue pour les identifiants4TOKS = re.compile(r'\s*(?:(\d+)|([a-zA-Z][a-zA-Z0-9]*)|(.))')5 6def tokenize(s):7    for num, ident, other in TOKS.findall(s):8        if num:9            yield ('NUM', int(num))10        elif ident:11            yield ('ID', ident)12        elif other in '+-*/()=;':13            yield (other, other)14        elif other.strip():
Chargement de l’éditeur...

#Pièges

Dangling else

Ambiguïté classique: associer else au bon if. Résoudre par règles de précédence/associativité ou réécrire la grammaire.

#Mini‑quiz

Lequel décrit un arbre minimal pour la compilation ?
Lequel décrit un arbre minimal pour la compilation ?