module Repl: sig .. end
The
Repl module is the front-end for the interpreter.
Repl
stands for
Read-Eval-Print-Loop. It is responsible for parsing user
input, evaluating the resulting expression, and printing the
result back to the terminal.
val parse_toplevel : string -> Ast.toplevel_input
parse_toplevel s calls the Parser on the string s with entry
point toplevel_input to the grammar.
val parse_expression : string -> Ast.expr
parse_expression parses the input string to an expression.
val parse_definition : string -> Ast.id * Ast.expr
parse_definition parses the input string to a definition.
val commands : string list
commands is the list of commands available to the user.
val eval_def : Ast.id ->
Ast.expr ->
Ast.environment -> (Ast.id, Ast.typ) Hashtbl.t -> Ast.value * Ast.typ
eval_def is used to evaluate a toplevel definition. Thus,
eval_def id exp env fvs evaluates the expression exp in the
environment env with known free variables fvs. The resulting
value is bound to the identifier id and is returned along with
its type.
val repl : Ast.environment -> (Ast.id, Ast.typ) Hashtbl.t -> unit
repl env fvs is the entry point for the REPL loop. It maintains
a global environment for the interpreter as well as the set of
known free variables.
val handle_file : string -> unit
handle_file is used exlusively to handle the Use <filename>
directive. handle_file filename interprets the contents of the
file filename and adds the definitions to the environment of the
REPL.