Actions as Expressions

An action can be considered as an expression: when evaluated, its value is an exec. This can be a useful way to bypass Antescofo's syntax constraints. To consider an action as an expression, the action must usually be enclosed in an EXPR { ... } construct.

However, the main use of this construct is to get the exec of an action. The action is fired when the expression is evaluated. The returned exec refers to the running instance of the action and can be used to kill this running instance or to access the local variables of the action. An atomic action (with a 0-duration run) returns the special exec '0.

Simplified Syntax

A number of shortcuts can be used to simplify the writing:

The surrounding EXPR { ... } is optional in the case of a process call.

The surrounding EXPR { ... } is optional in the body of a function, but only for messages and variable assignment, see AtomicActionInExpression.

The keyword EXPR is optional in the right hand side of an assignment. For example:

          $x := EXPR { whenever (...) {...} }

is equivalent to

          $x := { whenever (...) {...} }

Example

In the following example, a tab of 5 elements is created. Each element refers to a running loop:

          $tab := [ EXPR{ Loop 1 { @local $u ... } } | (5) ]

Thus, one can kill the second instance with

          abort $tab[1]

and one can access the local variable of the third instance through the dot notation:

          $uu := $x[2].$u

In this case, the use of the EXPR { ... } avoids the definition of a process to encapsulate the loop.