summaryrefslogtreecommitdiff
path: root/examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml
diff options
context:
space:
mode:
authorErick Tryzelaar <idadesub@users.sourceforge.net>2010-03-08 19:32:27 +0000
committerErick Tryzelaar <idadesub@users.sourceforge.net>2010-03-08 19:32:27 +0000
commit49457b81589c6a3ef384caa8fdf1463ad2ada7c7 (patch)
tree8500bcc1ba0067ff7816b083d8b5a535be6ee50d /examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml
parent9ef76b9985a0c408e126affa049698c413ad8664 (diff)
downloadllvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.tar.gz
llvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.tar.bz2
llvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.tar.xz
Add OCaml tutorial to the examples.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97966 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml')
-rw-r--r--examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml34
1 files changed, 34 insertions, 0 deletions
diff --git a/examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml b/examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml
new file mode 100644
index 0000000000..01c85bd70d
--- /dev/null
+++ b/examples/OCaml-Kaleidoscope/Chapter2/toplevel.ml
@@ -0,0 +1,34 @@
+(*===----------------------------------------------------------------------===
+ * 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