3.1 Arbres de syntaxe abstraite de mini-ML
Mini-ML est uniquement un langage d'expression. Il ne contient pas de déclarations de variables globales,
d'exceptions ou de types. Néanmoins, les expressions de mini-ML sont assez riches par rapport
au l-calcul. Elles correspondent à une extension du l-calcul par les
constantes numériques, de chaînes de caractères et des booléens, des couples et des listes,
de la structure de contrôle conditionnelle, de la déclaration locale let
qui introduit
le polymorphisme et de la récursion. Voici les types Caml-light
des expressions et des déclarations :
type ml_expr = Const of ml_const
*
2 Var of string
*
2 Pair of ml_expr * ml_expr
*
2 Cons of ml_expr * ml_expr
*
2 Cond of ml_expr * ml_expr * ml_expr
*
2 App of ml_expr * ml_expr
*
2 Abs of string * ml_expr
*
2 Letin of string * ml_expr * ml_expr
*
2 Letrecin of string * ml_expr * ml_expr
*
and ml_const = Int of int
*
2 Float of float
*
2 Bool of bool
*
2 String of string
*
2 Emptylist
*
2 Unit
*
;;
*
Type ml_expr defined.
*
Type ml_const defined.