AUTOC format
<autoc> | ::= | <type_definition>* |
| | <channel_declarations>* |
| | <process_decl>+ |
| | <system_decl> |
| | [<explicit_decl>] |
| | <pragma>*
|
<type_definition> | ::= | type <ident> = enum { <ident> (,<ident>)* } ; |
<channel_declarations> | ::= | channel <channel_decl> (,<channel_decl>)* ; |
<channel_decl> | ::= | <ident>( [<type> (,<type>)*] ) |
|
The declaration part possibly defines enumerated types. Labels should be
different among different types, and different from variable names.
The declaration of a channel consists in a channel name, followed
by the type of its parameters when the channel carries
communication parameters. The non-terminal "type" is the same as for
NBAC.
<process_decl> | ::= | processs <ident> <process_body> |
<process_body> | ::= | { [<sync_decl>] [<var_decl>] <init_decl> <location>+ } |
<sync_decl> | ::= | sync <ident> (,<ident>)* ; |
<var_decl> | ::= | var <ident> (,<ident>)* : <type> ;)+ |
<init_decl> | ::= | init <expression> ;
|
The syntax of expressions is the same as for NBAC.
<location> | ::= | loc <ident> [<continuous>] <transition>* |
<continuous> | ::= | continuous <dexpr> ; |
<transition> | ::= | [<integer>:] when <expression> [<synchronisation>] goto <ident> [<assignements>] ; |
<synchronization> | ::= | sync <ident> ( [<ident> (,<ident>)*] ) |
<assignements> | ::= | assign { <assign> (;<assign>)* [;] } |
<assign> | ::= | <ident> := <expression>
|
<system_decl> | ::= | system <ident> (,<ident>)* ; |
<explicit_decl> | ::= | explicit <ident> (,<ident>)* ; |
<pragma> | ::= | #pragma <ident> " ([^"]) * "
|
Bertrand Jeannet, February 10, 2011