-- 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]