src/Pure/Isar/spec_parse.ML
changeset 24869 bad2b2be1f24
parent 24014 d3873741678d
child 25094 ba43514068fd
--- a/src/Pure/Isar/spec_parse.ML	Sat Oct 06 16:50:08 2007 +0200
+++ b/src/Pure/Isar/spec_parse.ML	Sat Oct 06 16:50:09 2007 +0200
@@ -23,11 +23,9 @@
     ((bstring * Attrib.src list) * (thmref * Attrib.src list) list) list * token list
   val locale_mixfix: token list -> mixfix * token list
   val locale_fixes: token list -> (string * string option * mixfix) list * token list
-  val locale_insts: token list ->
-    (string option list * string list) * token list
+  val locale_insts: token list -> (string option list * string list) * token list
+  val class_expr: token list -> string list * token list
   val locale_expr: token list -> Locale.expr * token list
-  val locale_expr_unless: (token list -> 'a * token list) ->
-    token list -> Locale.expr * token list
   val locale_keyword: token list -> string * token list
   val locale_element: token list -> Element.context Locale.element * token list
   val context_element: token list -> Element.context * token list
@@ -108,21 +106,22 @@
   P.$$$ "notes" |-- P.!!! (P.and_list1 (opt_thm_name "=" -- xthms1))
     >> (curry Element.Notes "");
 
-fun plus1 test scan =
+fun plus1_unless test scan =
   scan -- Scan.repeat (P.$$$ "+" |-- Scan.unless test (P.!!! scan)) >> op ::;
 
 val rename = P.name -- Scan.option P.mixfix;
 
-fun expr test =
+in
+
+val class_expr = plus1_unless loc_keyword P.xname;
+
+val locale_expr =
   let
     fun expr2 x = (P.xname >> Locale.Locale || P.$$$ "(" |-- P.!!! (expr0 --| P.$$$ ")")) x
     and expr1 x = (expr2 -- Scan.repeat1 (P.maybe rename) >> Locale.Rename || expr2) x
-    and expr0 x = (plus1 test expr1 >> (fn [e] => e | es => Locale.Merge es)) x;
+    and expr0 x = (plus1_unless loc_keyword expr1 >> (fn [e] => e | es => Locale.Merge es)) x;
   in expr0 end;
-in
 
-val locale_expr_unless = expr
-val locale_expr = expr loc_keyword;
 val locale_keyword = loc_keyword;
 
 val locale_element = P.group "locale element"