X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tiger%2Fsrc%2Fexe%2Ftigerc.ml;h=fd58a833daf24d8ed4b548715b9a85c644e00303;hb=c7598faf75e8c27dcf2019dac47e56841af1f569;hp=77eafb42647b7111b188309e2dc4b28abbbd649c;hpb=78c9eca51ebc5150d79f84e255a57bb9df9f82fc;p=tiger.ml.git diff --git a/tiger/src/exe/tigerc.ml b/tiger/src/exe/tigerc.ml index 77eafb4..fd58a83 100644 --- a/tiger/src/exe/tigerc.ml +++ b/tiger/src/exe/tigerc.ml @@ -1,15 +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 () = - let token = Tiger.Lexer.token lexbuf in - printf "%s\n" (Tiger.Parser.Token.to_string token); - match token with - | Tiger.Parser.Token.EOF -> () - | _ -> 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) + | program -> + print_endline program + ); close_in ic;