interface iimperative { in void e(); out void f(); out void g(); out void h(); behaviour { enum S {S1, S2}; //subint count {0..1}; S s = S.S1; bool b = false; //count c = 1; bool c = true; [s.S1] { on e: { if(c || b) { f; g; } if(b) { if(c) { g; } c = false; f; } else { if(c) { b = false; h; } else { b = true; g; } } s = S.S2; } } [s.S2] { on e: { if(b) { if(!c) { c = true; } else { c = false; } h; } b = ! b; s = S.S1; } } } } component imperative { provides iimperative i; behaviour { enum States {I, II, III, IV}; States state = States.I; [state.I] { on i.e(): { i.f(); i.g(); i.h(); state = States.II; } } [state.II] { on i.e(): { state = States.III; } } [state.III] { on i.e(): { i.f(); i.g(); i.g(); i.f(); state = States.IV; } } [state.IV] { on i.e(): { i.h(); state = States.I; } } } }