• Nenhum resultado encontrado

Desenvolvimento de sistemas orientado a modelos

N/A
N/A
Protected

Academic year: 2017

Share "Desenvolvimento de sistemas orientado a modelos"

Copied!
73
0
0

Texto

(1)

! "

# ! "

$" " %

#

# &

'" ("& )"

* # ! "

" # *+

",-.

/

&"* 0 &1 2 $

"

$ ") 3",-

)4 & 5

5 ) +*

&"6")( & ") 3"

6 &

",-

& 78

&8 &" 1

9 77

:

#;

#

&<

/ =>8?@ " ?A8=B8B?==

(2)

/

&"* 0 &1

2 $

"

$ ") 3",-

)4 & 5

5 ) +*

&"6")(

#

)

-

# &

:

*

") "

&"6")(

&"

",- :

"+&

"

:

BC

*

&

B?==: D

+) "

;

# &

'" ("& )"

* # ! "

" # *+ ",- : + &<

&

:

! "

# ! "

$" "

"

5 &

"

"

")

" )

"

E)

F

"

)( :

"*+

#)"& :

+"&"

"+& ",-

G

"

&*"

"6 ) "

+ )

#

)(

# &

: * B@8==8B??@8

)

/ (")

"&

"3"

&

"

&/

& 78

&8 &" 1

9 77

(3)

Nazatto, Thales Eduardo

Desenvolvimento de sistemas orientado a modelos: o

Framework Xtext e sua contextualização no Model-Driven

Development / Thales Eduardo Nazatto. - Rio Claro : [s.n.],

2011

71 f. : il., figs., tabs.

Trabalho de conclusão de curso (bacharelado - Ciências

da Computação) - Universidade Estadual Paulista, Instituto de

Geociências e Ciências Exatas

Orientador: Frank José Affonso

1. Engenharia de software. 2. Programação Orientada a

Aspectos. 3. Domain-Specific Languages. I. Título.

005

N334d

(4)

!

"

#$

"

% & %

' & %

(

) '*+

'

,

-

./

0

1 ! ,

#$

2 %!

+

' & %

' +

#$ 3

Comissão Examinadora

Prof. Dr. Frank José Affonso (orientador)

Prof. Dr. Leandro Alves Neves

Prof(a). Dr(a). Maria Cecília V. S. Carneiro

Rio Claro, 12 de dezembro de 2011.

(5)

! " #

$

%

$

%

&

'

(

)

*

+

(

,-

.

/

&

,(

.

)

0

,)

. 1

)

-

)

,1

.

1

&

,/

. 2

1

3 ,1

.

" #

/

)

,

.

(

)

$ )

,

45. (

)

,6

. (

%

,(

.

+

(

+

, 7

.

%

$

(6)

9+

:

;

(7)

8

/

<

=

-

- 7

-:>

8

:

=

<

:

&

>

,&

.

$

>

?

#

&

>

/

<

,& / .

:

>/

'

, /'.

0

+

)

)

#

@ %

$

:

#

A

>

* 8

/

<

-

&

>

(8)

+

/

<

8

<

3

3

/

7

<

3

!

- 7

>

-

>-3 2 <

3

<

3

<

3

3

<

1

&

>

,&

.

3

3

3

-

&

>

/

<

,& / . <

3

>/

'

, /'.

B

@ %

3

3

<

<

3

3

< !

C 3<

* /

<

8

>-

&

>

(9)

!

"

# $%& ' ( ( '

( !

)* $

+

, !

- .//01

0

. 2 " ''

$'3

45 $

2

2

) '' - .//61

./

7

2

$

& ' ' 2

' )

! 8- .//91

.

# 2 $" ( ' !

$ '

)

" : - .//91

.7

;

8

(!

$'

4< ' 3

*

) /1

.6

6

3

$4 ' $

!

$

" $= "

$

$ ( "=

"

)

1

.0

0 2 " ''

" ( ' 45

' '

$

'( " ' )> "? ! '- @@01

.@

9 2

