programm ::= block
block ::= begin scope end
scope ::= com | decl ; scope
decl ::= var varlist : type | const const-name = constexpr | decl ; decl
varlist ::= var-name | varlist , varlist
type ::= set | set init const | chan
k of set | stack k of set
set ::= { elems }
elems ::= elems , elems | const | a..b
com ::= < expr > | com || com | com ; com | do alt-set od | do com enter alt-set od | block
alt-set ::= com ; repeat | com ; exit | alt-set [] alt-set
expr ::= 'v | v' | v | c! | c? | c!! | c?? | s! | s? | s!! | s?? | const | expr op expr | op expr | (expr)
op ::= + | - | * | / | % | = | # | < | > | < = | > = | & | | | !
const ::= false | true | z
k is a natural number.
a,b are natural numbers with a < b or ( a , b ) = ( false , true ).
z is a natural number.
In declarations, k denotes the capacity of a channel
or a stack, respectively.
In commands, the brackets < ... > delineate atomic actions.
The command 'com' before the enter clause of a do
command denotes initialisation; repeat clauses
are repeated and exit clauses lead to termination of the
do command. [] means nondeterministic choice.
A comment can be placed at the end of any line.
It must begin with the symbol " // " .
Keywords are insensitive to upper / lower case.
The following words can alternatively be used instead of the
corresponding operators:
parallel , choice , not , and , or , false , true .
Names of variables must be lower case if you want to compile via a PBC term.
Keywords ref and const indicate reference parameter and constant parameters, respectively; unqualified parameters are by value.
Channels and stacks must be defined by reference. Arguments for reference parameters must be plain identifiers (var-name) , arguments for value or constant parameters can also be value expressions (expr).
Names of procedures must be upper case if you want to compile via a PBC term. If you want to use constant parameters you have to check the Skip Syntax Check option, and then you can invoke first the B(PN)² expander and afterwards the Expanded B(PN)² -> HL Net
The keywords const , proc and ref can be typed either in upper or in lower case.