src/Pure/Isar/parse_spec.ML
changeset 60448 78f3c67bc35e
parent 60414 f25f2f2ba48c
child 60449 229bad93377e
equal deleted inserted replaced
60447:fa9bff5cd679 60448:78f3c67bc35e
    23   val locale_keyword: string parser
    23   val locale_keyword: string parser
    24   val locale_expression: bool -> Expression.expression parser
    24   val locale_expression: bool -> Expression.expression parser
    25   val context_element: Element.context parser
    25   val context_element: Element.context parser
    26   val statement: (Attrib.binding * (string * string list) list) list parser
    26   val statement: (Attrib.binding * (string * string list) list) list parser
    27   val if_prems: (Attrib.binding * (string * string list) list) list parser
    27   val if_prems: (Attrib.binding * (string * string list) list) list parser
       
    28   val obtains: Element.obtains parser
    28   val general_statement: (Element.context list * Element.statement) parser
    29   val general_statement: (Element.context list * Element.statement) parser
    29   val statement_keyword: string parser
    30   val statement_keyword: string parser
    30 end;
    31 end;
    31 
    32 
    32 structure Parse_Spec: PARSE_SPEC =
    33 structure Parse_Spec: PARSE_SPEC =
    70 val includes = Parse.$$$ "includes" |-- Parse.!!! (Scan.repeat1 (Parse.position Parse.xname));
    71 val includes = Parse.$$$ "includes" |-- Parse.!!! (Scan.repeat1 (Parse.position Parse.xname));
    71 
    72 
    72 val locale_fixes =
    73 val locale_fixes =
    73   Parse.and_list1 (Parse.binding -- Scan.option (Parse.$$$ "::" |-- Parse.typ) -- Parse.mixfix
    74   Parse.and_list1 (Parse.binding -- Scan.option (Parse.$$$ "::" |-- Parse.typ) -- Parse.mixfix
    74     >> (single o Parse.triple1) ||
    75     >> (single o Parse.triple1) ||
    75   Parse.params >> map (fn (x, y) => (x, y, NoSyn))) >> flat;
    76   Parse.params) >> flat;
    76 
    77 
    77 val locale_insts =
    78 val locale_insts =
    78   Scan.optional
    79   Scan.optional
    79     (Parse.$$$ "[" |-- Parse.!!! (Scan.repeat1 (Parse.maybe Parse.term) --| Parse.$$$ "]")) [] --
    80     (Parse.$$$ "[" |-- Parse.!!! (Scan.repeat1 (Parse.maybe Parse.term) --| Parse.$$$ "]")) [] --
    80   Scan.optional (Parse.where_ |-- Parse.and_list1 (opt_thm_name ":" -- Parse.prop)) [];
    81   Scan.optional (Parse.where_ |-- Parse.and_list1 (opt_thm_name ":" -- Parse.prop)) [];
   134 
   135 
   135 val if_prems = Scan.optional (Parse.$$$ "if" |-- Parse.!!! statement) [];
   136 val if_prems = Scan.optional (Parse.$$$ "if" |-- Parse.!!! statement) [];
   136 
   137 
   137 val obtain_case =
   138 val obtain_case =
   138   Parse.parbinding --
   139   Parse.parbinding --
   139     (Scan.optional (Parse.and_list1 Parse.params --| Parse.where_ >> flat) [] --
   140     (Scan.optional (Parse.and_list1 Parse.fixes --| Parse.where_ >> flat) [] --
   140       (Parse.and_list1 (Scan.repeat1 Parse.prop) >> flat));
   141       (Parse.and_list1 (Scan.repeat1 Parse.prop) >> flat));
       
   142 
       
   143 val obtains = Parse.enum1 "|" obtain_case;
   141 
   144 
   142 val general_statement =
   145 val general_statement =
   143   statement >> (fn x => ([], Element.Shows x)) ||
   146   statement >> (fn x => ([], Element.Shows x)) ||
   144   Scan.repeat context_element --
   147   Scan.repeat context_element --
   145    (Parse.$$$ "obtains" |-- Parse.!!! (Parse.enum1 "|" obtain_case) >> Element.Obtains ||
   148    (Parse.$$$ "obtains" |-- Parse.!!! obtains >> Element.Obtains ||
   146     Parse.$$$ "shows" |-- Parse.!!! statement >> Element.Shows);
   149     Parse.$$$ "shows" |-- Parse.!!! statement >> Element.Shows);
   147 
   150 
   148 val statement_keyword = Parse.$$$ "obtains" || Parse.$$$ "shows";
   151 val statement_keyword = Parse.$$$ "obtains" || Parse.$$$ "shows";
   149 
   152 
   150 end;
   153 end;