Aller au contenu principal

Cours · L3

Compilation & langages formels

Progression du module

Points d’expérience : XPSérie de jours consécutifs : · —Progression du module : — / —compris

#Compilation et langages formels: introduction

Ce module suit un fil conducteur unique: un petit langage d'expressions arithmétiques avec variables, noté Expr, qui traverse toutes les étapes du pipeline. Chaque page transforme le même artefact: le texte source devient une suite de tokens, puis un AST, puis une IR à pile, puis un module WebAssembly exécutable dans le navigateur.

Contexte pédagogique: niveau L3 (Valrose, UCA). Prérequis conseillés: expressions régulières et automates finis (module Langages formels), bases de Python ou JavaScript pour les ateliers, et notions d'architecture (pile, entiers 32 bits) pour la partie codegen.

#Le pipeline en une image

code

1source "2*(3+4)-5"2   │  lexing      (page suivante)34tokens NUM(2) * ( NUM(3) + NUM(4) ) - NUM(5)5   │  parsing67AST      ('-', ('*', 2, ('+', 3, 4)), 5)8   │  analyse sémantique / IR910code pile  push 2; push 3; push 4; add; mul; push 5; sub11   │  génération de code1213WASM     i32.const 2 … i32.sub  (module binaire exécutable)

Chaque flèche est une fonction pure: même entrée, même sortie. C'est cette prévisibilité qui rend un compilateur testable maillon par maillon.

#Pourquoi ça sert

Comprendre le pipeline de compilation améliore la lecture des erreurs (un message « unexpected token » vient du parseur, un « type mismatch » de l'analyse sémantique, un « unreachable code » de l'IR). Les mêmes techniques construisent des linters, des formatters, des moteurs de templates et des outils de requête. WebAssembly illustre quant à lui comment une cible d'exécution moderne se conçoit: format binaire validé avant exécution, machine à pile typée, bac à sable sans accès disque ni réseau direct.

#Démo WebAssembly (f donne 42)

Le composant ci-dessous instancie un module WASM réel dans votre navigateur et appelle sa fonction exportée. Toute la chaîne décrite dans ce module aboutit à ce type d'artefact.

Exécute un module WASM (base64) qui exporte f().

#Plan du module

  1. Lexing: du texte aux tokens, règles, priorités, plus long match.
  2. Parsing: grammaires EBNF, descente récursive, précédence et associativité.
  3. AST: représentation abstraite, positions source, évaluation avec environnement.
  4. Génération de code: IR à pile, codegen WASM, constant folding.
  5. WebAssembly: modèle d'exécution, WAT, cycles de vie d'un module.
  6. Limites: contraintes d'exécution côté navigateur, mémoire, sécurité.

Le langage Expr garde volontairement une grammaire minuscule pour que chaque page reste lisible; les exercices d'extension (identifiants, mots-clés, affectations) montrent comment la même architecture grandit sans être réécrite.

Plan du cours · 8 sections

Sections du cours

Mise en pratique

Mini-projet

Mini-projet: Compilateur jouet → WASM