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