let print_program (p: program) (out: out_channel) = match p with
Program(dlist,plist,c) -> output_string out
("Program(\n\t" ^ (print_string_list (List.map print_dec dlist)) ^ "\n" ^
(print_string_list (List.map print_proc plist)) ^ "\n" ^
(print_cmd c) ^ "\n)")
| SynError -> output_string out "SynError"