pga.ml 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. open Types
  2. open Stringify
  3. let main () =
  4. let usage status =
  5. prerr_endline ("usage: " ^ Sys.argv.(0) ^ " command [args]");
  6. prerr_endline "command:";
  7. prerr_endline " help show this help page";
  8. prerr_endline " echo TERM pretty-print a program";
  9. prerr_endline "input program syntax:";
  10. prerr_endline " - write star (*) instead of omega sign";
  11. prerr_endline " - write dollar sign ($) instead of pound sign";
  12. prerr_endline "";
  13. prerr_endline "A TERM argument may also be omitted and passed on stdin";
  14. prerr_endline "instead for convenient use of UNIX pipes";
  15. exit status
  16. in
  17. let argc = Array.length Sys.argv in
  18. if argc = 1 then usage 1;
  19. let input_term i =
  20. let lexbuf =
  21. if argc > i
  22. then Lexing.from_string Sys.argv.(i)
  23. else Lexing.from_channel stdin
  24. in
  25. Parse.parse_with_error lexbuf
  26. in
  27. begin
  28. try
  29. match Sys.argv.(1) with
  30. | "help" ->
  31. usage 0
  32. | "echo" ->
  33. print_endline (string_of_program (input_term 2))
  34. | _ ->
  35. usage 1
  36. with
  37. | FatalError msg ->
  38. prerr_endline msg;
  39. exit 1
  40. end;
  41. exit 0
  42. let () = main ()