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 ?
#Exercice : Extension de l'évaluateur AST pour les variables
Étendez l'évaluateur AST pour gérer les variables et les affectations.
#Instructions
- Modifiez la fonction
eval_ast
pour accepter un environnement (dictionnaire) des variables. - Ajoutez le traitement des nœuds de type
var
(variables) etassign
(affectations). - 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...