• Aucun résultat trouvé

Model-driven generative approach for concrete syntax composition

N/A
N/A
Protected

Academic year: 2021

Partager "Model-driven generative approach for concrete syntax composition"

Copied!
20
0
0

Texte intégral

(1)

HAL Id: hal-00795063

https://hal.inria.fr/hal-00795063

Submitted on 27 Feb 2013

HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci- entific research documents, whether they are pub- lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.

Model-driven generative approach for concrete syntax composition

Pierre-Alain Muller, Philippe Studer, Jean-Marc Jézéquel

To cite this version:

Pierre-Alain Muller, Philippe Studer, Jean-Marc Jézéquel. Model-driven generative approach for

concrete syntax composition. Proc. of OOPSLA Workshop on Best Practices for Model-Driven

Development, Oct 2004, Vancouver, Canada. �hal-00795063�

(2)

Model-driven generative approach for concrete syntax composition

! "

# #"$"%

& &$ %

! "

' ( ( ( ! ) ! ( ( ( ( )

( * + ,( * + ) ( ( ( ( - (

. / 0 ) 1 ( + . ( ( (

( 1 ' ( / ( ) * ( + ( 2 - ) ).) (

( ' 0 + 1 / ( () ) ( .) ( ( 3 45

+ $ ( ( 1

6 ( - ( ( /(4 ( /( - ( (/ ( ( ( - (

( ) ! () )7 () - 4 ( ( (

1 Introduction

( + ( (

8

(& 7 ( ! (( ( ( ) ( ( 2 - ( (

* 7 / ! ) * + ( ( ( ( ( (

) () . #! ( 1 ( ( ) ' 0 + ( *7 + ( ( 2 -

(

0 ( 7 / ! % () . ( 1 () (

( ( ( ' ) ( + * ( ) . * +

( 17 ( / -* ( ( ( ) ( * +

(

( *7 / $ - ( * + ( . ( ( ( ( 1 (

(- - *- / ( ( ) ! () )

7 / (/ (/ / ) #! () . ! # 1 ( () 7 /

) ( * + . () ( ( ( 1

' ( (/ ) (/ ( ( (( / ' ( ( - . +

0 ( ) / ( ) ) 5 ( 1 ( ( ( ( . + / (

( ( ( ( 1 ( ( ( - ( 7 / ) .

7 ( #! 1 7 / + 7 + ( ( ( ( -

( 7 7 ) ( * +

(3)

9 ( + ( ! * ( ( ( ( (

:

7 / (/

( ( ( ( ( ; ! ) ! (

2 Lessons learned

2.1 Multi meta-models approach

2 ! + ! ( ; 0 % ( ( ! ( ( ) !

() ) . ( ( - ( ) ( ( ) ) (! ) - !

( ( < ( ( !) ( ( ( ( 7 * (/ ( 4

) ) ( * *( ( 1 / ( - / ( (

) ) . 0 ( - ( 7 ' 0 ( ) *( 17 - (/ / ( - - (

! ( / ( / . )<5 ( ( 0 ( 0 ) ) (

- ) - ! ( 1 ( ( - *7 / ! (! ( ) . (

1 ( ( ( ( ( + ( - ( (

' ! ( - ( / * ( * ) ! (

=

( *

! ( ' ( * ( -* ( ( ( 5 ( /

( - ( 7 ( ( * ( + ( ( ( (

( / ! ) ( + ( 7 / ) ( +

2.2 The action language can be used to write model-transformations

2 ! ( ( ) ) 5 ( ' ( * + ( ( ( (

5 ( ! * ( ( #! 7 ! ( ! * ( ( - / ' * ( / )

! 7 / ( (/ ( ! % *( 6,0 ( / 5 ( -

( ! 7 5 ( - ( * ( ( + ( ( ( ( (

; ) ( ) ( 7 5 ( ( + - (

)*7 ( ! ./ * ( ( ( ( ( 7 (

( ! ( *) (-& (17 5 ( - ( + (

( ( 5 ( -( / .( ( 1 - (

( ( ( ( ( ( ( (

2.3 Template-based generation

5 ( ( ( - () + ( ( 7 ) + ( - 7 - /(

- - ( 7 ( / ! - ) ( ( $ ( (

( * +

2 ! ( ( ! ( ( ( ( ' * *( /

( ( ( ( + (/ ( / - ( ( ( ( '

(4)

* * + ( ( ) () 7 ( *( . ( 1 (

- ( / ( ( ) (

' / *7 4 ) ! ( ( ( (! ) + 7 / ( ! ) (

( ( ! (( ' / ( ( ( 7 - (/ (* )

( $ - ( ! ( 7 / ( - -* ) ) 7 )

(( . ) 3 45 ( 7 ( ; 2 ! 2 - ( 1

3 Discussion

2 /( 4 ( + - * ( ( ( ( ) ! () ) 2

( ( ( - 7 / 4 ( )7 ( *( * ( (

( - ) $ ( *4 ( ) ! () ) >

2 ! ( - / ! + ( 7 / ) ( ) (

- / ! ( 4 ( ( ( 7 / ( (

( ( ! ) ( ( ( 7 4 ( ( ! 7

( * % !*/ ) . ( ! 4 ( / * ( * - 5 (

' 0 + 1 ( ) ( - ( - ( + ! ( + ) )

>

2 ( ! ( & 7 / * - 4 ! ( 7 -( ( 4 (

( 7 ( ( ! ( ( > ; ! ( ) / ( ( ((

( (- - * (- ( ) ( * /

( ( / ( ) ) (

?

4 Conclusion

/ ! ( ( ( ( ( 7 / - ( * +

( ( ) * ) ( 2 - ( ( * ( )/ ( ! (( (

2 ! (/ (/ ( - ( + ( ( $

-* () ) ( ( 7 (/ ( - () ( * + ( (

2 - ! ( ( - ( + ( ( ! ! ( ( - /

) ! () )

(5)

Appendixes

The composition meta-model

' ( ( ( ( - ( ( ( )

( ( ( ( ( + 7 ( / ( ( ( ) ( -

( ( + ( ( + . ( 1

5 ( . - (/1 % * ) ) ( + ( ( ( - (

( ) ) ( + ! ( 7 / )(! @

( ( (

,( ( ( ( ( / - (

( 7 / ( / (

( ( ! - ( ( + (

' ( ( ( ( 4 ( - ( (( ( 4 (

( ( ( ( ( ( ( ( ( ' (!

( - ( ) ( ) ) -( * ( ). + (

) ) 7 ) 7 ) ( ! ( A 1 (

/ () )) ! ( -*

' ( ( ( ( 7 / ( ( (- 4

-* () / ) ) ( 2 ( (/ )

( ( ( . ( * +1 ) (

! " "

( ) ( ( ( ( ( ! + (

# $ "

,( ( ,( ( ( ( ((

( ( ) (-

( (

B

*

B ; * * ) ! !

* ! 5 ( + ( 7 ( !

) )

( ( ) +

,( (

*

,( ( * * ( ( ( !

( ( * ( (

! * ( ( ( (

-* 5 ( + ( (

) *- (

(6)

' ! ( ( (/ (! ( ( ( ( ( ( 7

( ( ) / )(/ ( ( ) 7 ( ( (

-( ( ' ( ( (( / - ( + - ()

/ / ( ( ( (/ )

( ( ) 7 + ( ! ( + (

( ( /

' ) - (/ (/ + ( ! ( ( ( + ( (

' 0 ) *- ( * *( (

% & " " "

( ( ! ( ( 7 /(4 ( + ( ( 4

( - ( ( ( ( + - ( < 5 ( ) )

' 0 4 ) )

The Xion Language

' 5 ( ( ) ) ( * ! ( ( ( ( (! -

( 5 ( - ( 6,0 - ( ( * + ( - (

( 5 ( - ( ( ( (

5 . C - + ( ( 1 ( - +

( / ( - ! - ( ) ((7 ) ( ( */ *

( ( ( ( (

5 ( - (C

• , (-& 7

• , ) - ! 7

• , 4 7

(7)

• , ) ! - ! 7

• , ( % *( (

( ! ( * / #! ) ) 7 / (

( * + ,( / ((4 ( #! C

• ( - ( 4 7 % ( + ( 7

• ,( ( (/ . 7 / 7 (7 (17

• ( + ) ( ( ( - * ) ! 7

• D E $ ( ( (

( (! 7 ( 5 ( ( ((4 4 #! ( - / (4 #! ! - ( 7 ( ( .FF7 GF7 HF7 II7 > *( (7 1 (

-*6,0 ' 6,0 - */ ( ) * + 7 -* ) ;( - 7 ( 7

0( )7 7 ( 9* ! * 7 / ( $ * 4 6,0

) ( 2 ! ( ; ' *

5 ( ( ( ) ) ( ! 7 5 ( - ( *

( ( + ( * + ( ; ) ( ) ( 7 5 (

( + - (

( ! 7 5 ( - ( + ( ( ( 5 (

-( / .( ( 1 - ( (

( ( ( ( ( ( (

5 ( ( ( - () + ( ( / 7 ) + (

- 7 - /( - - ( 7 ( / ! -

) ( 7 - - (/7 ( $ ( ( ( * +

Using HTML markup language to specify templates

( ( ( ( 7 / ( *( - / ' 0 ) 7

/ ( ( ( ( ( ( ( ( (

( ' ( (/ ) (/ (/ ( -* ( (

(8)

' " " "

' ( (/ ) (/ + ( () 4 )

(

( & " "

' + ( ( -* ' 0 ) ;* + -

) -* ( 7 ( ( $ -* ( /

( ' * + ( ( ( (/ C

“!-!/objexion/”Decision Center Number“ ”Decision Center Name“/”

( C (-&+ ( - * ( 7 ( ( + / /

! ( ( ((

' + ( *7 / (/ /( + ( + ) ( ( ( <

5 $ ( #! ,( ) (

Case study

*/ / (/ (/ () #! ( 5 $ ( (

0 (

' ( (/ ) ) (/ ! * 0 ( / / (

- (

(9)

) * " +, -

2 /( ( Class .Person Car1 (/

( (/ ) )

. * " "

XMI generation

7 / / (/ (/ () 5 $ ( ( ( / ( (

( 0 ( )! - *(

' ( (/ ) 5 / ) ( (

( 2 ! - ( + ( (! $ 5 0

(- (/ ( ) ) 5 ' - ) ( (

-

(10)

/ * " 0 1, # # & "

' 5 / ) -* + ( ( () / / ) -*

( ' ( (/ ) (/ ! / ( ( 7 / +

) / ( (

2 * " 1, # 0 "

+, -

(11)

' 5 / ! ( ( ( + 7

5 / / / ( ) *7 ( ( (

( ( ( ( /( 7 (

* ! - *( -

(/ @ ! ((4 ( / / () () /

) 5

' ! ( ( / ) -* ( (/ ) ( ( ( (

3 & " " " 1, #

( / ! ( ( 5 (

XMI_text ( 7 ( -

XMI_owned_element7 ( /( ! 7 7 (-&

' ( (/ ) (/ + ( XMI_text7 / (

. ( -* 1 / ( !( * - (

(12)

4 " " 1, #

' ( - -* ( (/ ) ( ' XMI_owned_element

( ( ( * ( .All Classes1 / /

* - XMI_class ( (

4 1, #5 " "

' XMI_owned_element XMI_class ( -* (

( * ( ( * ' ( (

XMI_class / - + XMI_owned_element 7 (

( ( ( ( -* ( ( * . ( (

( 1 ' ( ( -* ( (/ )5 ( + ( C BM::Class.allInstances()

BM ( Business Model7 ( ( ) 4 ) '

allInstances() ( ( ( Class 7 ! 7

' ( (/ ) (/ + ( XMI_owned_element

(13)

% 4 " 1, #

' 5 + ( ( -* ( (/ ) (

' , " " 6

' XMI_class ( + ( ! ( 5 7

( % 7 ( ( ( ( .All

Features1 ( - ! ( 5

' ( (/ ) (/ ( ( ( 7 (

% 7 ( 7 ! (

( 4 "

(14)

( ( 7 - ( * ( -* 2

) ( 5 7 -* ) XMI_attribute (

- ! -* ( ( *

' 5 ( + ( (! -* ( ( * C

c.attribute

/ c ( * class7 / / ( XMI_template

6,07 attribute / (/ ( ( ( ( - / 4 (

-*c

' 5 + ( ! )! ) - (/

) 4 " 1, #

' + ( ( / + ( ( ( - 7

( - ( ( ( ' 5 + ( - !

)! ) - (/

. 4 "

( ) ( ( ( 5 * 7 + - (

- ) ( (

' - ( ( ( ( ( ( ' ( ((

( ! + - ( ( 7 ) 7 #! !

# ( !

( 7 / )! - (/ + ( ( ) ( (

AllAttributes / (! - ( ' (

( (- -* 7 / / ( *)! (! ! / (

function all_attributes_1(&$ctxt,&$_lc){

$_t2=new OclAnySetSql($ctxt,("SELECT gpattribute.attribute_id FROM gpattribute WHERE ((gpattribute.attribute_id) IS NOT NULL) AND ((gpattribute.class) = (".codeOclObject($_lc)).")) ",0,103,FALSE);

checkNull($ctxt,$_t2,"expression in decision center: All Attributes (199)");

$_t1=$_t2->elements();

$_lindex=0;

while ( $_t1->hasMoreElements() )

{ $_lelement=$_t1->nextElement();

(15)

{ xmi_attributes_($ctxt,$_lelement);

} $_lindex=$_lindex+1;

} }

/ 787 "

( / (/ - ( ( - ./

0 ,' ( 1 / ( (! - (

( / - C+mi_attributes_($ctxt,$_lelement);

9 (/7 / )! ) ( ( + ( ( -

function xmi_attributes_(&$ctxt,&$_la){

$ctxt->writeToOutputStream("<UML:Attribute xmi.id=\"");

$_t1=$_la;

oid_1($ctxt,$_t1);

$ctxt->writeToOutputStream("\" name=\"");

$_t2=$_la;

attribute_name_3($ctxt,$_t2);

$ctxt->writeToOutputStream("\" visibility=\"");

$_t3=$_la;

visibility_($ctxt,$_t3);

$ctxt->writeToOutputStream("\">\n</UML:Attribute>\n");

2 PHP function which performs the inline-expansion of the attribute template.

+ ( / - * - + ( #! ( ) ( (

(

(16)

Java code generation

2 )! - (/ ! / ( ( ( ( ( ( #! ( ) (

3 * " 9

' / / ( ( ) ( ( ( 7 - ( ! - *(

- - ( 7 Person )( -

.Name7 Firstname Age1

' ( (/ ) (/ #! ( ) / - -

(17)

//

// generated the 2004-10-05 at 09:53:27

//

Class Person

{

public Person(){}

public String name;

public String firstName;

public int age;

} // end Person

: 9 "

(/ / / ! - *( Age - (private7 + ) (

() 2 (- ( (/ ) ( 7 / ) ( (

//

// generated the 2004-10-05 at 09:45:49

//

Class Person

{

public Person(){}

public String name;

public String firstName;

public void setAge (int theAge) { age = theAge;

}

public int getAge() { return age;

}

private int age;

} // end Person

: 9 "

+ ) / / ( ( ( ( / 4 (

) ( ! ( - ( ! - *( -

' ( (/ ) ( ( ( ( ( - ( #! '

- - ( ( ( J ./ ( -

- 1 ( ( ( - -

(18)

% ! " " " 9 !

' 5 ( + ( ( -* /( ( ( * C

c.attribute->select(Visibility != #Public)

( Getters and Setters ; ( , 7 ( ! * c.attribute->select(Visibility == #Public)

( Public Attributes ; ( ,

' ( (/ ) (/ + ( ( - ( #!

(19)

' 4 " " " 9

( ' 0 ) ( * *( ( + ' <br> ) ( - 4 / <blockquote> ) + ' Value Displayer

/ 7 ( ) ( ( ( ( ' 7 /(

( ( * ( - - ) (

( ( *7 / ( * - - 7

( ( * ( )

' + (/ + ( ( ) ( ( )

( ( ' / - + - ( #!

( - / ! ( - ! - *

( 4 "

) 7 ' 0 ) ( + 7 ! * . Name

Type1 ( - ./ - ( 1

(20)

References

8

7 7 # 9 $! 7 0@K=7 6 (-

:KK=

:

J *"7 0 J 7 # #"$"% 7

7 ( ( * 7 ! 7 :L.M1C ??N ?NL7 # *:KK:

=

' . ( (17 4 7 J )( O $ 7 O 0 - ( 6 . 17

! " # $ 7 ,( ( ( , 7 B(

??7 ( 8K7 == =P7 6 (- :KK8

?

, 4 ( 7 % & ' ( ) ( 2 *

( ( <8 ( . (! - 8N7 :KK81

Références

Documents relatifs

To test whether the vesicular pool of Atat1 promotes the acetyl- ation of -tubulin in MTs, we isolated subcellular fractions from newborn mouse cortices and then assessed

Néanmoins, la dualité des acides (Lewis et Bronsted) est un système dispendieux, dont le recyclage est une opération complexe et par conséquent difficilement applicable à

Cette mutation familiale du gène MME est une substitution d’une base guanine par une base adenine sur le chromosome 3q25.2, ce qui induit un remplacement d’un acide aminé cystéine

En ouvrant cette page avec Netscape composer, vous verrez que le cadre prévu pour accueillir le panoramique a une taille déterminée, choisie par les concepteurs des hyperpaysages

Chaque séance durera deux heures, mais dans la seconde, seule la première heure sera consacrée à l'expérimentation décrite ici ; durant la seconde, les élèves travailleront sur

A time-varying respiratory elastance model is developed with a negative elastic component (E demand ), to describe the driving pressure generated during a patient initiated

The aim of this study was to assess, in three experimental fields representative of the various topoclimatological zones of Luxembourg, the impact of timing of fungicide

Attention to a relation ontology [...] refocuses security discourses to better reflect and appreciate three forms of interconnection that are not sufficiently attended to