X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tiger%2Fsrc%2Fexe%2Ftigerc.ml;h=708ff17c97bada7eba22402ffcfd2437ca3d1b2b;hb=28875fece2374a41510edbef416311c308695774;hp=9c901a7a5d22c5a1067035835c71d6474f7681fe;hpb=b828a6e7c28426ba6630d254cb3d9cbb8563765e;p=tiger.ml.git diff --git a/tiger/src/exe/tigerc.ml b/tiger/src/exe/tigerc.ml index 9c901a7..708ff17 100644 --- a/tiger/src/exe/tigerc.ml +++ b/tiger/src/exe/tigerc.ml @@ -1,16 +1,16 @@ -open Printf - let () = let path_to_program_file = Sys.argv.(1) in let ic = open_in path_to_program_file in let lexbuf = Lexing.from_channel ic in - let rec parse_and_print () = - match Tiger.Lexer.token lexbuf with - | None -> - () - | Some token -> - printf "%s\n" (Tiger.Parser.Token.to_string token); - parse_and_print () - in - parse_and_print (); + (match Tiger.Parser.program Tiger.Lexer.token lexbuf with + | exception Parsing.Parse_error -> + let + Lexing.({lex_curr_p = {pos_lnum; pos_bol; pos_cnum; _}; _}) = lexbuf + in + Printf.printf + "Syntax error in file %S, around line: %d, column: %d\n" + path_to_program_file pos_lnum (pos_cnum - pos_bol) + | absyn -> + print_endline (Tiger.Absyn.to_string absyn) + ); close_in ic;