main.ml 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. open Ast
  2. (* Compile infile to assembly code
  3. * in_channel -> int -> repr *)
  4. let compile infile verbose =
  5. let rec run_phases ir = function
  6. | [] -> ir
  7. | h::t -> run_phases (h ir) t
  8. in
  9. run_phases (Inputfile (infile, verbose)) [
  10. Parse.phase;
  11. Print.phase;
  12. Desug.phase;
  13. Print.phase;
  14. (*Typecheck.phase;*)
  15. (*Extern_vars.phase;*)
  16. (*Dim_reduce.phase;*)
  17. (*Bool_op.phase;*)
  18. (*Assemble.phase;*)
  19. (*Peephole.phase;*)
  20. (*Print.phase;*)
  21. ]
  22. (* Main function, returns exit status
  23. * () -> int *)
  24. let main () =
  25. let filename = ref None in
  26. let verbose = ref 1 in
  27. let args = [
  28. ("-v", Arg.Int (fun i -> verbose := i), "Set verbosity")
  29. ] in
  30. let usage = "Usage: " ^ Sys.argv.(0) ^ " [ -v VERBOSITY ] FILE" in
  31. try
  32. Arg.parse args (fun s -> filename := Some s) usage;
  33. let _ = compile !filename !verbose in
  34. 0
  35. with CompileError msg ->
  36. prerr_endline ("Error: " ^ msg);
  37. -1
  38. let _ = exit (main ())