X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=inline;f=matita%2Fcomponents%2Fgrafite_parser%2FgrafiteParser.ml;h=aeb0080c4fa163023069d8d2e681fffccf46933c;hb=7f72de8dea7fc5b9472ba63fb020419efd7cd183;hp=bdd65f34dd2ac2e8c8f56994e1246c526d776ac2;hpb=84a54f8183032c7ca35bfa3ce8950246f9cad8e3;p=helm.git diff --git a/matita/components/grafite_parser/grafiteParser.ml b/matita/components/grafite_parser/grafiteParser.ml index bdd65f34d..aeb0080c4 100644 --- a/matita/components/grafite_parser/grafiteParser.ml +++ b/matita/components/grafite_parser/grafiteParser.ml @@ -42,9 +42,17 @@ let exc_located_wrapper f = raise (HExtlib.Localized (floc,CicNotationParser.Parse_error (Printexc.to_string exn))) -let parse_statement grafite_parser lexbuf = +type parsable = Grammar.parsable * Ulexing.lexbuf + +let parsable_statement status buf = + let grammar = CicNotationParser.level2_ast_grammar status in + Grammar.parsable grammar (Obj.magic buf), buf + +let parse_statement grafite_parser parsable = exc_located_wrapper - (fun () -> (Grammar.Entry.parse (Obj.magic grafite_parser) (Obj.magic lexbuf))) + (fun () -> (Grammar.Entry.parse_parsable (Obj.magic grafite_parser) (fst parsable))) + +let strm_of_parsable (_,buf) = buf let add_raw_attribute ~text t = N.AttributedTerm (`Raw text, t) @@ -160,7 +168,10 @@ EXTEND | N.Implicit _ -> false | N.UserInput -> true | _ -> raise (Invalid_argument "malformed target parameter list 1")) l - | _ -> raise (Invalid_argument ("malformed target parameter list 2\n" ^ NotationPp.pp_term params)) ] + | _ -> + (*CSC: new NCicPp.status is the best I can do here without changing the + result type *) + raise (Invalid_argument ("malformed target parameter list 2\n" ^ NotationPp.pp_term (new NCicPp.status) params)) ] ]; direction: [ [ SYMBOL ">" -> `LeftToRight @@ -218,6 +229,8 @@ EXTEND G.NTactic(loc,[G.NCases (loc, what, where)]) | IDENT "change"; what = pattern_spec; "with"; with_what = tactic_term -> G.NTactic(loc,[G.NChange (loc, what, with_what)]) + | SYMBOL "-"; ids = LIST1 IDENT -> + G.NTactic(loc,[G.NClear (loc, ids)]) | (*SYMBOL "^"*)PLACEHOLDER; num = OPT NUMBER; l = OPT [ SYMBOL "{"; l = LIST1 tactic_term; SYMBOL "}" -> l ] -> G.NTactic(loc,[G.NConstructor (loc, (match num with None -> None | Some x -> Some (int_of_string x)),match l with None -> [] | Some l -> l)]) @@ -516,6 +529,8 @@ EXTEND include_command: [ [ IDENT "include" ; path = QSTRING -> loc,path,G.WithPreferences + | IDENT "include" ; IDENT "alias"; path = QSTRING -> + loc,path,G.OnlyPreferences | IDENT "include'" ; path = QSTRING -> loc,path,G.WithoutPreferences ]]; @@ -626,10 +641,10 @@ class type g_status = method parser_db: db end -class status = +class virtual status = object(self) inherit CicNotationParser.status ~keywords:[] - val mutable db = None + val mutable db = None (* mutable only to initialize it :-( *) method parser_db = match db with None -> assert false | Some x -> x method set_parser_db v = {< db = Some v >} method set_parser_status