-- Sakura.bnf
Sakura BNF productions
statement ::= WHEN event : statement
statement ::= CHOICE { guardcomlist }
statement ::= ON event -> statement WITHIN statement
statement ::= PAR { parlist }
guardcomlist ::= guardcomlist "||" guardcom
guardcom ::= WHEN event -> statement
guardcomlist ::= guardcom
parlist ::= parlist // statement
parlist ::= statement
transferseries ::= transferseries ; transferexp
transferseries ::= transferexp
transferseries ::=
transferexp ::= lhs ← exp
transfermode ::= DEVICE
block ::= { IN pairlist OUT pairlist GUARDIAN statement STATE pairlist DATAFLOW transferseries CONTROL statement }
event ::= updownsignal
event ::= updownsignal AND exp
updownsignal ::= lhs UP
updownsignal ::= lhs DOWN
updownsignal ::= lhs CHANGE
Sakura parse tree nodes definitions
statement: When[Event, statement]
statement: Choice[List(Guardedcommand)]
statement: On[Event, statement, statement]
statement: Parallel[List(statement)]
Guardedcommand[Event, statement]
Transfer[lhs, exp]
body: Deviceblock[List(Decl), List(Decl), statement, List(Decl), List(Transfer), statement]
-- used in the context Decl[names, DeviceTC, Deviceblock]
DeviceTC[List(Decl), List(Decl)]
Event[updownsignal, exp]
updownsignal: Upsignal[lhs]
updownsignal: Downsignal[lhs]
updownsignal: Changesignal[lhs]