main.ml 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. Desug.phase;
  12. Print.phase;
  13. (*Typecheck.phase;*)
  14. (*Extern_vars.phase;*)
  15. (*Dim_reduce.phase;*)
  16. (*Bool_op.phase;*)
  17. (*Assemble.phase;*)
  18. (*Peephole.phase;*)
  19. (*Print.phase;*)
  20. ]
  21. (* Main function, returns exit status
  22. * () -> int *)
  23. let main () =
  24. let filename = ref None in
  25. let verbose = ref 1 in
  26. let args = [
  27. ("-v", Arg.Int (fun i -> verbose := i), "Set verbosity")
  28. ] in
  29. let usage = "Usage: " ^ Sys.argv.(0) ^ " [ -v VERBOSITY ] FILE" in
  30. try
  31. Arg.parse args (fun s -> filename := Some s) usage;
  32. let _ = compile !filename !verbose in
  33. 0
  34. with CompileError msg ->
  35. prerr_endline ("Error: " ^ msg);
  36. -1
  37. let _ = exit (main ())