State Scope

State Scopes allow to define Variable Declarations, Signal Declarations, and Local Reactions:

 

{SimpleScope} declarations+=(VariableDeclaration | SignalDeclaration | LocalReaction)*;

 

Variable Declarations

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
('=' varInitialValue=Expression)? ('with' varCombineOperator=CombineOperator)? ';';

Examples:

 

 

Signal Declarations

Yakindu events are interpreted as signals. A signal has a Direction and a Name.

{EventDefinition} (isInput?='input')? (isOutput?='output')? 'signal' name=ID ';';

Examples:

 

 

 advantagedisadvantage 
Don't use signals
  • no need to be implemented
  • no signals
No
Boolean variables as signals
  • implementation in a short time
  • a short form declaration:

    in I instead of in I:boolean

  • a short form of use:
    I / O instead of [I==true] / O = false
  • no more possible to use of Boolean variables
No
Yakindu events as signals
  • use of already implemented features
  • differ between Signals and Boolean Variables

Declaration: in signal I;

  • signals are implemented as events
  • Question: How to mix Signals and variables?
Yes
New declaration type
  • differ between Signals and Boolean Variables

Declaration: in signal I;

  • expensive
no

Local Reactions

A Local Reaction has a Trigger and an Effect.

(trigger=(LocalReactionTrigger | ReactionTrigger))? ('/' effect=(ReactionEffect | SuspendEffect)) ';';

LocalReactionTrigger

{ReactionTrigger} triggers+=LocalReactionType ('&&' (isImmediate?='#')? (delay=INT)? ((triggers+=RegularEventSpec) | ('[' guardExpression=Expression ']'))?)?;

Examples:

LocalReaction Effect

{ReactionEffect} actions+=Expression (=> ',' actions+=Expression)*;

Example:


Transition

A Transition is defined by a Reaction, consisting of a Trigger and an Effect. 

Transition Trigger

A trigger:

{ReactionTrigger} (isImmediate?='#')? (delay=INT)? ((triggers+=RegularEventSpec) | ('[' guardExpression=Expression ']'));

Examples:

Transition Effect

{ReactionEffect} actions+=Expression (=> ',' actions+=Expression)*;

Examples:

Extending the Validator