raise (HExtlib.Localized
(floc,CicNotationParser.Parse_error (Printexc.to_string exn)))
-let parse_statement grafite_parser lexbuf =
+type parsable = Grammar.parsable
+
+let parsable_statement status buf =
+ let grammar = CicNotationParser.level2_ast_grammar status in
+ Grammar.parsable grammar (Obj.magic 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) parsable))
let add_raw_attribute ~text t = N.AttributedTerm (`Raw text, t)
| 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
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 "@"; num = OPT NUMBER; l = LIST0 tactic_term ->
- G.NTactic(loc,[G.NConstructor (loc, (match num with None -> None | Some x -> Some (int_of_string x)),l)])
+ | 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)])
| IDENT "cut"; t = tactic_term -> G.NTactic(loc,[G.NCut (loc, t)])
(* | IDENT "discriminate"; t = tactic_term -> G.NDiscriminate (loc, t)
| IDENT "subst"; t = tactic_term -> G.NSubst (loc, t) *)
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
]];
paramspec = OPT inverter_param_list ;
outsort = OPT [ SYMBOL ":" ; outsort = term -> outsort ] ->
G.NInverter (loc,name,indty,paramspec,outsort)
- | NLETCOREC ; defs = let_defs ->
+ | LETCOREC ; defs = let_defs ->
nmk_rec_corec `CoInductive defs loc
- | NLETREC ; defs = let_defs ->
+ | LETREC ; defs = let_defs ->
nmk_rec_corec `Inductive defs loc
| IDENT "inductive"; spec = inductive_spec ->
let (params, ind_types) = spec in
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