diff options
author | Alex AUVOLAT <alexis211@gmail.com> | 2013-10-29 17:42:34 +0100 |
---|---|---|
committer | Alex AUVOLAT <alexis211@gmail.com> | 2013-10-29 17:42:34 +0100 |
commit | 8f1093f0e00f9b1df7ce343a879303fd56a95d08 (patch) | |
tree | 6aaf0720c2093ba05cb81ba7f95b4e9808b3ecab /main.ml | |
download | LPC-Projet-8f1093f0e00f9b1df7ce343a879303fd56a95d08.tar.gz LPC-Projet-8f1093f0e00f9b1df7ce343a879303fd56a95d08.zip |
First commit.
Diffstat (limited to 'main.ml')
-rw-r--r-- | main.ml | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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 |