unified Args.T with OuterLex.token, renamed some operations;
authorwenzelm
Sat, 09 Aug 2008 22:43:54 +0200
changeset 27812 af8edf3ab68c
parent 27811 44bc67675210
child 27813 96fbe385a0d0
unified Args.T with OuterLex.token, renamed some operations; unified version of thm_sel (formerly in args.ML and spec_parse.ML);
src/Pure/Isar/attrib.ML
--- a/src/Pure/Isar/attrib.ML	Sat Aug 09 22:43:53 2008 +0200
+++ b/src/Pure/Isar/attrib.ML	Sat Aug 09 22:43:54 2008 +0200
@@ -27,6 +27,7 @@
     attribute * (Context.generic * Args.T list)) -> src -> attribute
   val no_args: attribute -> src -> attribute
   val add_del_args: attribute -> attribute -> src -> attribute
+  val thm_sel: Args.T list -> Facts.interval list * Args.T list
   val thm: Context.generic * Args.T list -> thm * (Context.generic * Args.T list)
   val thms: Context.generic * Args.T list -> thm list * (Context.generic * Args.T list)
   val multi_thm: Context.generic * Args.T list -> thm list * (Context.generic * Args.T list)
@@ -44,6 +45,9 @@
 structure Attrib: ATTRIB =
 struct
 
+structure T = OuterLex;
+structure P = OuterParse;
+
 type src = Args.src;
 
 
@@ -154,6 +158,11 @@
 
 (** parsing attributed theorems **)
 
+val thm_sel = P.$$$ "(" |-- P.list1
+ (P.nat --| P.minus -- P.nat >> Facts.FromTo ||
+  P.nat --| P.minus >> Facts.From ||
+  P.nat >> Facts.Single) --| P.$$$ ")";
+
 local
 
 val fact_name = Args.internal_fact >> K "<fact>" || Args.name;
@@ -173,7 +182,7 @@
     ||
     (Scan.ahead Args.alt_name -- Args.named_fact get_fact
       >> (fn (s, fact) => ("", Facts.Fact s, fact))
-    || Scan.ahead fact_name -- Args.position (Args.named_fact get_named) -- Scan.option Args.thm_sel
+    || Scan.ahead fact_name -- P.position (Args.named_fact get_named) -- Scan.option thm_sel
       >> (fn ((name, (fact, pos)), sel) => (name, Facts.Named ((name, pos), sel), fact)))
     -- Args.opt_attribs (intern thy) >> (fn ((name, thmref, fact), srcs) =>
       let
@@ -197,7 +206,7 @@
 
 (* internal *)
 
-fun internal att = Args.src (("Pure.attribute", [Args.mk_attribute att]), Position.none);
+fun internal att = Args.src (("Pure.attribute", [T.mk_attribute att]), Position.none);
 
 val internal_att =
   syntax (Scan.lift Args.internal_attribute >> Morphism.form);
@@ -214,11 +223,11 @@
 (* rule composition *)
 
 val COMP_att =
-  syntax (Scan.lift (Scan.optional (Args.bracks Args.nat) 1) -- thm
+  syntax (Scan.lift (Scan.optional (Args.bracks P.nat) 1) -- thm
     >> (fn (i, B) => Thm.rule_attribute (fn _ => fn A => Drule.compose_single (A, i, B))));
 
 val THEN_att =
-  syntax (Scan.lift (Scan.optional (Args.bracks Args.nat) 1) -- thm
+  syntax (Scan.lift (Scan.optional (Args.bracks P.nat) 1) -- thm
     >> (fn (i, B) => Thm.rule_attribute (fn _ => fn A => A RSN (i, B))));
 
 val OF_att =
@@ -243,11 +252,11 @@
 
 (* rule cases *)
 
-val consumes = syntax (Scan.lift (Scan.optional Args.nat 1) >> RuleCases.consumes);
+val consumes = syntax (Scan.lift (Scan.optional P.nat 1) >> RuleCases.consumes);
 val case_names = syntax (Scan.lift (Scan.repeat1 Args.name) >> RuleCases.case_names);
 val case_conclusion =
   syntax (Scan.lift (Args.name -- Scan.repeat Args.name) >> RuleCases.case_conclusion);
-val params = syntax (Args.and_list1 (Scan.lift (Scan.repeat Args.name)) >> RuleCases.params);
+val params = syntax (Scan.lift (P.and_list1 (Scan.repeat Args.name)) >> RuleCases.params);
 
 
 (* rule format *)
@@ -272,7 +281,7 @@
   no_args (Thm.rule_attribute (K (Conv.fconv_rule Drule.eta_long_conversion)));
 
 val rotated = syntax
-  (Scan.lift (Scan.optional Args.int 1) >> (fn n => Thm.rule_attribute (K (rotate_prems n))));
+  (Scan.lift (Scan.optional P.int 1) >> (fn n => Thm.rule_attribute (K (rotate_prems n))));
 
 
 (* theory setup *)
@@ -341,7 +350,7 @@
       equals -- Args.$$$ "false" >> K (Config.Bool false) ||
       equals -- Args.$$$ "true" >> K (Config.Bool true) ||
       Scan.succeed (Config.Bool true)
-  | scan_value (Config.Int _) = equals |-- Args.int >> Config.Int
+  | scan_value (Config.Int _) = equals |-- P.int >> Config.Int
   | scan_value (Config.String _) = equals |-- Args.name >> Config.String;
 
 fun scan_config thy config =