src/HOL/Tools/Predicate_Compile/predicate_compile.ML
changeset 46949 94aa7b81bcf6
parent 46614 165886a4fe64
child 46961 5c6955f487e5
equal deleted inserted replaced
46948:aae5566d6756 46949:94aa7b81bcf6
   219 val mode_and_opt_proposal = parse_mode_expr --
   219 val mode_and_opt_proposal = parse_mode_expr --
   220   Scan.optional (Args.$$$ "as" |-- Parse.xname >> SOME) NONE
   220   Scan.optional (Args.$$$ "as" |-- Parse.xname >> SOME) NONE
   221 
   221 
   222 
   222 
   223 val opt_modes =
   223 val opt_modes =
   224   Scan.optional (Parse.$$$ "(" |-- Args.$$$ "modes" |-- Parse.$$$ ":" |--
   224   Scan.optional (@{keyword "("} |-- Args.$$$ "modes" |-- @{keyword ":"} |--
   225     (((Parse.enum1 "and" (Parse.xname --| Parse.$$$ ":" --
   225     (((Parse.enum1 "and" (Parse.xname --| @{keyword ":"} --
   226         (Parse.enum "," mode_and_opt_proposal))) >> Multiple_Preds)
   226         (Parse.enum "," mode_and_opt_proposal))) >> Multiple_Preds)
   227       || ((Parse.enum "," mode_and_opt_proposal) >> Single_Pred))
   227       || ((Parse.enum "," mode_and_opt_proposal) >> Single_Pred))
   228     --| Parse.$$$ ")") (Multiple_Preds [])
   228     --| @{keyword ")"}) (Multiple_Preds [])
   229 
   229 
   230 val opt_expected_modes =
   230 val opt_expected_modes =
   231   Scan.optional (Parse.$$$ "(" |-- Args.$$$ "expected_modes" |-- Parse.$$$ ":" |--
   231   Scan.optional (@{keyword "("} |-- Args.$$$ "expected_modes" |-- @{keyword ":"} |--
   232     Parse.enum "," parse_mode_expr --| Parse.$$$ ")" >> SOME) NONE
   232     Parse.enum "," parse_mode_expr --| @{keyword ")"} >> SOME) NONE
   233 
   233 
   234 (* Parser for options *)
   234 (* Parser for options *)
   235 
   235 
   236 val scan_options =
   236 val scan_options =
   237   let
   237   let
   238     val scan_bool_option = foldl1 (op ||) (map Args.$$$ bool_options)
   238     val scan_bool_option = foldl1 (op ||) (map Args.$$$ bool_options)
   239     val scan_compilation = foldl1 (op ||) (map (fn (s, c) => Args.$$$ s >> K c) compilation_names)
   239     val scan_compilation = foldl1 (op ||) (map (fn (s, c) => Args.$$$ s >> K c) compilation_names)
   240   in
   240   in
   241     Scan.optional (Parse.$$$ "[" |-- Scan.optional scan_compilation Pred
   241     Scan.optional (@{keyword "["} |-- Scan.optional scan_compilation Pred
   242       -- Parse.enum "," scan_bool_option --| Parse.$$$ "]")
   242       -- Parse.enum "," scan_bool_option --| @{keyword "]"})
   243       (Pred, [])
   243       (Pred, [])
   244   end
   244   end
   245 
   245 
   246 val opt_print_modes =
   246 val opt_print_modes =
   247   Scan.optional (Parse.$$$ "(" |-- Parse.!!! (Scan.repeat1 Parse.xname --| Parse.$$$ ")")) [];
   247   Scan.optional (@{keyword "("} |-- Parse.!!! (Scan.repeat1 Parse.xname --| @{keyword ")"})) [];
   248 
   248 
   249 val opt_mode = (Parse.$$$ "_" >> K NONE) || (parse_mode_expr >> SOME)
   249 val opt_mode = (Args.$$$ "_" >> K NONE) || (parse_mode_expr >> SOME)
   250 
   250 
   251 val opt_param_modes = Scan.optional (Parse.$$$ "[" |-- Args.$$$ "mode" |-- Parse.$$$ ":" |--
   251 val opt_param_modes = Scan.optional (@{keyword "["} |-- Args.$$$ "mode" |-- @{keyword ":"} |--
   252   Parse.enum ", " opt_mode --| Parse.$$$ "]" >> SOME) NONE
   252   Parse.enum ", " opt_mode --| @{keyword "]"} >> SOME) NONE
   253 
   253 
   254 val stats = Scan.optional (Args.$$$ "stats" >> K true) false
   254 val stats = Scan.optional (Args.$$$ "stats" >> K true) false
   255 
   255 
   256 val value_options =
   256 val value_options =
   257   let
   257   let
   262           (map (fn (s, c) => Args.$$$ s -- Parse.enum "," Parse.int >> (fn (_, ps) => (c, ps)))
   262           (map (fn (s, c) => Args.$$$ s -- Parse.enum "," Parse.int >> (fn (_, ps) => (c, ps)))
   263             compilation_names))
   263             compilation_names))
   264         (Pred, [])
   264         (Pred, [])
   265   in
   265   in
   266     Scan.optional
   266     Scan.optional
   267       (Parse.$$$ "[" |-- (expected_values -- stats) -- scan_compilation --| Parse.$$$ "]")
   267       (@{keyword "["} |-- (expected_values -- stats) -- scan_compilation --| @{keyword "]"})
   268       ((NONE, false), (Pred, []))
   268       ((NONE, false), (Pred, []))
   269   end
   269   end
   270 
   270 
   271 (* code_pred command and values command *)
   271 (* code_pred command and values command *)
   272 
   272