pga.ml 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 " utf8 TERM print a program in UTF-8 format";
  10. prerr_endline " latex TERM print latex source for a program";
  11. prerr_endline " norm TERM get the norm of a program";
  12. prerr_endline " i I TERM get the Ith instruction of a program";
  13. prerr_endline " dot TERM generate Dot code for a flow graph";
  14. prerr_endline "input program syntax:";
  15. prerr_endline " - write star (*) instead of omega sign";
  16. prerr_endline " - write dollar sign ($) instead of pound sign";
  17. prerr_endline "";
  18. prerr_endline "A TERM argument may also be omitted and passed on stdin";
  19. prerr_endline "instead for convenient use of UNIX pipes, e.g.:";
  20. prerr_endline "$ ./pga echo 'a;b;(c)*' | ./pga dot | dot -T png | display";
  21. exit status
  22. in
  23. let argc = Array.length Sys.argv in
  24. if argc = 1 then usage 1;
  25. let input_term i =
  26. let lexbuf =
  27. if argc > i
  28. then Lexing.from_string Sys.argv.(i)
  29. else Lexing.from_channel stdin
  30. in
  31. Parse.parse_with_error lexbuf
  32. in
  33. begin
  34. try
  35. match Sys.argv.(1) with
  36. | "help" ->
  37. usage 0
  38. | "echo" ->
  39. print_endline (string_of_program_ascii (input_term 2))
  40. | "utf8" ->
  41. print_endline (string_of_program_utf8 (input_term 2))
  42. | "latex" ->
  43. print_endline (string_of_program_latex (input_term 2))
  44. | "norm" | "i" | "dot" ->
  45. raise (Failure "not implemented")
  46. | _ ->
  47. usage 1
  48. with
  49. | FatalError msg ->
  50. prerr_endline msg;
  51. exit 1
  52. end;
  53. exit 0
  54. let () = main ()