MIO2-2
Projet basic
8 Juin 2001
-- ° --
Documents autorisés : notes de cours manuscrites ou
polycopiées
Intro
On veut remplacer la construction alternative IF
.. GOTO .. des instructions du langage basic par
l'instruction plus générale IF .. THEN .. Cette nouvelle
instruction pourra être utilisée de deux façons :
-
soit en remplacement de l'ancienne alternative. L'instruction
aura dans ce cas la forme
IF test THEN num
et elle aura le même effet que l'ancien IF test
GOTO num ;
- soit pour l'exécution conditionnée d'une
instruction. L'instruction aura alors la forme
IF test THEN inst
.
Son effet est le suivant :
-
si le test est négatif, on passe à la ligne suivante.
- si le test est positif, on exécute l'instruction
inst et, sauf lorsque inst est une
instruction de saut (GOTO ou GOSUB), on passe à la
ligne suivante.
Question
-
décrivez les modifications à apporter à l'ensemble du
programme vu en cours.
Rappels
Nous rappelons, quelques types et fonctions mis en oeuvre.
(* == Fichier: syntabs.ml *)
type bin_op = PLUS | MINUS | MULT | DIV
type exp =
ExpInt of int
| ExpVar of string
| ExpOpp of exp
| ExpBin of exp * bin_op * exp
type inst =
Rem of string
| Goto of int
| Gosub of int
| Print_e of exp
| Print_s of string
| Println
| Input of string
| If of test * int
| Let of string * exp
| Return
| End
(* == Fichier: eval.ml *)
val eval_exp : Syntabs.exp -> Env.env -> int
val eval_test : Env.env -> Syntabs.exp * Syntabs.bin_rel * Syntabs.exp -> bool
val exec_inst : bool ref -> Env.env -> int ref -> int Stack.t -> Syntabs.inst -> unit
val ld_prog : (int * Syntabs.inst) list -> Syntabs.inst array
val exec_prog : (int * Syntabs.inst) list -> unit
(* == Fichier: printer.ml *)
val print_exp : Syntabs.exp -> unit
val print_test : Syntabs.exp * Syntabs.bin_rel * Syntabs.exp -> unit
val print_inst : Syntabs.inst -> unit
val print_prog : (int * Syntabs.inst) list -> unit
Les fonctions d'analyses lexicale et syntaxique sont sythétisées
par les outils ocamllex et ocamlyacc à partir des
définitions contenues dans les fichiers parser.mly et
lexer.mll.
This document was translated from LATEX by
HEVEA.