Aller au contenu principal

AST

Progression

#AST (arbre syntaxique abstrait)

À quoi ça sert ?

À quoi ça sert: représenter l’intention du programme sans bruit syntaxique pour faciliter analyses et transformations. Comment: nœuds typés (littéral, binaire, appel, assignation), positions source pour diagnostics, et transformations (optimisations/désucreurs).

Objectifs d’apprentissage

  • Modéliser un AST minimal et stable pour le langage cible.
  • Conserver les positions source pour diagnostics.
  • Distinguer AST vs IR (intermediate representation) pour optimisations/codegen.

#Exemple d’AST et évaluation

Chargement de l’éditeur...
AST vs CST

Le CST reflète fidèlement la grammaire (tous les tokens), l’AST omet les détails syntaxiques superflus pour faciliter l’analyse/transformations.

#Mini‑quiz

Où stocker l’indentation/parenthèses ?
Où stocker l’indentation/parenthèses ?

#Exercice : Extension de l'évaluateur AST pour les variables

Étendez l'évaluateur AST pour gérer les variables et les affectations.

#Instructions

  1. Modifiez la fonction eval_ast pour accepter un environnement (dictionnaire) des variables.
  2. Ajoutez le traitement des nœuds de type var (variables) et assign (affectations).
  3. Implémentez une fonction eval_program qui évalue un programme complet avec des instructions.

#Exemple de code

pythonpython
1# AST étendu avec variables et affectations2# Exemple: x = 5; y = x * 2; y + 33program_ast = ('program', [4    ('assign', 'x', ('num', 5)),5    ('assign', 'y', ('*', ('var', 'x'), ('num', 2))),6    ('expr', ('+', ('var', 'y'), ('num', 3)))7])8 9def eval_ast(node, env={}):10    if node[0] == 'num':11        return node[1]12    elif node[0] == 'var':13        if node[1] in env:14            return env[node[1]]
Chargement de l’éditeur...