| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- open Types
- open Stringify
- let main () =
- let usage status =
- prerr_endline ("usage: " ^ Sys.argv.(0) ^ " command [args]");
- prerr_endline "command:";
- prerr_endline " help show this help page";
- prerr_endline " echo TERM pretty-print a program";
- prerr_endline " norm TERM get the norm of a program";
- prerr_endline " i TERM get the ith instruction of a program";
- prerr_endline " dot TERM generate Dot code for a flow graph";
- prerr_endline "input program syntax:";
- prerr_endline " - write star (*) instead of omega sign";
- prerr_endline " - write dollar sign ($) instead of pound sign";
- prerr_endline "";
- prerr_endline "A TERM argument may also be omitted and passed on stdin";
- prerr_endline "instead for convenient use of UNIX pipes, e.g.:";
- prerr_endline "$ ./pga echo 'a;b;(c)*' | ./pga dot | dot -T png | display";
- exit status
- in
- let argc = Array.length Sys.argv in
- if argc = 1 then usage 1;
- let input_term i =
- let lexbuf =
- if argc > i
- then Lexing.from_string Sys.argv.(i)
- else Lexing.from_channel stdin
- in
- Parse.parse_with_error lexbuf
- in
- begin
- try
- match Sys.argv.(1) with
- | "help" ->
- usage 0
- | "echo" ->
- print_endline (string_of_program (input_term 2))
- | "norm" | "i" | "dot" ->
- raise (Failure "not implemented")
- | _ ->
- usage 1
- with
- | FatalError msg ->
- prerr_endline msg;
- exit 1
- end;
- exit 0
- let () = main ()
|