1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 16:33:37 +01:00
llvm-mirror/examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml
Erick Tryzelaar 0e12fd5fc2 Add OCaml tutorial to the examples.
llvm-svn: 97966
2010-03-08 19:32:27 +00:00

35 lines
1.1 KiB
OCaml

(*===----------------------------------------------------------------------===
* Top-Level parsing and JIT Driver
*===----------------------------------------------------------------------===*)
(* top ::= definition | external | expression | ';' *)
let rec main_loop stream =
match Stream.peek stream with
| None -> ()
(* ignore top-level semicolons. *)
| Some (Token.Kwd ';') ->
Stream.junk stream;
main_loop stream
| Some token ->
begin
try match token with
| Token.Def ->
ignore(Parser.parse_definition stream);
print_endline "parsed a function definition.";
| Token.Extern ->
ignore(Parser.parse_extern stream);
print_endline "parsed an extern.";
| _ ->
(* Evaluate a top-level expression into an anonymous function. *)
ignore(Parser.parse_toplevel stream);
print_endline "parsed a top-level expr";
with Stream.Error s ->
(* Skip token for error recovery. *)
Stream.junk stream;
print_endline s;
end;
print_string "ready> "; flush stdout;
main_loop stream