From 8f1093f0e00f9b1df7ce343a879303fd56a95d08 Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Tue, 29 Oct 2013 17:42:34 +0100 Subject: First commit. --- main.ml | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 main.ml (limited to 'main.ml') diff --git a/main.ml b/main.ml new file mode 100644 index 0000000..8d78987 --- /dev/null +++ b/main.ml @@ -0,0 +1,44 @@ +open Format +open Lexing + +let ifile = ref "" + +let set_var v s = v := s + +let usage = "usage: mini-cpp [options] file.cpp" + +let localisation pos = + let l = pos.pos_lnum in + let c = pos.pos_cnum - pos.pos_bol + 1 in + eprintf "File \"%s\", line %d, characters %d-%d:\n" + !ifile l (c-1) c + +let options = [] + +let () = + Arg.parse options (set_var ifile) usage; + + if !ifile = "" then ( + eprintf "No input file\n@?"; + exit 1); + + if not (Filename.check_suffix !ifile ".cpp") then ( + eprintf "Input files must have suffix .cpp\n@?"; + Arg.usage options usage; + exit 1); + + let f = open_in !ifile in + let buf = Lexing.from_channel f in + + try + while true do + print_string (Pretty.token_str (Lexer.token buf)); + print_string "\n" + done + with + | Lexer.End_of_file -> + exit 0 + | Lexer.Lexing_error s -> + localisation (Lexing.lexeme_start_p buf); + eprintf "Lexical analysis error: %s@." s; + exit 1 -- cgit v1.2.3