1.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
|
Var
of
string
|
Pair
of
ml_expr
*
ml_expr
|
Cons
of
ml_expr
*
ml_expr
|
Cond
of
ml_expr
*
ml_expr
*
ml_expr
|
App
of
ml_expr
*
ml_expr
|
Abs
of
string
*
ml_expr
|
Letin
of
string
*
ml_expr
*
ml_expr
|
Letrecin
of
string
*
ml_expr
*
ml_expr
and
ml_const
=
Int
of
int
|
Float
of
float
|
Bool
of
bool
|
String
of
string
|
Emptylist
|
Unit;;