src/Pure/Thy/thy_parse.ML
changeset 636 31b36d96f7d6
parent 587 3ba470399605
child 656 ec05d2fdfeee
equal deleted inserted replaced
635:034fda1c4873 636:31b36d96f7d6
    22   val --$$ : ('a -> 'b * token list) * string -> 'a -> 'b * token list
    22   val --$$ : ('a -> 'b * token list) * string -> 'a -> 'b * token list
    23   val ident: token list -> string * token list
    23   val ident: token list -> string * token list
    24   val long_ident: token list -> string * token list
    24   val long_ident: token list -> string * token list
    25   val long_id: token list -> string * token list
    25   val long_id: token list -> string * token list
    26   val type_var: token list -> string * token list
    26   val type_var: token list -> string * token list
       
    27   val type_args: token list -> string list * token list
    27   val nat: token list -> string * token list
    28   val nat: token list -> string * token list
    28   val string: token list -> string * token list
    29   val string: token list -> string * token list
    29   val verbatim: token list -> string * token list
    30   val verbatim: token list -> string * token list
    30   val empty: 'a -> 'b list * 'a
    31   val empty: 'a -> 'b list * 'a
    31   val optional: ('a -> 'b * 'a) -> 'b -> 'a -> 'b * 'a
    32   val optional: ('a -> 'b * 'a) -> 'b -> 'a -> 'b * 'a
    41     -> token list -> 'a list * token list
    42     -> token list -> 'a list * token list
    42   val name: token list -> string * token list
    43   val name: token list -> string * token list
    43   val sort: token list -> string * token list
    44   val sort: token list -> string * token list
    44   val opt_infix: token list -> string * token list
    45   val opt_infix: token list -> string * token list
    45   val opt_mixfix: token list -> string * token list
    46   val opt_mixfix: token list -> string * token list
       
    47   val opt_witness: token list -> string * token list
    46   type syntax
    48   type syntax
    47   val make_syntax: string list ->
    49   val make_syntax: string list ->
    48     (string * (token list -> (string * string) * token list)) list -> syntax
    50     (string * (token list -> (string * string) * token list)) list -> syntax
    49   val parse_thy: syntax -> string -> string -> string
    51   val parse_thy: syntax -> string -> string -> string
    50   val section: string -> string -> (token list -> string * token list)
    52   val section: string -> string -> (token list -> string * token list)
    54     -> (string * (token list -> (string * string) * token list))
    56     -> (string * (token list -> (string * string) * token list))
    55   val pure_keywords: string list
    57   val pure_keywords: string list
    56   val pure_sections:
    58   val pure_sections:
    57     (string * (token list -> (string * string) * token list)) list
    59     (string * (token list -> (string * string) * token list)) list
    58   (*items for building strings*)
    60   (*items for building strings*)
    59   val parens	: string -> string   
    61   val parens: string -> string   
    60   val brackets	: string -> string   
    62   val brackets: string -> string   
    61   val mk_list	: string list -> string   
    63   val mk_list: string list -> string   
    62   val mk_big_list : string list -> string   
    64   val mk_big_list: string list -> string   
    63   val mk_pair	: string * string -> string   
    65   val mk_pair: string * string -> string   
    64   val mk_triple	: string * string * string -> string   
    66   val mk_triple: string * string * string -> string   
    65 end;
    67 end;
    66 
    68 
    67 functor ThyParseFun(structure Symtab: SYMTAB and ThyScan: THY_SCAN): THY_PARSE =
    69 functor ThyParseFun(structure Symtab: SYMTAB and ThyScan: THY_SCAN): THY_PARSE =
    68 struct
    70 struct
    69 
    71 
   327   optional ("(" $$-- list1 axm_or_thm --$$ ")") [] --
   329   optional ("(" $$-- list1 axm_or_thm --$$ ")") [] --
   328   optional (verbatim >> (parens o cat "Some" o parens)) "None"
   330   optional (verbatim >> (parens o cat "Some" o parens)) "None"
   329   >> mk_witness;
   331   >> mk_witness;
   330 
   332 
   331 val instance_decl =
   333 val instance_decl =
   332   (name --$$ "<" -- name >> (pair "|> add_inst_subclass" o mk_pair) ||
   334   (name --$$ "<" -- name >> (pair "|> AxClass.add_inst_subclass" o mk_pair) ||
   333     name --$$ "::" -- arity >> (pair "|> add_inst_arity" o mk_triple2))
   335     name --$$ "::" -- arity >> (pair "|> AxClass.add_inst_arity" o mk_triple2))
   334   -- opt_witness
   336   -- opt_witness
   335   >> (fn ((x, y), z) => (cat_lines [x, y, z], ""));
   337   >> (fn ((x, y), z) => (cat_lines [x, y, z], ""));
   336 
   338 
   337 
   339 
   338 
   340 
   457   section "translations" "|> add_trrules" trans_decls,
   459   section "translations" "|> add_trrules" trans_decls,
   458   section "MLtrans" "|> add_trfuns" mltrans,
   460   section "MLtrans" "|> add_trfuns" mltrans,
   459   ("MLtext", verbatim >> rpair ""),
   461   ("MLtext", verbatim >> rpair ""),
   460   axm_section "rules" "|> add_axioms" axiom_decls,
   462   axm_section "rules" "|> add_axioms" axiom_decls,
   461   axm_section "defs" "|> add_defs" axiom_decls,
   463   axm_section "defs" "|> add_defs" axiom_decls,
   462   axm_section "axclass" "|> add_axclass" axclass_decl,
   464   axm_section "axclass" "|> AxClass.add_axclass" axclass_decl,
   463   ("instance", instance_decl)];
   465   ("instance", instance_decl)];
   464 
   466 
   465 
   467 
   466 end;
   468 end;
   467 
   469