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 |