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.
struct { int a; bool b; } s1 = { 2, true };an instantiation of the structure from above where the members a and b are set to 2 and true.
The typedef keyword is used to name types.
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;