X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fcomponents%2Fgrafite_parser%2FgrafiteParser.ml;h=16bc6c32ebe60a3efd8537a23ed9a42b4d483de2;hb=59e3ddd15ee1983027e8929c073b06a80d523875;hp=492274f97ec50ff49196c271d24efdd949976bfd;hpb=894d518aa760c9f816ddb0dc2b3fa88e1fe20a94;p=helm.git diff --git a/matita/components/grafite_parser/grafiteParser.ml b/matita/components/grafite_parser/grafiteParser.ml index 492274f97..16bc6c32e 100644 --- a/matita/components/grafite_parser/grafiteParser.ml +++ b/matita/components/grafite_parser/grafiteParser.ml @@ -42,15 +42,17 @@ let exc_located_wrapper f = raise (HExtlib.Localized (floc,CicNotationParser.Parse_error (Printexc.to_string exn))) -type parsable = Grammar.parsable +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) + Grammar.parsable grammar (Obj.magic buf), buf let parse_statement grafite_parser parsable = exc_located_wrapper - (fun () -> (Grammar.Entry.parse_parsable (Obj.magic grafite_parser) parsable)) + (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) @@ -534,7 +536,10 @@ EXTEND ]]; grafite_ncommand: [ [ - IDENT "qed" -> G.NQed loc + IDENT "qed" ; b = OPT SYMBOL "-" -> + let b = match b with None -> true | Some _ -> false in + if not b then prerr_endline "Should not index"; + G.NQed (loc,b) | nflavour = ntheorem_flavour; name = IDENT; SYMBOL ":"; typ = term; body = OPT [ SYMBOL <:unicode> (* ≝ *); body = term -> body ] -> G.NObj (loc, N.Theorem (nflavour, name, typ, body,`Regular)) @@ -574,11 +579,14 @@ EXTEND G.NUnivConstraint (loc,u1,u2) | IDENT "unification"; IDENT "hint"; n = int; t = tactic_term -> G.UnificationHint (loc, t, n) - | IDENT "coercion"; name = IDENT; SYMBOL ":"; ty = term; + | IDENT "coercion"; name = IDENT; + compose = OPT [ IDENT "nocomposites" -> () ]; + SYMBOL ":"; ty = term; SYMBOL <:unicode>; t = term; "on"; id = [ IDENT | PIDENT ]; SYMBOL ":"; source = term; "to"; target = term -> - G.NCoercion(loc,name,t,ty,(id,source),target) + let compose = compose = None in + G.NCoercion(loc,name,compose,t,ty,(id,source),target) | IDENT "record" ; (params,name,ty,fields) = record_spec -> G.NObj (loc, N.Record (params,name,ty,fields)) | IDENT "copy" ; s = IDENT; IDENT "from"; u = URI; "with";