Next: Target tasks, Previous: Restricted identifiers, Up: Task descriptions [Contents][Index]
A <source_task> specification takes one of six forms:
<source_task> | ::= | ALL
TASKS |
| |
ALL TASKS <ident> |
|
| | TASK
<expr> |
|
| |
TASKS
<restricted_ident> |
|
| | TASK
GROUP
<ident> |
|
| |
TASKS <range> [,
<range>]* |
ALL TASKS
specifies that each task will perform a
given operation. If followed by a variable name (
<ident>), each task will individually bind
<ident> to its task ID—a number from zero to one
less than the total number of tasks. That is, ‘ ALL
TASKS
me’ will bind ‘me’ to
‘0’ on task 0, ‘1’ on
task 1, and so forth.
‘
TASK
<expr>’ specifies that only the task
described by arithmetic expression <expr> will perform the given
operation. For example, ‘TASK 2*3+1’ says that only
task 7 will act; the other tasks will do
nothing.
‘
TASKS
<restricted_ident>’ describes a set of
tasks that will perform a given operation. For instance,
‘TASKS x SUCH THAT x>0 /\ x<num_tasks-1’—read as
“tasks x such that x is greater than zero and
x is less than num_tasks minus one”—expresses that
a given operation should be performed on all tasks except the first
and last in the computation. On each task that satisfies the
relational expression, ‘x’ will be bound to the task
ID as in
ALL TASKS
above. Hence, ‘x’ will be
undefined on task 0, ‘1’ on
task 1, ‘2’ on task 2
, and so forth up to task ‘num_tasks-1’,
on which ‘x’ will again be undefined.
‘
TASK GROUP
<ident>’ specifies
that a previously defined group of tasks will perform a given
operation. This form of <source_task> is
described further in Binding
variables.
‘
TASKS
<range>’ is syntactic
sugar for the
<restricted_ident> case with an anonymous <ident>
and an IS
IN
relation. For example, ‘ TASKS {3, 5,
8}
’ is equivalent to ‘ TASKS
var SUCH
THAT
var
IS IN
{3, 5, 8}’ except that it does not bind
variable ‘var’.
As per the definitions in Primitives and Restricted identifiers, respectively, <ident>s and <restricted_ident>s do not accept parentheses. Hence, ‘TASKS (bad SUCH THAT bad IS EVEN)’ and ‘ALL TASKS (no_good)’ result in parse errors while ‘TASKS fine SUCH THAT fine IS EVEN’ and ‘ALL TASKS dandy’ are acceptable constructs. As an analogy, ‘x = 3’ is valid in many general-purpose programming languages while ‘(x) = 3’ is not.
Variables declared in a ‘source_task’ specification are limited in scope to the surrounding statement.
Next: Target tasks, Previous: Restricted identifiers, Up: Task descriptions [Contents][Index]