X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_disambiguation%2FcicTextualParser2.ml;h=760b34a423ac926cca31c9f4cc35e0893048e01d;hb=b6101c89b49ad1df07df62ec661c8b30bda99a2a;hp=e59e139872e252751a2168e5f58aabc866374a68;hpb=44d337f8d772c6895d310a1b1d62770c3355fe03;p=helm.git diff --git a/helm/ocaml/cic_disambiguation/cicTextualParser2.ml b/helm/ocaml/cic_disambiguation/cicTextualParser2.ml index e59e13987..760b34a42 100644 --- a/helm/ocaml/cic_disambiguation/cicTextualParser2.ml +++ b/helm/ocaml/cic_disambiguation/cicTextualParser2.ml @@ -181,7 +181,7 @@ EXTEND [ defs = LIST1 [ name = IDENT; args = LIST1 [arg = arg -> arg]; - index_name = OPT [ IDENT "on"; idx = IDENT -> idx ]; + index_name = OPT [ "on"; idx = IDENT -> idx ]; ty = OPT [ SYMBOL ":" ; t = term -> t ]; SYMBOL <:unicode> (* ≝ *); t1 = term -> @@ -327,31 +327,41 @@ EXTEND | [ IDENT "whd" ] -> `Whd | [ IDENT "normalize" ] -> `Normalize ] ]; + sequent_pattern_spec : [ + [ hyp_paths = + LIST0 + [ id = IDENT ; + path = OPT [SYMBOL ":" ; path = term -> path ] -> + (id,match path with Some p -> p | None -> CicAst.UserInput) ] + SEP SYMBOL ";"; + goal_path = OPT [ SYMBOL <:unicode>; term = term -> term ] -> + let goal_path = + match goal_path with + None -> CicAst.UserInput + | Some goal_path -> goal_path + in + hyp_paths,goal_path + ] + ]; pattern_spec: [ - [ wanted = OPT term; - hyp_paths_and_goal_path = - OPT [ - "in"; - hyp_paths = - LIST0 - [ id = IDENT ; - path = OPT [SYMBOL ":" ; path = term -> path ] -> - (id,match path with Some p -> p | None -> CicAst.UserInput) ] - SEP SYMBOL ";"; - goal_path = OPT [ SYMBOL <:unicode>; term = term -> term ] -> - let goal_path = - match goal_path with - None -> CicAst.UserInput - | Some goal_path -> goal_path - in - hyp_paths,goal_path - ] -> - let hyp_paths,goal_path = - match hyp_paths_and_goal_path with - None -> [], CicAst.UserInput - | Some (hyp_paths,goal_path) -> hyp_paths,goal_path + [ res = OPT [ + "in"; + wanted_and_sps = + [ "match" ; wanted = term ; + sps = OPT [ "in"; sps = sequent_pattern_spec -> sps ] -> + Some wanted,sps + | sps = sequent_pattern_spec -> + None,Some sps + ] -> + let wanted,hyp_paths,goal_path = + match wanted_and_sps with + wanted,None -> wanted, [], CicAst.UserInput + | wanted,Some (hyp_paths,goal_path) -> wanted,hyp_paths,goal_path in - wanted, hyp_paths, goal_path ] + wanted, hyp_paths, goal_path ] -> + match res with + None -> None,[],CicAst.UserInput + | Some ps -> ps] ]; direction: [ [ SYMBOL ">" -> `LeftToRight @@ -399,7 +409,13 @@ EXTEND TacticAst.Exists loc | IDENT "fail" -> TacticAst.Fail loc | IDENT "fold"; kind = reduction_kind; t = tactic_term; p = pattern_spec -> - TacticAst.Fold (loc, kind, t, p) + let (pt,_,_) = p in + if pt <> None then + raise + (Parse_error + (loc,"the pattern cannot specify the term to replace, only its paths in the hypotheses and in the conclusion")) + else + TacticAst.Fold (loc, kind, t, p) | IDENT "fourier" -> TacticAst.Fourier loc | IDENT "fwd"; hyp = IDENT; idents = OPT ident_list0 -> @@ -619,14 +635,16 @@ EXTEND ind_types in TacticAst.Obj (loc,TacticAst.Inductive (params, ind_types)) - | [ IDENT "coercion" ] ; name = IDENT -> + | IDENT "coercion" ; name = IDENT -> TacticAst.Coercion (loc, CicAst.Ident (name,Some [])) - | [ IDENT "coercion" ] ; name = URI -> + | IDENT "coercion" ; name = URI -> TacticAst.Coercion (loc, CicAst.Uri (name,Some [])) - | [ IDENT "alias" ]; spec = alias_spec -> + | IDENT "alias" ; spec = alias_spec -> TacticAst.Alias (loc, spec) - | [ IDENT "record" ]; (params,name,ty,fields) = record_spec -> + | IDENT "record" ; (params,name,ty,fields) = record_spec -> TacticAst.Obj (loc,TacticAst.Record (params,name,ty,fields)) + | IDENT "include" ; path = QSTRING -> + TacticAst.Include (loc,path) ]]; executable: [ @@ -702,7 +720,8 @@ module EnvironmentP3 = s :: acc) env [] in - String.concat "\n" (List.sort compare aliases) + String.concat "\n" (List.sort compare aliases) ^ + (if aliases = [] then "" else "\n") EXTEND GLOBAL: aliases;