5 ( 8A (

" $ !

$' 45 )

$ '- .//91

7.

@

$ !

$' 45

! ? $ '( " ' )

$ '- .//91

7.

/ 2

5 ( 8A (

(

5

)

$ '- .//91

77

2

5

! ? $ '( " ' )

$ '- .//91

77

.

'

? 45 BC' "

$'3

45

!

)* $

+

, !

- .//01

70

7

C " &C!

( ! D 8 ) 01

79

#

8

(!

&

.xpt

(

D( $

) 91

#/

;

8

(!

45

& ' $ D $

#/

6

8

(! ' (

3 $

(!

' $ D $

#

0

( '

B

! ? $ 3

E F D 8

#.

(10)

B !

(

45 $

"I

'"

"I

(

#@

B ! .

(

45 $

"I

'"

"I

( !

"! ('

#@

(11)

,

&

* &

>

-&1* - 7

&

1

?&'* ?

&

'

&- * &

- 7

3

)D&* )

D

&

@&B* @&' &

B

@&'* @

& !

'

)B&* )

B

&

B&*

B

&

/&*

/

&

-*

- 7

&

* &

>

/ * /

<

& / * &

>

/

<

/'*

>/

'

1 '* 1

'

/E'* /

E

3 '

(12)

--*

-

- 7

- *

>-B 8* >-B

8

" +*

"

+

8& * 8

&

< !

B*

B

860 * 8%

6 ! >0

''* '

> >

'

0+'(*

+

'

(

(13)

J

:

'B/+

8 B'?/+( FG8/

H

'B/+

8 + 68' /

I

'B/+

8

6(8JB +?( / 8 /B1' /

K

/?&L(B-

44

4 B0+(- ?FM-

4N

4 4 )

%

&

4N

4 O - 7

4N

4 N 8

4P

O 8/+? - 6B6'B-1(L B)-

4Q

O 4 &

>

,&

.

4Q

O 4 4 &

- 7

3 ,&- .

4Q

O 4 O &

4H

O 4 N &

4I

O 4 P +

4K

O 4 Q

R

O4

O O &

>

,&

.

OO

O O 4 &

>

/

<

,& / .

ON

O O O /

<

,/ .

OP

O N

>/

'

, /'.

OP

O P

-

, - .

OS

O P 4 )

/

OI

O P O

OK

O P N 8

N5

O P P

A

N4

O Q 8

B 8

NP

N - ( &8D-(C @+8@+

NS

N 4 8

&

< ! ,8& .

NS

N O @ %

NH

N O 4 &

D !

< 8

,&D8.

NI

N N @

NK

P &8+- -'-1B

PO

Q 8/+? -

8 ) /-

PQ

Q 4 8

(

PQ

Q O

1

:

8 1

PQ

Q N &

/

PH

Q P 1

)R

PI

Q Q (

8 )

A

PI

S )-0)'?/M-

Q4

(14)

I

T0 B)8/

QQ

T0 B)8

* (

/

QS

T0 B)8 6* 1

:

1

)R

1

QH

(15)

4N

K

D

,

K

8

/

<

4KSI

$

-+ 0

)

" : - .//91

)

=

-- 7

-:>

8

:

=

<

:

,&

. #

$

>

)

R

&

?

#

,& / .

:

, /'.

?

@ %

/' #

R

R

.

L

,

-

7

,&

.

,&

.

@ %

9

;

:

:

:

(16)

4P

-A

:

7

8

:

-

O

:

$

:

*

,&

.

,&

.

, /'.

, - .

B 8 8

-

N

>

%

* - @ % 8

$

:

-

P

7

:

-

Q

:

@ %

> >

(17)

4Q

.

J

.

M

,

N

)

1

/

'' ).//61

,&

. #

!

"

,-&1.

A

8

#

#

$

R

).//7B1- "

(

! 8 ).//61

+B

#

A

#

A

,

. 6

>

-&1

A

,

.

-

#

<

#

#

R

#

A

)

-&1

<

7

A

,?&' &-

)D&

%

.

A

A

+

7

&

-&1 #

.

L

O )

1

/

" : ).//91

&

#

&- ,

!

#

$

.

>

)

&-

(18)

4S

- &-

7

:

?&' +

#

=

#

#

>

#

#

/

>

&-

* $

+ , !

).//01

" : ).//91

-&1

P

* -

,

&5.

U

,

&4.

U

,

&O.

U

>

,

&N.

V

?&'

:

&O

&-

%

)

#

W

A

&-

#

&

4

- &

#

@&B ,

%

&

.

A

- @&B

:

A

)

" : - .//91

8

&- #

=

&

@&B #

(19)

4H

!

"

# $%& ' ( ( '

( !

)* $

+

, !

- .//01

.

.

&

N

*

'

&

,)B&.

&

, B&.

, /&. 8

$

A

#

R

R

#

-

'

&

,)B&.

#

#

R

8

%

R

#

A

)B&

8

# =

*

<

#

#

R%

*

(20)

4I

-

&

, B&. #

7

&

1

%

?&'

B& #

R

%

R

7

B&

:

R

#

7

R

B&

# 9

;

R

)

$

A

/& 0

:

#

:

)

! 8- .//61

-

, /&.

B&

) '' - .//61

#

7

A

)

,

<

A

<

.

B&

#

A

:

/&

?

/&

/&

7

R

A

:

-

/&

#

R

*

#

7

/&

A

/&

:

R

)

! 8- .//61

.

7

2

)

R

&

#

:

-

#

:

).//

1- "

(

! 8 ).//61

* 9

(

)

*+

&

; 8%

(21)

4K

