SLIDE 32 Composition and Interoperability for External DSL Engineering 20 / 40
Experiment: a Family of FSM Languages
c
m
; cr eat e O U T : Fl at Fsm f r om I N : C
posi t eFsm M T;
r eat es a new Fl at Fsm r ul e SM 2SM { f r om sm 1 : C
posi t eFsm M T! St at eM achi ne t o sm 2 : Fl at Fsm ! St at eM achi ne }
- - I ni t i al st at es of com
posi t e
e r egul ar st at es r ul e I ni t i al 2St at e { f r om i s1 : C
posi t eFsm M T! I ni t i al St at e ( not i s1. par ent St at e. ocl I sU ndef i ned( ) ) t o i s2 : Fl at Fsm ! St at e( st at eM achi ne <- i s1. st at eM achi ne, nam e <- i s1. nam e) }
esol ves a t r ansi t i on or i gi nat i ng f r om
posi t e st at e r ul e T2TB { f r om t 1: C
posi t eFsm M T! Tr ansi t i on, sr c : C
posi t eFsm M T! C
posi t eSt at e, t r g : C
posi t eFsm M T! St at e, c : C
posi t eFsm M T! St at e ( t 1. sour ce = sr c and t 1. t ar get = t r g and
- c. par ent St at e = sr c and
not t r g. ocl I sTypeO f ( C
posi t eFsm M T! C
posi t eSt at e) ) t o t 2 : Fl at Fsm ! Tr ansi t i on ( nam e <- t 1. nam e, st at eM achi ne <- t 1. st at eM achi ne, sour ce <- c, t ar get <- t r g ) }
c
m
M T uses : / / f sm m t ; m
uses : / / f sm ; t r ansf or m at i on dum m yI nver t ( i n i nFsm : Fsm M T, out out Fsm : Fsm ) ; m ai n( ) { i nFsm . r oot O bj ect s( ) [ Fsm M T: : FSM ] - > m ap m apFSM ( ) ; } m appi ng Fsm M T: : FSM : : m apFSM ( ) : Fsm : : FSM {
nedSt at e : = sel f . ow nedSt at e - > m ap m apSt at e( ) ; i ni t i al St at e : = sel f . f i nal St at e - > f i r st ( ) . m ap m apSt at e( ) ; f i nal St at e : = sel f . i ni t i al St at e. m ap m apSt at e( ) ; } m appi ng Fsm M T: : St at e: : m apSt at e( ) : Fsm : : St at e { nam e : = sel f . nam e;
- ut goi ngTr ansi t i on : =
sel f . i ncom i ngTr ansi t i on - > m ap m apTr ansi t i on( ) ; } m appi ng Fsm M T: : Tr ansi t i on: : m apTr ansi t i on( ) : Fsm : : Tr ansi t i on { i nput : = sel f . i nput ;
- ut put : = sel f . out put ;
t ar get : = sel f . sour ce. m ap m apSt at e( ) ; }
TransfoFsm.qvto c
/ / D el egat e t he execut i on of t he st at e / / m achi ne " f sm " t o t he " execut e" m et hod / / of i t s oper at i onal sem ant i cs. publ i c voi d execut e( St at eM achi ne f sm , St r i ng i nput ) { / / D ynam i cal l y di spat ched on t he act ual / / l anguage i m pl em ent at i on of execut e( ) r oot . execut e( i nput ) ; } Li st <St r i ng> m
- del s = new Ar r ayLi st <>( ) ;
m
" m el ange: / m
t =Fl at Fsm R t cM T" ) ; m
" m el ange: / m
ed?m t =Fl at Fsm R t cM T" ) ; m
" m el ange: / m
t =Fl at Fsm R t cM T" ) ; m
" m el ange: / m
edhi er ?m t =Fl at Fsm R t cM T" ) ; R esour ceSet r s = new R esour ceSet I m pl ( ) ; / / Load t he m
- del poi nt ed by t he gi ven
/ / U R I , r et r i eve i t s r oot St at eM achi ne, / / and execut e i t f or ( St r i ng ur i : m
R esour ce r es = r s. get R esour ce( ur i , t r ue) ; St at eM achi ne r oot = ( St at eM achi ne) r es. get C
execut e( r es, " { x; y; z; o; p; q} " ) ; }
ExecuteFsm.java
On Language Interfaces – Flexible Modeling – Modular Development of DSLs – Melange