xref: /aosp_15_r20/external/llvm/examples/OCaml-Kaleidoscope/Chapter3/toy.ml (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker(*===----------------------------------------------------------------------===
2*9880d681SAndroid Build Coastguard Worker * Main driver code.
3*9880d681SAndroid Build Coastguard Worker *===----------------------------------------------------------------------===*)
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workeropen Llvm
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerlet main () =
8*9880d681SAndroid Build Coastguard Worker  (* Install standard binary operators.
9*9880d681SAndroid Build Coastguard Worker   * 1 is the lowest precedence. *)
10*9880d681SAndroid Build Coastguard Worker  Hashtbl.add Parser.binop_precedence '<' 10;
11*9880d681SAndroid Build Coastguard Worker  Hashtbl.add Parser.binop_precedence '+' 20;
12*9880d681SAndroid Build Coastguard Worker  Hashtbl.add Parser.binop_precedence '-' 20;
13*9880d681SAndroid Build Coastguard Worker  Hashtbl.add Parser.binop_precedence '*' 40;    (* highest. *)
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker  (* Prime the first token. *)
16*9880d681SAndroid Build Coastguard Worker  print_string "ready> "; flush stdout;
17*9880d681SAndroid Build Coastguard Worker  let stream = Lexer.lex (Stream.of_channel stdin) in
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  (* Run the main "interpreter loop" now. *)
20*9880d681SAndroid Build Coastguard Worker  Toplevel.main_loop stream;
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker  (* Print out all the generated code. *)
23*9880d681SAndroid Build Coastguard Worker  dump_module Codegen.the_module
24*9880d681SAndroid Build Coastguard Worker;;
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workermain ()
27