(

$

( '

! P

8

B&

/&

%

#

B&

,

- (

3 D

/

.

/&

(

$

$' Q$" '

! P

8

#

:

:

B&

/&

)

#

/&

B&

.

#

K

#

>

>

#

A

A

#

A

0

#

A

O

(22)

O5

. 2 " ''

$'3

45 $

2

2

) '' - .//61

A

! 8 ).//61

-&1

*

2

(

2

P

+

A

2

(

2

P

+

%

X

:

B&

R

2

(

2

P

+

2

(

2

P

+

%

7:

,8

(

.

X

)B&

B&

#

(23)

O4

:

$

$

8

/

<

A

/&

R

>

%

:

A

-#

A

=

* ?

>

:

>

N

7

2

$

& ' ' 2

' )

! 8- .//91

.

; 2

2R

+

&

'' ).//61

*

2

B !

P

%

#

A

R

$

(

B !

$

(!

3

'P

X

=

R

=

,8%

* ?

R

"

R

)Y.

R

$

( $ S$"

(!

3

P

)

#

A

(24)

OO

R 7

A

2

&

P

)

R

&

9

;

R

/

#

:

:

&

$

#

:

. .

M

,

,

2

)

1

-

,&

. #

8

#

- &

#

%

*

#

,/ .

&

,& / .

&

#

)

! 8- .//61

" : ).//91

A

0

#

, /'.

7

+

#

#

:

A

+

:

)

A

A

(25)

ON

# 2 $" ( ' !

$ '

)

" : - .//91

. .

M

,

T

,

2

)

1

/

$ ).//#1- "

(

'' ).//61

& /

#

7

7

O5

8

&

:

7

<

:

2:

&

& /

8

&

& /

#

%

>

#

7

&

<

'' ).//61

*

!

P

8

&

&- & /

B'

45

' '

'P

A

#

&

$

A

#

& /

/'

$"

'P

&

(26)

OP

3 '

8

&

#

& /

7

. . .

T

)

1

* $

, !

).//01

#

,/ .

A

,

-

.

)

*(

/

*(

0

*(

*(

! 8 ).//61

/

&

& / *

$

!

P

&

A

?&'

&-

& /

?&'

/'

/

?&'

/'

2 " ''

' $& !&

$

'

'P

& /

/

&

/

& /

#

Z

#

& /

:

:

$

( $ S$"

2!

3

P

& /

&

B&

/&

A

/

X

<

:

:

A

$

2

< '

"I

B

P

& /

&

R

/

A

:

. 7

M 2

)

1

/

@ %

)D 8 - ./

1

, /'.

(27)

OQ

-

/' #

1 '

"

A

%

1 ' )

3

"

8

:

%

/'

1 '*

&

1

2 1

3

*(4 5 2

)

)

*

.

/

0

) .

2 )

)

4

2

)

6

6

8

1 '

=

0

#

#

/'

$

8%

/'

*

$

$ 'P

/

7:

%

/'

:

-

7

/'

# %

%

8

$ 'P

/

-

%

/'

>

#

/E'

D !

)61

9

7

-

89

:

&;

<

='

>/

!

$

?/ 1

!

*(

@4 #4 '

4

;

/E' #

/

1

6

,/16

. 9

&

4 @

1

7

(

4 @

0

*(

4 &

(28)

OS

;

8

(!

$'

4< ' 3

*

) /1

/'

&

%

R

:

R

?&' #

. # 2

K

2

)

21

!' $- "

(

$ ' ).//91

9

;

8

7!

4KHP

* +

<

A

R

7

6

>

#

*

R

:

7

, --.

R

(29)

OH

R

B

R

R

$

$

7

*

>

B

,

#

)

$ '- .//91

)L $ + T $"F- .//#1

.

%

#

7

#

A

R

[ 8

--7

S

+

6

3

$4 ' $

!

$

" $= "

$

$ ( "=

"

)

1

)

$ ' ).//91

#

*

" " '5 P

A

" (!

$ P

2

,

4

3 " !

$

$45 P

&

R

/

:

#

:

(

$

'" ! B !

P

<

9

%

;

#

(30)

OI

$

$ Q$" P

&

R

=

#

$ 45

! ? 45

"I

P

:

.

(

)

4

8

4KKH

1

C

9

>-;

,

- .

R

@

%

()

--

)> "? ! '-

@@01

/

L $ + T $"F ).//#1

*(

1

:

:

/

)

4

. #

2

K

?

#

*

$

" ( $ $ 'P

#

:

1 '

%

$

'( " 'P

#

%

%

/

%

#

"

"

X

<

#

B $

'( " 'P

-R

R

R

/

-

#

:

,$

2

' '"

'P

/

:

(31)

-OK

. # .

-

$

*

" ( ' 45 P

8

)

$ '- .//91

(!

$ 45 P

R

:

: %

)

$

'-.//91

" ( ' 45 P

X

R

R

,

.

H

#

N

*

0

#

A

R

>

#

R

)> "? ! ' @@01

0 2 " ''

" ( ' 45

' '

$

'( " ' )> "? ! '- @@01

. # 7

(32)

N5

'( " P

?

- #

:

--* #

#

> "? ! ' ) @@01

,

#

. #

#

8

:

R

R

X

!

:

2 $ '

