X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;ds=sidebyside;f=tiger%2Fsrc%2Fexe%2Ftigerc.ml;h=fd58a833daf24d8ed4b548715b9a85c644e00303;hb=543d34200923ddd3fedc247b7d663ee46733f0f1;hp=9c901a7a5d22c5a1067035835c71d6474f7681fe;hpb=cb00a20dd1203e44609285b3e14e0e28cef2c06c;p=tiger.ml.git diff --git a/tiger/src/exe/tigerc.ml b/tiger/src/exe/tigerc.ml index 9c901a7..fd58a83 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) + | program -> + print_endline program + ); close_in ic;