]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_notation/test_lexer.ml
snapshot, notably:
[helm.git] / helm / ocaml / cic_notation / test_lexer.ml
index 7672d3070d3d400ed702d26cf29e105e490e36ba..b41f7f6b8e34355f31d290840eb497b95fae9dba 100644 (file)
  * http://helm.cs.unibo.it/
  *)
 
-let ic =
+let _ =
+  let level = ref ~-1 in
+  let ic = ref stdin in
+  let arg_spec = [ "-level", Arg.Set_int level, "set the notation level" ] in
+  let usage = "test_lexer -level { 1 | 2 | 3 } [ file ]" in
+  let open_file fname =
+    if !ic <> stdin then close_in !ic;
+    ic := open_in fname
+  in
+  Arg.parse arg_spec open_file usage;
+  let lexer =
+    match !level with
+    | 1 -> CicNotationLexer.syntax_pattern_lexer
+    | 2 -> CicNotationLexer.ast_pattern_lexer
+    | _ -> Arg.usage arg_spec usage; exit 1
+  in
+  let token_stream = fst (lexer.Token.tok_func (Stream.of_channel !ic)) in
+  Printf.printf "Lexing notation level %d\n" !level; flush stdout;
+  let rec dump () =
+    let (a,b) = Stream.next token_stream in
+    if a = "EOI" then raise Stream.Failure;
+    print_endline (Printf.sprintf "%s '%s'" a b);
+    dump ()
+  in
   try
-    open_in Sys.argv.(1)
-  with Invalid_argument _ -> stdin
-in
-let token_stream =
-  fst (CicNotationLexer.level1_lexer.Token.tok_func (Stream.of_channel ic))
-in
-let rec dump () =
-  let (a,b) = Stream.next token_stream in
-  if a = "EOI" then raise Stream.Failure;
-  print_endline (Printf.sprintf "%s '%s'" a b);
-  dump ()
-in
-try
-  dump ()
-with Stream.Failure -> ()
+    dump ()
+  with Stream.Failure -> ()
+