Le fichier joint contient un typeur en ocaml pour le [quizz] fonctions et démonstrations du forum fonctionnel.
Remerciements à Alain Prouté pour m'encourager à utiliser sa contribution.
Ce petit exemple illustre assez bien, sur un langage suffisamment élémentaire, les techniques de base pour l'interprétation en ocaml :
- l'analyse lexicale, y compris sur des opérateurs muti-caractères comme |->
- l'analyse grammaticale descendante récursive LL(1)
- la construction d'un arbre de syntaxe abstraite
- le typage fort
- les messages d'erreurs (lexicales, grammaticales, de nommage, de typage)
Le langage accepté par l'interpréteur ne comprend que les constructeurs de types élémentaires |->, O et W, il ne comprend pas les opérateurs =>, ~, &, |, !, 1! et +.
Pour compiler en code natif:
ocamlopt -o coquelicote lex.ml coquelicote_txt.ml
Un exemple de session (quit. pour quitter) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| > coquelicote
Coquelicote Text v0.1
# ?q:O q.
: O
# ?f:O -> O ?x:O f(x).
: O
# q:O |-> x:W(q) |-> x.
: W(?q:O ?x:W(q) q)
# q:W(E) -> W(F) |->
x:W(E) |->
q(x).
: W(?q:W(E) -> W(F) ?x:W(E) F)
# f:W(?x:W(E) ?q:O q) |->
q:O |->
x:W(E) |->
f(x)(q).
: W(?f:W(?x:W(E) ?q:O q) ?q:O ?x:W(E) q)
# g:W(?q:O ?x:W(E) q) |->
x:W(E) |->
q:O |->
g(q)(x).
: W(?g:W(?q:O ?x:W(E) q) ?x:W(E) ?q:O q)
# quit.
> |
L'archive:
Partager