X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Focaml%2Fcic_disambiguation%2FcicTextualParser2.ml;h=9a4340f9fb4b692a9c797e63de88875f57c5ff6f;hb=2e82e55532af778653ad53b563e4dc97cda20798;hp=a879ccf94ff1f380d011e71927250df3e3c46f3d;hpb=287dfa9d6e5213d4c578f5b3485fc52a86ce7934;p=helm.git diff --git a/helm/ocaml/cic_disambiguation/cicTextualParser2.ml b/helm/ocaml/cic_disambiguation/cicTextualParser2.ml index a879ccf94..9a4340f9f 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 -> @@ -398,11 +398,16 @@ EXTEND TacticAst.Decompose (loc, where) | IDENT "discriminate"; t = tactic_term -> TacticAst.Discriminate (loc, t) - | IDENT "elim"; t1 = tactic_term; - using = OPT [ "using"; using = tactic_term -> using ] -> - TacticAst.Elim (loc, t1, using) - | IDENT "elimType"; t = tactic_term -> - TacticAst.ElimType (loc, t) + | IDENT "elim"; what = tactic_term; + using = OPT [ "using"; using = tactic_term -> using ]; + OPT "names"; num = OPT [num = int -> num]; idents = OPT ident_list0 -> + let idents = match idents with None -> [] | Some idents -> idents in + TacticAst.Elim (loc, what, using, num, idents) + | IDENT "elimType"; what = tactic_term; + using = OPT [ "using"; using = tactic_term -> using ]; + OPT "names"; num = OPT [num = int -> num]; idents = OPT ident_list0 -> + let idents = match idents with None -> [] | Some idents -> idents in + TacticAst.ElimType (loc, what, using, num, idents) | IDENT "exact"; t = tactic_term -> TacticAst.Exact (loc, t) | IDENT "exists" -> @@ -473,25 +478,31 @@ EXTEND tactical: [ "sequence" LEFTA [ tacticals = LIST1 NEXT SEP SYMBOL ";" -> - TacticAst.Seq (loc, tacticals) + match tacticals with + [] -> assert false + | [tac] -> tac + | l -> TacticAst.Seq (loc, l) ] | "then" NONA - [ tac = tactical; + [ tac = tactical; SYMBOL ";"; PAREN "["; tacs = LIST0 tactical SEP SYMBOL "|"; PAREN "]" -> (TacticAst.Then (loc, tac, tacs)) ] | "loops" RIGHTA - [ [ IDENT "do" ]; count = int; tac = tactical -> + [ IDENT "do"; count = int; tac = tactical -> TacticAst.Do (loc, count, tac) - | [ IDENT "repeat" ]; tac = tactical -> + | IDENT "repeat"; tac = tactical -> TacticAst.Repeat (loc, tac) ] | "simple" NONA - [ IDENT "tries"; - PAREN "["; tacs = LIST0 tactical SEP SYMBOL ";"; PAREN "]" -> - TacticAst.Tries (loc, tacs) + [ IDENT "first"; + PAREN "["; tacs = LIST0 tactical SEP SYMBOL "|"; PAREN "]" -> + TacticAst.First (loc, tacs) | IDENT "try"; tac = NEXT -> TacticAst.Try (loc, tac) + | IDENT "solve"; + PAREN "["; tacs = LIST0 tactical SEP SYMBOL "|"; PAREN "]" -> + TacticAst.Solve (loc, tacs) | PAREN "("; tac = tactical; PAREN ")" -> tac | tac = tactic -> TacticAst.Tactic (loc, tac) ] @@ -574,12 +585,9 @@ EXTEND let ident = "\\("^alpha^ident_cont^"*\\|_"^ident_cont^"+\\)" in let rex = Str.regexp ("^"^ident^"$") in if Str.string_match rex id 0 then - let rex = Str.regexp - ("^\\(cic:/\\|theory:/\\)"^ident^ - "\\(/"^ident^"+\\)*\\(\\."^ident^"\\)+"^ - "\\(#xpointer("^ num^"\\(/"^num^"\\)+)\\)?$") - in - if Str.string_match rex uri 0 then + if (try ignore (UriManager.uri_of_string uri); true + with UriManager.IllFormedUri _ -> false) + then TacticAst.Ident_alias (id, uri) else raise (Parse_error (loc,sprintf "Not a valid uri: %s" uri)) @@ -635,14 +643,19 @@ 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) + | IDENT "default" ; what = QSTRING ; uris = LIST1 URI -> + let uris = List.map UriManager.uri_of_string uris in + TacticAst.Default (loc,what,uris) ]]; executable: [ @@ -718,7 +731,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;