X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_notation%2Ftest_parser.ml;h=61fd56d73196b90071aa427c59931d5fc8888ca2;hb=31d7f139796d6597915cd430baf37552dc26511c;hp=21315c77fbd9d8b9febeaef5a32d7617dc5dbe4c;hpb=116fba9ef554e81ff483285638c05e8c9c592e65;p=helm.git diff --git a/helm/ocaml/cic_notation/test_parser.ml b/helm/ocaml/cic_notation/test_parser.ml index 21315c77f..61fd56d73 100644 --- a/helm/ocaml/cic_notation/test_parser.ml +++ b/helm/ocaml/cic_notation/test_parser.ml @@ -25,25 +25,39 @@ open Printf +(* cut and past from CicAst.loc_of_floc *) +let loc_of_floc = function + | { Lexing.pos_cnum = loc_begin }, { Lexing.pos_cnum = loc_end } -> + (loc_begin, loc_end) + let _ = - let ic = stdin in - try - while true do - let line = input_line ic in - let istream = Stream.of_string line in - try - let _ = CicNotationParser.parse_level1_pattern istream in - print_endline "ok" - with - | CicNotationParser.Parse_error (floc, msg) -> - eprintf "parse error: %s\n" msg; flush stderr -(* let (x, y) = CicAst.loc_of_floc floc in*) -(* let before = String.sub line 0 x in*) -(* let error = String.sub line x (y - x) in*) -(* let after = String.sub line y (String.length line - y) in*) -(* eprintf "%s%s%s\n" before error after;*) -(* prerr_endline (sprintf "at character %d-%d: %s" x y msg)*) - done - with End_of_file -> - close_in ic + let level = ref ~-1 in + let arg_spec = [ "-level", Arg.Set_int level, "set the notation level" ] in + let usage = "test_parser -level { 1 | 2 | 3 }" in + Arg.parse arg_spec (fun _ -> raise (Arg.Bad usage)) usage; + let parse_fun = + match !level with + | 1 -> CicNotationParser.parse_syntax_pattern + | 2 -> CicNotationParser.parse_ast_pattern + | _ -> Arg.usage arg_spec usage; exit 1 + in + let ic = stdin in + try + printf "Parsing notation level %d\n" !level; flush stdout; + while true do + let line = input_line ic in + let istream = Stream.of_string line in + try + let _ = parse_fun istream in + print_endline "ok" + with CicNotationParser.Parse_error (floc, msg) -> + let (x, y) = loc_of_floc floc in + let before = String.sub line 0 x in + let error = String.sub line x (y - x) in + let after = String.sub line y (String.length line - y) in + eprintf "%s%s%s\n" before error after; + prerr_endline (sprintf "at character %d-%d: %s" x y msg) + done + with End_of_file -> + close_in ic