Langage de base : programme := | expr ;; | let affectations in expr ;; expr := expr_1 expr_1 := | expr_1 & expr_2 | expr_2 expr_2 := | expr_2 < expr_3 | expr_2 = expr_3 | expr_3 expr_3 := | expr_3 + expr_4 | expr_3 - expr_4 | expr_4 expr_4 := | expr_4 * expr_5 | expr_4 / expr_5 | expr_5 expr_5 := atome atome := | ( expr ) | constante | variable | variable ( liste_args ) | not ( expr ) | if expr then expr else expr fi constante := | entier | true | false liste_args := vide | liste_args_2 liste_args_2 := expr | expr, liste_args_2 entier := | - entier_positif | entier_positif affectations := | elem_aff | elem_aff ; | elem_aff ; affectations elem_aff := variable ( liste_vars ) = expr liste_vars := vide | liste_vars_2 liste_vars_2 := variable | variable, liste_vars_2