L $45 )L $ 2 $ '1P

?

7

#

%

/

A

#

%

%

#

:

%

%

A

/

- #

:

2 $ '

45 )2 $ " '1P

6

#

7

!

#

-

7

#

%

#

R

7

!

)

#

:

A

!

W

#

#

%

A

$ ' )

& " '1P

X

-

)

:

#

#

)

:

: %

4 P 4

#

%3

7

+

$ ' ).//91

*

A

.

(33)

N4

*(

1

(

!

*( C

0

1

! 1

,

,

*( =

/

/

>C

0

= )

:

> 1

.

4

. # #

2

-

-R

R

*

$ P

":

#

A

:

:>

-

#

:

2 ' ' S$"

" $ !

$' 4< 'P

?

#

7

A

%

7

#

:>

$

$

$= ).//91

:>

#

%

#

R

#

)

#

7:

%

8

#

A

$

W

A

-

>

"

:

#

>

)

$ ' ).//91

A

,$

)

R 7:

,$

(34)

NO

9 2

5 ( 8A (

" $ !

$' 45 )

$ '- .//91

@

$ !

$' 45

! ? $ '( " ' )

$ '- .//91

$ ' ).//91

7

-,

!

.

4

#

-%

#

%

45

44

(35)

-NN

/ 2

5 ( 8A (

(

5

)

$ '- .//91

(36)

NP

8

- #

4P

. ;

2

- 8

#

B 8

B

8

7

B6&

#

0

O554

R

:>

7

>

"

O55P

:

8

$>

:>

#

B 8

"

B 8 #

\

B

,B

8

.

%

B 8

8

*

8 P

-

%

B 8 #

#

#

8

B 8

8

>

R

+

7

%

A

:>

$

( U P

7

!

:

%

7

)

B 8 #

(

45

"I

P

R

#

7

#

;

#

%

R

:>

(37)

NQ

3

45 P

#

R

R

)

#

%

$

7

8

#

7

%

)

#

B 8

B 8

%

%

%

-

8

#

R

8

7: %

-- 8

N H ,

9B

;.

#

A

A

N S ,

92

;. N Q ,

91

;.

N P ,

91

3

;.

-#

,

A

%

.

/

7

7:

O55

7

8

7

#

#

7

7

8

7

* -

" + ,

"

+

.

"

-

@ %

- @ %

7

@

#

(38)

NS

7

T

> D

D

0

@ %

7

* - @

)

7

#

R

#

:

7

2

T

> )

1

@ % #

@

#

,8& . - 8& #

8

8&

@

>

R

&-

)

" : - .//91

#

P

:

8& *

EClass

EAttribute EReference EDataType

)

7

@

#

- 8&

:

7

A

: O

*

.ecore .genmodel

-.ecore

#

@&'

A

.genmodel

#

A

:

R

)* $

+ , !

- .//01

4O

(39)

NH

.

'

? 45 BC' "

$'3

45

!

)* $

+

, !

- .//01

- @ %

#

.ecore .genmodel

=

8

R

7 . D

D

D 8 )./

1

%

@ % #

7

/'

1 '

)

%

%

R

@ %

8

B 8 0

O 5

@ %

A

- @ % #

7

8&

.ecore .genmodel

) 01

#

@

@ %

:

)

8

7

R

/'

B

- @ %

:

%

.xtext

8

A

:

R

:

) @1

%

@ %

7

860

:

:

D 8 )./

1

(40)

NI

#

R

4N

.xtext

:

7:

0

#

grammar with generate

:

%

R

A

>

W

A

>

7:

7

C " &C!

( ! D 8 ) 01

7 .

T

>

T

)

T 1

0 @ %

.xtext

#

=

-

>

%

:

>

:

@ %

(41)

NK

- &D8

@&'

) 91

8

O 5

@ %

&D8*

&D8O

%

R%

)./1

%

:>

/

:

%

Q

&D8O

:

%

: %

@ %

&D8O

:

#

:

@ % #

* - @

7 7 D

/

D 8 )./

1

@

#

<

5

,"J&.

"

%

A

- @

@

R

A

:

@

@

#

8

@

.xpt

%

R

,

4P.

@

.xtend

#

#

doGenerate

8

#

R

@ %

7

#

W

#

generateFile

W

:

,

4Q.

R

#

#

:

@ %

#

:>

#

def

@

%

%

R

@

:>

(42)

P5

#

8

(!

&

.xpt

(

D( $

) 91

(43)

P4

(44)

PO

#

0

O

N

&

&

A

+

#

@ %

7

0

:

* X

^

/

8

@ % #

& /

/'

R

%

:

). 1

#

:

@ %

8

/

<

A

#

4H

0

( '

B

! ? $ 3

E F D 8

4

8

7: #

8

/

<

#

8

#

#

7

:

(45)

PN

&

V& /

)B&

#

:

R%

O

:

4

0

@ %

:

@

R

>

%

)

(

8

/

<

:

:

A

:

)

:

:

.xtext

B&

-/&

A

R

>

N #

)

#

:

#

8

A

(

:

R%

-

#

B&

%

R

8

/

<

@ %

7

8

P #

R

R

#

7

8

R

>

)

B&

#

@

/&

>

7

:

R

%

R

X

R

8

#

%

:

@ %

)

8

/

<

#

R

>

R

:

R

$>

@

R

P +

#

)D 8 - ./

1

#

(46)

PP

@ %

& /

)

%

7

#

R

,8%* "

)Y.

7

:

:

R

#

#

R

>

:

=

R

$

7

%

#

* J

:

:

+B

$%

%

#

:

:

:>

R

7

@ % #

:

:

(47)

PQ

;

0

:

P

8

/

<

7

%

;

2

K

*

8

(

(

$

+

>

$

%

R

-

#

A

#

7

--

(

#

8

/

<

8

>

#

:

:

,

.

A

:

R

; .

,

,

J

:

#

) 01

@ %

)D 8 - ./

1

>

R

-

Tccdsl.xtext

>

$

6

*

(48)

PS

mapsto

* ?

R

typedef

R

package

* ?

0

A

,

typedef

.

entity

* ?

0

A

,

typedef

.

extends

* ?

functions

* ?

A

7:

void

void

* ?

:

,

.

R

:

#

@ %

< !

%

%

.mwe2

#

7

#

8

-GenerateTccdsl.mwe2

$

6

#

A

:

@ %

)

@

:

R

8

:

7

"

%

7

,

%

.tcc

.

8

7:

#

7:

7

R

8

@ %

:

@

#

:

R

-

TccdslGenerator.xtend

$

6

#

#

7

8

#

#

#

doGenerate

@

@ %

7

IQualifiedNameProvider

#

@Inject

7

V

(49)

PH

9

;

:

R

* 8

TccdslGenerator.xtend

#

A

R

>

:

-

R

#

$

6

ModelExtensions.xtend AspectExtensions.xtend ModelExtensions.xtend

TccdslExtensions.xtend

8

=

7

R

:

W

A

-

$

,

%

.

R

:

* X

AppInit

0

AppInit

#

8

#

:

A

8

#

:

A

; 7

#

@ %

:

dsl.tcc

$

6

#

:

=

*

Pessoa

:

*

nome idade

A *

cadastrar sortear cadastrar

#

sortear

:

7

tcc.model

#

tcc.model.aspect

tcc.model.control app.init

?

#

)

?&'

%

#

(50)

PI

R

; #

K

R

R

8

@ %

R

#

R

>

7

)D 8 - ./

1

R

$

6 #

7

"

#

R

,

4K. B

#

#

R

9

;

:

+

#

:

7

@ % #

7

"

A

:

7

"

7

9 G

'H

45

"I

; ;

R

R

& /

R

#

9

R

;

-

+

4

9

=

;

#

,- @ %

#

:

A

. -

R

(51)

PK

$

)

B !

(

45 $

"I

'"

"I

(

0

#

#

R

-

R

& /

#

R

R

8

0

7

8

R

>

#

/

+

O

B ! .

(

45 $

"I

'"

"I

( !

"! ('

)

R

N5_

8

2:

! ''

B

HO

Q

S KP

OI

OI

455 55

)

OK

44

NH KN

'( "

OK

OK

455 55

4QI

HN

PS O5

!

! $= '

"I

$= ' V

'

'

2 " $

! $= '

' )W1

!

! $= '

"I

$= ' V

'

'

2 " $

! $= '

' )W1

! ''

B

HO

Q

S KP

OI

4H

S5 H4

)

OK

N

45 NP

'( "

OK

N

45 NP

4QI

OI

4H HO

!

! $= '

"I

$= ' V

'

'

2 " $

! $= '

' )W1

!

! $= '

"I

$= ' V

'

'

2 " $

(52)

Q5

8

7

B 8

8

8

#

R

%

:

:>

:>

)

& /

#

#

V

#

/'

A

#

R

:

/'

+

N

B ! 7

$= '

"I

(!

$

' (

45

"I

PS O_

R

R

& /

7

7

#

:

7

=

)

:

& D 8

$= ' "

'

+

% %

NH

! '' D $

$= ' "

'

+

1

SQ

+

8%

HN

&

8%

PI

8%

NK

)

8%

NO

(53)

Q4

6

K

)

@ %

#

:

/

/'

R

& /

/

- @ %

8

#

%

:

#%

V

:

V

W

:

/'

-

-A

=

&

&

& /

8

/

<

:

)

:

#

R

#

:

8

@ %

&

7

:

R

#

A

+

#

:

:

+

#

#

/

R

:

R

7

@ %

(54)

QO

)

:

%

#

A

A

/

#

A

#

(55)

QN

0

X

) 1

'?)(8 B-

?

<

"

VO55K

:

4K>N5

NP>Q5

*

`

*VV<<<

V

V

VQQVQQ4NPV

>5O5KO55K>4P5QNNV >

a

).1

E?B0+8(-

& (

J ' 8(( &

" +

?

>

+

B

(

&

8

0

+

)

/

4SN ,O55H. OKZ

PN

'

)

/3

> ?

3

/

> /

/

:

OK>N4

* `

*VV<<<

V

V

V

V/4QH45SS45H554PSSa

)71

B//

'

J 0

B

? :

&

1

:

)R

:

N H>OK

*

`

*VV<<<

V

V

V4IPNV/'6/>S@b 0ca

)#1

68'B@ " # 8 ?

&

*

?&'

A

#>

:

OQ>PP

*

`

*VV<<<

V

V

VNVN4P4V

>

445QO55S>4SQQPIV >

a

);1

@ %

:

NH>NI

QQ

`

*VV<<<

V@ % V

Va

)61

/E'

* `

*VV

< !

V< ! V/E'a

* OP

O544

)01

*

`

*VV

< !

V< ! V

d

d

dB

a

* 44

O544

)91

8

,

<

.

* `

*VV

< !

V< ! V8

d_OIB 8_OKa

* 44

O544

)@1

8

Z

* `

*VV<<<

a

* 44

O544

) /1

&

/E'

/

O55I*

3

*

(56)

QP

O544

)

1

- e +

/

7

* `

*VV!

< !

VO55HV5NVOHV

>

>

>

7

V

a

* OS

O544

) .1

/ 0+-/

2

C

(

-

*

`

*VV

V V

V

<

V

a

) 71

DB0)C

"?0B-( J

1

/

-"

"

* `

*VV

Vf

V< !

V

V

d

a

) #1

CB)c '8/

1

>-

*

`

*VV<<<O

V

V

V

V

V

VC

>8)-- KHV

a

) ;1

)-?+B02-

)

2

" > 1

A

455_

*

`

*VV<<<

V

V

> >

7>

>

>

>

>455>

Va

) 61

CB)c '8/ 1

2 008& 0 "

B

"

"

* `

*VV<<<

V

V

V

VO55OV

5O>

a

) 01

(B8/8

1

<

@ %

* `

*VV<<<

V

>

><

>% % Va

* 5I

O544

) 91

(B8/8

1

<

@ %

O

*

`

*VV<<<

V

>

><

>% % >

>OVa

* 5I

O544

) @1

8 +B018

/

8%

<

@ %

*

`

*VV

VO545V5IV

> %

><

>% %

a

* 5I

O544

)./1

&D8O

* `

*VV<<<

V@ % V

VOd4d5V44I> < >

>

a

5K

O544

). 1

8 +B018 /

& /

/'

* `

*VV

VO55IV5HV

>

>

(57)

QQ

(58)

QS

2X

P

*

(

*

5 *6&

B?==

*" +"&" "

5

6" "*

G &

"*

+

" +"&" *

&

6&

:

&"

5 "

* *

*" &

5

8

*"

5 "

" * & & )" H&

) " +"&"

"&I &

7 &*" 5 8

!"

#"

=8

* *

+,J

5 &I "+"& & "

"&

*"

" 5 3 "+H

*" 7

") "

&

" $ ,-

) < "8

=8

*"

5 + &* & "

)

-

+

"

*":

G

" & 6

/

*

"

8

=8

*"

5 + &* & " *+&

-

" " +

" +&

*"8

B8

*"

5 + &* & " *+&

-

*" +

" ") " H& "8

!"

#"

(59)

QH

2X

P

J

-

R

C "

! $

Tccdsl.xtext

*

grammar org.xtext.tcc.Tccdsl with org.eclipse.xtext.common.Terminals

generate tccdsl "http://www.xtext.org/tcc/Tccdsl"

Model:

(types+=Type)*;

Type:

Package | TypeDef | Entity;

Package:

"package" name=JAVAID "{"

(types+=Type)* "}";

TypeDef:

"typedef" name=ID ("mapsto" mappedType=JAVAID)?;

JAVAID:

ID("." ID)*;

Entity:

"entity" name=ID ("extends" superEntity=[Entity])? "{"

(attributes+=Attribute)* ("functions"

"{"

(functions+=Function)* "}")?

"}";

Attribute:

type=[Type] (many?="*")? name=ID;

Function:

(60)

QI

GenerateTccdsl.mwe2

*

module org.xtext.tcc.GenerateTccdsl import org.eclipse.emf.mwe.utils.* import org.eclipse.xtext.generator.* import org.eclipse.xtext.ui.generator.*

var grammarURI = "classpath:/org/xtext/tcc/Tccdsl.xtext" var file.extensions = "tcc"

var projectName = "org.xtext.tcc.dsl" var runtimeProject = "../${projectName}"

Workflow {

bean = StandaloneSetup { scanClassPath = true

platformUri = "${runtimeProject}/.." }

component = DirectoryCleaner {

directory = "${runtimeProject}/src-gen" }

component = DirectoryCleaner {

directory = "${runtimeProject}.ui/src-gen" }

component = Generator {

pathRtProject = runtimeProject

pathUiProject = "${runtimeProject}.ui" pathTestProject = "${runtimeProject}.tests" projectNameRt = projectName

projectNameUi = "${projectName}.ui" language = {

uri = grammarURI

fileExtensions = file.extensions

// Java API to access grammar elements (required by several other fragments)

fragment = grammarAccess.GrammarAccessFragment {}

// generates Java API for the generated EPackages

fragment = ecore.EcoreGeneratorFragment { // referencedGenModels = "

// platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel, // platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.g enmodel // " }

// Serializer 2.0

fragment = serializer.SerializerFragment {}

// the serialization component (1.0)

// fragment =

(61)

QK

// a custom ResourceFactory for use with EMF

fragment = resourceFactory.ResourceFactoryFragment { fileExtensions = file.extensions

}

// The antlr parser generator fragment.

fragment = parser.antlr.XtextAntlrGeneratorFragment { // options = {

// backtrack = true

// }

}

// java-based API for validation

fragment = validation.JavaValidatorFragment { composedCheck =

"org.eclipse.xtext.validation.ImportUriValidator" composedCheck =

"org.eclipse.xtext.validation.NamesAreUniqueValidator" }

// scoping and exporting API

// fragment = scoping.ImportURIScopingFragment {}

// fragment = exporting.SimpleNamesFragment {}

// scoping and exporting API

fragment = scoping.ImportNamespacesScopingFragment {} fragment = exporting.QualifiedNamesFragment {}

fragment = builder.BuilderIntegrationFragment {}

// generator API

fragment = generator.GeneratorFragment { generateMwe = true

generateJavaMain = true }

// formatter API

fragment = formatting.FormatterFragment {}

// labeling API

fragment = labeling.LabelProviderFragment {}

// outline API

fragment = outline.OutlineTreeProviderFragment {} fragment = outline.QuickOutlineFragment {}

// quickfix API

fragment = quickfix.QuickfixProviderFragment {}

// content assist API

fragment = contentAssist.JavaBasedContentAssistFragment {}

(62)

S5

'

)

TccdslExtensions.xtend

*

fragment = parser.antlr.XtextAntlrUiGeneratorFragment {}

// generates junit test support classes into Generator#pathTestProject

fragment = junit.Junit4Fragment {}

// project wizard (optional)

// fragment = projectWizard.SimpleProjectWizardFragment {

// generatorProjectName = "${projectName}"

// modelFileExtension = file.extensions

// }

// provides the necessary bindings for java types integration

fragment = types.TypesGeneratorFragment {}

// generates the required bindings only if the grammar inherits from Xbase

fragment = xbase.XbaseGeneratorFragment {}

// provides a preference page for template proposals

fragment = templates.CodetemplatesGeneratorFragment {}

// rename refactoring

fragment = refactoring.RefactorElementNameFragment {}

// provides a compare view

fragment = compare.CompareFragment { fileExtensions = file.extensions

} } } } package org.xtext.tcc import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.common.types.JvmDeclaredType import org.xtext.tcc.tccdsl.*

class TccdslExtensions {

def String packageName(Object o) { switch(o) {

Package : concatPath(packageName(o.eContainer), o.name) EObject : packageName(o.eContainer)

JvmDeclaredType : o.packageName default: null

} }

(63)

S4

suffix else

prefix + "." + suffix }

def functionHeader(Function f)'''«IF f.type == null»void«ELSE»«typeDeclaration(f)»«ENDIF»

«f.name»(«parameters(f)»)'''

def typeDeclaration(Attribute a)'''«IF

a.many»List<«a.type.name»>«ELSE»«a.type.name»«ENDIF»'''

def typeDeclaration(Function f)'''«IF

f.many»List<«f.type.name»>«ELSE»«f.type.name»«ENDIF»'''

def variable(Attribute a)'''«typeDeclaration(a)» «a.name»'''

def aspectParameters(Function f){ var pars = ""

var i = 0

for(p:f.parameters){

pars = pars + typeDeclaration(p).toString i = i + 1

if(i < f.parameters.size){ pars = pars + ", " }

}

pars }

def parameters(Function f){ var pars = ""

var i = 0

for(p:f.parameters){

pars = pars + variable(p).toString i = i + 1

if(i < f.parameters.size){ pars = pars + ", " }

}

pars }

def parameterDeclaration(Function f){ var pardecl = ""

var i = 0

for(p:f.parameters){

pardecl = pardecl + p.name i = i + 1

if(i < f.parameters.size){ pardecl = pardecl + ", " }

}

pardecl }

(64)

SO

)

AspectExtensions.xtend

*

package org.xtext.tcc.generator import org.xtext.tcc.TccdslExtensions import org.xtext.tcc.tccdsl.* import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.common.types.JvmDeclaredType import com.google.inject.Inject

class AspectExtensions extends TccdslExtensions {

@Inject extension IQualifiedNameProvider nameProvider

def aspect(Entity e)'''

«IF e.eContainer instanceof Package» package «e.packageName».aspect; «ELSE» package aspect; «ENDIF» import java.util.List; import «e.fullyQualifiedName»;

public aspect Aspecto«e.name.toFirstUpper»{ «FOR f:e.functions»

pointcut metodo«f.name.toFirstUpper»(): call (*

«e.packageName».control.«e.name.toFirstUpper»Controller.«f.name»(..)) ;

pointcut metodo«f.name.toFirstUpper»2(): call (public static «IF f.type != null»«f.type.name»«ELSE»void«ENDIF»

«e.packageName».control.«e.name.toFirstUpper»Controller.«f.name»(«asp ectParameters(f)»));

«ENDFOR»

«FOR f:e.functions»

before(): metodo«f.name.toFirstUpper»(){

System.out.println(thisJoinPoint.getSignature() + " - Conectou!");

}

after() returning: metodo«f.name.toFirstUpper»2(){

(65)

SN

)

ModelExtensions.xtend

*

package org.xtext.tcc.generator

import org.xtext.tcc.TccdslExtensions import org.xtext.tcc.tccdsl.*

import org.eclipse.xtext.naming.IQualifiedNameProvider import com.google.inject.Inject

class ModelExtensions extends TccdslExtensions { def compile(Entity e) '''

«IF e.eContainer instanceof Package» package «e.packageName»;

«ENDIF»

import java.util.List;

«IF e.eContainer instanceof Package»

import «e.packageName».control.«e.name»Controller; «ELSE» import control.«e.name»Controller; «ENDIF» «classes(e)» '''

def classes(Entity e)'''

public class «e.name»«IF e.superEntity != null» extends «e.superEntity.name»«ENDIF»{

«FOR a:e.attributes» private «variable(a)»; «ENDFOR»

«FOR a:e.attributes»

public «typeDeclaration(a)» get«a.name.toFirstUpper»(){ return «a.name»;

}

public void set«a.name.toFirstUpper»(«variable(a)»){ this.«a.name» = «a.name»;

}

«ENDFOR»

«FOR f:e.functions»

public «functionHeader(f)»{ «IF f.type != null»return

(66)

SP

)

ControllerExtensions.xtend

*

)

TccdslGenerator.xtend

*

/*

* generated by Xtext */

package org.xtext.tcc.generator

import org.eclipse.emf.ecore.resource.Resource import org.eclipse.xtext.generator.IGenerator

import org.eclipse.xtext.generator.IFileSystemAccess

import static extension

org.eclipse.xtext.xtend2.lib.ResourceExtensions.* import org.xtext.tcc.tccdsl.*

import org.eclipse.xtext.naming.IQualifiedNameProvider import com.google.inject.Inject

class TccdslGenerator implements IGenerator {

@Inject extension IQualifiedNameProvider nameProvider

@Inject extension ModelExtensions models package org.xtext.tcc.generator import org.xtext.tcc.TccdslExtensions import org.xtext.tcc.tccdsl.* import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.common.types.JvmDeclaredType import com.google.inject.Inject

class ControllerExtensions extends TccdslExtensions {

@Inject extension IQualifiedNameProvider nameProvider

def control(Entity e)'''

«IF e.eContainer instanceof Package» package «e.packageName».control; «ELSE» package control; «ENDIF» import java.util.List; import «e.fullyQualifiedName»;

public class «e.name.toFirstUpper»Controller{ «FOR f:e.functions»

public static «functionHeader(f)»{

}

«ENDFOR» }

Referências

Documentos relacionados

o Equipamentos de laboratório – importação de reagentes para exame e equipamentos de alta tecnologia; o Radiologia – importação de aparelhos de ressonância magnética,

A dimensão média dos projectos é variável consoante a medida: é bastante menor nas Explorações Agrícolas (108 mil euros) e na Floresta (58 mil euros) do que na Transformação

a) O aumento da interação gênica. 84) (UFPA/2004) Durante o desenvolvimento embrionário dos vertebrados forma-se várias estruturas externas ao corpo e do embrião chamadas de

Ampliando, portanto, a análise de Costa (1983) a respeito da expansão das escolas isoladas e dos grupos escolares, mapeei os dados relativos à quantidade de

Será sujeito passivo de uma obrigação acessória a pessoa indicada na norma como obrigada a realizar um fazer ou um não fazer em prol da administração ou da

empresa de marketing analytics. Aqui estão suas dicas de conteúdo ... # 1) Escreva conteúdo para seus leitores, não para você - Tente criar um conteúdo que resolva os maiores

pH (como solução aquosa) Sem dados disponíveis Não existe informação disponível Viscosidade cinemática Sem dados disponíveis Nenhum conhecido. Viscosidade Dinâmica

3. Para o serviço ordinário deve ser organizado um conjunto de escalas. A inscrição em cada escala faz-se por ordem decrescente de postos e, dentro do mesmo posto, por