Declarations

Declarations are either global or local (to a template) and can contain declarations of clocks, bounded integers, channels (although local channels are useless), arrays, records, and types. The syntax is described by the grammar for Declarations:

Declarations  ::= (VariableDecl | TypeDecl | Function | ChanPriority)*
VariableDecl  ::= Type VariableID (',' VariableID)* ';'
VariableID    ::= ID ArrayDecl* [ '=' Initialiser ]
Initialiser   ::= Expression
               |  '{' Initialiser (',' Initialiser)* '}'
TypeDecls     ::= 'typedef' Type ID ArrayDecl* (',' ID ArrayDecl*)* ';'

The global declarations may also contain at most one channel priority declaration.

Examples

Type Declarations

The typedef keyword is used to name types.

Example

The following declares a record type S containing an integer a, a boolean b and a clock c:

typedef struct 
{ 
  int a;   
  bool b;
  clock c;
} S;