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