(* ci.mli *) (* Type des instructions de la machine *) type TypeInstruction = Void (* Passer a l'instruction suivante *) | Stop (* Imprimer le sommet de pile et *) (* arreter l'execution *) | Add (* Depiler le sommet et le sous- *) (* sommet de pile, les ajouter et *) (* ranger le resultat au sommet de *) (* pile *) | Sub (* Depiler le sommet et le sous- *) (* sommet de pile, les soustraire *) (* et ranger le resultat au sommet *) (* de pile *) | Mult (* Depiler le sommet et le sous- *) (* sommet de pile, les multiplier *) (* et ranger le resultat au sommet *) (* de pile *) | Div (* Depiler le sommet et le sous- *) (* sommet de pile, les diviser *) (* et ranger le resultat au sommet *) (* de pile *) | Ifless (* Depiler le sommet b et le sous- *) (* sommet a de pile, et ranger le *) (* resultat 1 si a=b *) (* au sommet de pile *) | Ifeq (* Depiler le sommet b et le sous- *) (* sommet a de pile, et ranger le *) (* resultat 1 si a=b et 0 si a<>b *) (* au sommet de pile *) | BrZero (* Branchement a l'instruction *) (* dont l'adresse est au sommet *) (* de pile si le sous sommet est *) (* nul, les depiler *) | Goto (* Branchement a l'instruction in- *) (* diquee au sommet de pile, le *) (* le depiler *) | EmpilerSP (* Empiler le pointeur de sommet *) (* de pile au sommet de pile *) | DepilerSP (* Depiler la valeur au sommet de *) (* la pile dans le pointeur *) (* de sommet de pile SP *) | EmpilerLD (* Empiler le registre LD (lien *) (* dynamique) au sommet de pile *) | DepilerLD (* Depiler la valeur au sommet de *) (* la pile dans le registre de *) (* lien dynamique LD *) | EmpilerCO (* Empiler le compteur ordinal CO *) (* au sommet de pile *) | Charger (* Remplacer le sommet de la pile *) (* par la valeur de l'element de *) (* pile dont l'adresse dans la pi- *) (* le est au sommet de pile *) | Ranger (* Ranger la valeur du sous-sommet *) (* de pile dans la pile a l'adres- *) (* se indiquee au sommet de pile *) (* et les depiler *) | Valeur of int (* Valeur immediate *) | EmpilerSuiv (* Remplacer le sommet de la pile *) (* par le contenu de la memoire *) (* suivante dans le code *) | EmpilerCode (* Remplacer le sommet de la pile *) (* par le contenu de la memoire du *) (* code dont l'adresse est au som- *) (* met de pile *) | Fin (* Fin du code (a dumper) *) | DumpCode (* Imprimer le code a executer *) | DumpPile (* Imprimer la pile d'execution *) ;; type TypeCode == TypeInstruction vect;; exception ErreurExecution of string;; value echo_instruction : TypeInstruction -> unit;; value TraceExe : unit -> unit;; value UnTraceExe : unit -> unit;; value executer : TypeInstruction vect -> unit;;