State Scopes allow to define Variable Declarations, Signal Declarations, and Local Reactions:
{SimpleScope} declarations+=(VariableDeclaration | SignalDeclaration | LocalReaction)*; |
Variable Declarations in a State Scope are visible in this state and its descendant states.
A Variable:
{VariableDefinition} (isInput?='input')? (isOutput?='output')? (isStatic?='static')? type=[types::Type|FQN] name=ID |
Examples:
Yakindu events are interpreted as signals. A signal has a Direction and a Name.
{EventDefinition} (isInput?='input')? (isOutput?='output')? 'signal' name=ID ';'; |
Examples:
advantage | disadvantage | ||
---|---|---|---|
Don't use signals |
|
| No |
Boolean variables as signals |
|
| No |
Yakindu events as signals |
Declaration: in signal I; |
| Yes |
New declaration type |
Declaration: in signal I; |
| no |
A Local Reaction has a Trigger and an Effect.
(trigger=(LocalReactionTrigger | ReactionTrigger))? ('/' effect=(ReactionEffect | SuspendEffect)) ';'; |
{ReactionTrigger} triggers+=LocalReactionType ('&&' (isImmediate?='#')? (delay=INT)? ((triggers+=RegularEventSpec) | ('[' guardExpression=Expression ']'))?)?; |
Examples:
{ReactionEffect} actions+=Expression (=> ',' actions+=Expression)*; |
Example:
A Transition is defined by a Reaction, consisting of a Trigger and an Effect.
A trigger:
{ReactionTrigger} (isImmediate?='#')? (delay=INT)? ((triggers+=RegularEventSpec) | ('[' guardExpression=Expression ']')); |
Examples:
{ReactionEffect} actions+=Expression (=> ',' actions+=Expression)*; |
Examples: