read string first
This commit is contained in:
parent
2e46c8cacf
commit
b1d92ca2ed
3 changed files with 17 additions and 10 deletions
6
Makefile
6
Makefile
|
@ -23,6 +23,8 @@ clean:
|
|||
rm -f lexer.ml parser.ml parser.mli
|
||||
rm -f *.cmo *.cmi
|
||||
|
||||
all: types.cmo lexer.cmo parser.cmo lambda.cmo
|
||||
ocaml types.cmo parser.cmo lexer.cmo lambda.cmo
|
||||
lambda: types.cmo lexer.cmo parser.cmo lambda.cmo
|
||||
ocamlc -o $@ $^
|
||||
|
||||
all: lambda
|
||||
|
||||
|
|
BIN
lambda
Executable file
BIN
lambda
Executable file
Binary file not shown.
15
lambda.ml
15
lambda.ml
|
@ -82,14 +82,15 @@ let rec eval (ctx, t) =
|
|||
if t = t' then raise EvaluationComplete else
|
||||
eval (ctx', t')
|
||||
with
|
||||
| UnboundVariable v -> print_endline ("unbound variable " ^ v); raise (Failure "")
|
||||
| UnboundVariable v -> raise (Failure ("unbound variable '" ^ v ^ "'"))
|
||||
| EvaluationComplete -> (ctx, t)
|
||||
|
||||
let _ =
|
||||
try
|
||||
let rec loop ctx =
|
||||
try
|
||||
print_string "> "; flush stdout;
|
||||
let lexbuf = Lexing.from_channel stdin in
|
||||
let line = input_line stdin in
|
||||
let lexbuf = Lexing.from_string line in
|
||||
let x = Parser.main Lexer.token lexbuf in
|
||||
match x with
|
||||
| Types.Term t ->
|
||||
|
@ -99,7 +100,11 @@ let _ =
|
|||
| Types.Assign (n, t) ->
|
||||
let (ctx', r) = eval (ctx, t) in
|
||||
loop (assign ctx' (n, r))
|
||||
in loop []
|
||||
with Lexer.Eof ->
|
||||
with
|
||||
| Lexer.Eof ->
|
||||
loop ctx
|
||||
| End_of_file ->
|
||||
print_endline "^D";
|
||||
exit 0
|
||||
in loop []
|
||||
|
||||
|
|
Loading…
Reference in a new issue