<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Declarative Approach to Heterogeneous Multi-Mode Modelling Languages</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Tony Clark</string-name>
          <email>t.n.clark@mdx.ac.uk</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science, Middlesex University</institution>
          ,
          <addr-line>London</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper proposes a declarative approach to multi-mode heterogeneous DSLs based on term rewriting. The paper presents a data model and algorithm for processing syntax structures. It has been validated by an implementation that supports a range of languages. The paper includes an example language that supports both game construction and execution.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Domain Speci c Languages (DSLs) [
        <xref ref-type="bibr" rid="ref17 ref25">25, 17</xref>
        ] are motivated by the need to de ne
languages that match speci c use-cases, as opposed to General Purpose
Languages (GPLs). Whilst GPLs are usually supported by standard text editors,
DSLs, by their nature, often contain a range of more exotic syntax elements
that are arguably better supported by syntax-aware editors. This has led to the
development of a range of technologies to support DSL development and that
generate tools for each DSL. Where the DSL is limited to text, languages such as
EMFText [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], MontiCore [
        <xref ref-type="bibr" rid="ref15 ref16">15, 16</xref>
        ], TCS [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], and XText [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], MPS and Spoofax [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]
allow a DSL to be quickly and conveniently de ned and the associated tooling
generated. These technologies are mainly based on grammarware [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] that
integrate language parsers with editors in order to achieve a workbench. Many of the
technologies integrate static and dynamic analysis of the resulting DSL. These
technologies have become quite mature and the term Language Workbench [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
has been coined to describe this type of engineering tool.
      </p>
      <p>
        Whilst languages used for programming or scripting tend to be exclusively
text-based, modelling languages have included a much wider palette of elements.
UML for example, has a number of sub-languages that are based on graphs, but
also includes text in the form of OCL and action languages. Relatively few
technologies support the de nition and tooling of DSLs containing graphical
syntax elements. Exceptions include Eugenia [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ], GMF [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], MetaEdit+ [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ].
      </p>
      <p>
        There has been increasing attention to heterogeneous (mixing graphical and
textual notations) [
        <xref ref-type="bibr" rid="ref1 ref20 ref21 ref5">1, 21, 5, 20</xref>
        ]. Intentional Software and MPS are both
developing tools that support projectional editors [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. A recent model-based approach
to mixing text and graphical languages is described in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] that uses projectional
editing techniques over a model. Whilst most of the reported work agrees on the
general principles and proposed approaches, there has been little work on
providing a concrete heterogeneous approach. In addition, most language use-cases
involve multiple modes, minimally de nition and subsequent use. Other modes
include debugging and using a language from the perspective of di erent
stakeholders. Most DSL technologies do not support multi-mode interaction within
the same tool-set.
      </p>
      <p>This paper presents a novel declarative approach to the de nition and
associated tooling for heterogeneous multi-mode DSLs. The contribution is to propose
that simple term rewriting can be used as the basis of this approach. This paper
describes an algorithm that is suitable for this purpose and demonstrates how the
declarative approach can be used to de ne a multi-mode heterogeneous DSL for
building and playing a game. The approach has been validated by implementing
the algorithm and the associated tool can be downloaded with examples.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Example</title>
      <p>Consider a game that involves a collection of rooms that are connected by
corridors. A room is either empty or contains a locked cage. The cage is painted red,
green or blue. Inside the cage is a painted key. A key can be used to unlock a
cage of the same colour and get the key inside. The player starts o in a room
with a red key. The aim of the game is to visit all the rooms and unlock all the
cages. Figure 1 shows the de nition of a dungeon using the language editor for
game construction. Rooms are created as nodes and corridors as labelled edges.
The text in a room-node shows the colour of the room, the colour of a cage
and the colour of the key in the cage. The blue dot at the top-left corner of
the tool is used to access a room-creation menu. Edges between room-nodes are
created by dragging the mouse from a source node to the target (a menu is used
to select a direction). When a room-node is created, its colour and contents are
uninitialised: the mouse is used to select from pre-de ned colours for the room,
cage and key.</p>
      <p>The language operates in two modes: creation and play, it is possible to
switch between the modes by pressing p and c on the keyboard. Figure 2 shows
play mode. The player starts in the blue room with a red key. The player makes
a move by pressing the rst letter of the direction on the keyboard. Since the
player does not have a green key they must move from the starting room; they
press n to go north and arrive at a green room with a red cage. The player can
open the cage since their key matches the cage colour. This is done by pressing
u on the keyboard. Finally, the player goes back south.</p>
      <p>The game shows a number of features of the projectional editor. Interaction
with the language can be moded; in this example there are two modes, but in
general there can be any number. The abstract syntax can be projected on to
graphs and text. In addition, language features can be created by menus made
available as blue-dots. Figure 1 shows a blue dot that is used to create
roomnodes, but in general a language may o er many di erent types of item. Figure
2 shows that the state of the game is projected to become formatted text. Figure
3 shows how the editor that is generated from the language de nition supports
creation of language elements: (a) creation of a new room element; (b) selection
of a room colour; (c) selection of a type of edge between rooms.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Declarative Language De nition</title>
      <p>The approach uses a simple term representation for both concrete and abstract
syntax, and uses term rewriting as the technology to support all language modes.
Section 3.1 describes the data representation and an rewriting algorithm, section
3.2 describes how concrete syntax is represented as trees in normal forms, and
section 3.3 describes how rules are used to de ne the terms used to represent
abstract syntax.
3.1</p>
      <p>Syntax Trees and Transformations
The DSL editor manages a syntax tree. A tree is in one of a number of forms:
atomic in which case it is a string, number, char or boolean; term in which case
it has the form f[i1,...im](t1,...,tn) where f is the term-functor which is a
(a) Starting State
(b) Move 'n'
(c) Unlock 'u'</p>
      <p>(d) Move 's'</p>
      <p>Fig. 2: Playing the Game
(a) Room Creation
(b) Setting Room Colour</p>
      <p>(c) Edge Creation
name, i1,...,im is the identity of the term, and ti are sub-trees. The identity of
a term is used to associate a term with layout information. Where the identity
of a term is not important it is omitted and assumed to be unique.</p>
      <p>The editor works by creating an initial tree referred to as abstract syntax.
The abstract syntax tree is transformed into a concrete syntax tree by applying
pattern directed transformation rules. Concrete syntax is a tree whose
termfunctors are pre-de ned.</p>
      <p>The editor displays a concrete syntax tree, and then waits for a user-event.
The set of user-events is pre-de ned; each event is mapped on to a term whose
functor designates the type of event: key, selected, drag, etc. The abstract syntax
tree t and the new event-term e are combined into a new term whose functor is
, written t e. The transformation process is repeated, allowing rules that
process e to transform t appropriately.</p>
      <p>Transformation rules have the form p ! e where p is a pattern and e is an
expression. A pattern is a tree that contains variables. A variable is just a name
that starts with an upper-case letter. An environment E associates variables
with either trees or lists of trees, and associates functors with functions. An
environment that contains no lists is applied to a pattern to create a tree E(p)=t.
For example, {X 7! 10}(f[0](X))=f[0](10).</p>
      <p>Patterns may be repeated. Such a pattern must be nested within a
parent pattern and is followed by ... The informal meaning of such a pattern is
`match as many elements as possible then continue'. For example, the pattern
f[0](p...,10) will match a term whose functor is f, whose identity is 0 and whose
children end with 10, providing that all other children each match pattern p.</p>
      <p>
        An environment that applies to a pattern containing repeated sub-patterns
will contain mappings between variables and lists of trees. For example,
{X 7![
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1,2,3</xref>
        ]}(f(X...,10))=f(1,2,3,10). Repeated patterns need not be atomic
as in the following example: {X 7![
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1,2,3</xref>
        ]}(f(g(X)...,10))=f(g(1),g(2),g(3),10).
      </p>
      <p>Expressions are patterns that can refer to local variables and local function
de nitions. A local function de nition is a collection of rules that are selectively
applied to part of a tree. For example, if L=10 and f(A)=g(A) are local de nitions
then the term x(f(L)) in the context of these de nitions will be transformed to
x(g(10)).
}
let f[i1; : : : ; in](t1; : : : ; tn) = tree
tree' = f[i1; : : : ; in](t01; : : : ; t0n) where t0i = transform(rules,locals,t0i)
if tree' = tree
then return tree
else return transform(rules,locals,tree')</p>
      <p>E and E(p) = tree do {</p>
      <p>A rule r is a pattern and an expression p ! e. Given a tree, t, and some
local de nitions L, r is applicable when there is an environment E that contains
L for which E(p)=t. The result of applying the rule to t is then E(e).</p>
      <p>The behaviour of the editor is de ned in gure 4. The procedure transition
performs a loop that transforms the abstract to the concrete syntax tree, displays
the concrete syntax tree and then waits for a user event. The arguments of
transition are: the abstract syntax tree, the local de nitions, two sets of rules
transformations and reductions, and a table that maps term identities to layout
information.</p>
      <p>Line 3 uses the transformation rules to change the current abstract syntax
tree. This allows events to be change the state of the tree. Line 4 uses the
reduction rules to transform the tree into a normal form, i.e., a member of the
set of trees N that can be drawn by the editor. The resulting concrete syntax
tree' is displayed by the editor in line 5 using the table to remember the layout
information on each loop within the procedure transition.</p>
      <p>Line 6 waits for a user event. Such an event will occur with respect to the
concrete syntax, so the table is used to make the correspondence between
elements in tree' and in tree, resulting in a new abstract syntax tree of the form
t e.</p>
      <p>The procedure transform is used to apply rules to a tree in the context of
some local de nitions. Lines 11-13 continually select a rule that is applicable and
updates the tree. Once there are no more applicable rules, line 15 transforms the
children of the tree. If any children have changed then the process is repeated
(line 18) otherwise no more rules are applicable to any part of the tree and it is
returned (line 17).
The set N of normal forms contains trees whose functors and structure
correspond to concrete syntax elements that can be drawn on a screen and that
can respond to user events. Di erent editors may de ne di erent sets of normal
forms, for example a text-only editor may only support trees that correspond
to string layout, whereas a graph editor may only support trees representing
collections of nodes and edges.</p>
      <p>This paper uses a game to explain the key features of the projectional editor
approach to heterogeneous DSLs. The normal forms used by the game are:
atom Any atomic value is a normal form.
seq(t1,...,tn) The sub-tree normal forms are displayed in sequence.
nl Produce a new-line.
graph(etypes,nodes-and-edges) The graph is displayed on the screen and
supports selection, new edge, movement, resize, and mouse click events. The
identities of the nodes and edges are used to ensure that the layout is
consistent; therefore, a node with a fresh identity will cause a new node to
appear on the screen. The etypes de ne the permissible edge types, and
nodes-and-edges is a mixed sequence of nodes and edges.
edge-types(t1,...,tn) each ti is of the form type(source,target) where type
is the type designator for edges that can be drawn from nodes of type source
to nodes of type target.
node(ntype,i,display) where ntype designates the type of node, i is the
identity of the abstract syntax element represented by the node (for passing back
events on this node), and display is a normal form that is displayed when
this node is drawn.
edge(source,sdec,target,tdec,label) where source and target are the source
and target node identities, sdec and tdec are the edge-end decorations for
the source and target, and label is a label on the edge.
vbox(pelements) A vertical box of elements that are all of the form l(e) where
l is one of the layout designators: centre; left; right.
3.3
The editor must start with an initial abstract syntax structure. This is de ned
by an abstract clause in the language de nition that corresponds roughly to
a type de nition for abstract syntax trees. The clause consists of a number of
rules of the form name ! element where element is one of: a term of the form
f(e1,...,en) where each ei is an element; str in which case the element denotes
an editable string in the concrete syntax; e* where e is an element in which
case the abstract syntax denotes a sequence of e's of arbitrary length, and is
manifest in the concrete syntax in the form of a hole that can be selected and
incrementally extended via a menu; a disjunction e1 | e2 which will manifest
itself in the concrete syntax as a hole associated with a menu that allows the
user to choose between lling the hole with e1 or e2. For example:
represents an abstract syntax tree that is generated from the rst rule (numbers).
Since the rst rule is number* we do not know how many instances of number to
generate, so a hole is displayed allowing the user to generate a number followed
by another hole, or to delete the hole (completing the sequence). A number also
generates a hole allowing the user to choose between replacing the hole with a
zero or a tree containing another number. Although the display of the holes is
xed, the actual representation of terms of the form add(add(zero)) will depend
on the reduction rules that map it into a normal form.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Game Implementation</title>
      <p>This section describes the game implementation in terms of the abstract
syntax de nition, the locals, the transformation rules and the reduction rules. The
abstract syntax for the game is:
1 abstract {
2 game ! game(construct,map(rooms(room*),exits),player)
3 room ! room(colour,empty | cage)
4 colour ! red | green | blue
5 cage ! cage(colour,colour) }</p>
      <p>The game is initially in construct mode which means that it will be displayed
as a graph and allow new rooms and exits to be added. The map contains an
extensible sequence of rooms and empty exits and player terms. A room has a
colour and is either empty or contains a cage. A cage term contains two colours,
one for the cage-lock and the other for the key in the cage.</p>
      <p>The locals de nes the edge types used between room-nodes and a function
called exits-from that is used to map a room id and a list of all exits from all
rooms, to just the exits from the designated room:
1 locals {
2 E = edge-types(n(room,room),s(room,room),e(room,room),w(room,room))
3 exits-from(I,Exits) =
4 case Exits {
5 exits ! nil
6 exits(exit(D,I,_),Exit...) ! cons(D,exits-from(I,exits(Exit...)))
7 exits(_,Exit...) ! exits-from(I,exits(Exit...)) } }</p>
      <p>The transformation rules are used to handle user events and use pattern
matching to dispatch on the state of the game:
1 transform {
2 game(_,map(rooms(Room[I](Colour,Contents),R...),Exits),_) #p !
3 game(play,map(rooms(Room[I](Colour,Contents),R...),Exits),player(I,red))
4 game(_,map(Rooms,Exits),Player) #c ! game(construct,map(Rooms,Exits),Player)
5 game(play,map(Rooms,exits(X1...,exit(n,S,T),X2...)),player(S,Carrying)) #n !
6 game(play,map(Rooms,exits(X1...,exit(n,S,T),X2...)),player(T,Carrying))
7 game(play,map(Rooms,exits(X1...,exit(s,S,T),X2...)),player(S,Carrying)) #s !
8 game(play,map(Rooms,exits(X1...,exit(s,S,T),X2...)),player(T,Carrying))
9 game(play,map(Rooms,exits(X1...,exit(e,S,T),X2...)),player(S,Carrying)) #e !
10 game(play,map(Rooms,exits(X1...,exit(e,S,T),X2...)),player(T,Carrying))
11 game(play,map(Rooms,exits(X1...,exit(w,S,T),X2...)),player(S,Carrying)) #w !
12 game(play,map(Rooms,exits(X1...,exit(w,S,T),X2...)),player(T,Carrying))
13 game(play,map(rooms(R1...,Room[I](C,cage(C-Col,K-Col)),R2...),X),player(I,C-Col))
14 game(play,map(rooms(R1...,Room[I](C,empty),R2...),X),player(I,K-Col))
15 game(construct,map(R,exits(E...)),Player) new-edge(Type,S,T) !
16 game(construct,map(R,exits(exit(Type,S,T),E...)),Player)
17 }
#u !
If the user presses the p key at any time (line 2) then the game changes state
to play. If the user presses n when the game is in play (line 5), and if there is
an exit north from the player's current location S then the abstract syntax tree
transforms into a new state where the player's current location is T. The player
can unlock a cage using key u (line 13). Finally, if the game is in construct
mode and the user drags an edge between two graph nodes, then the message
new-edge(t,s,t) is send to the tree causing a new exit to be added to the map
(lines 15,16). The reduction rules transform the current state of the game into
a normal-form ready for display by the editor:
1 reduce {
2 game(play,map(rooms(R1...,Room[I](Col,Contents),R2...),exits(Exit...)),player(I,Carry)) !
3 player2str(Carry,Col,Contents,exits-from(I,exits(Exit...)))
4 game(construct,map(rooms(R...),exits(X...)),_) ! graph(E,room2n(R)...,exit2e(X)...)
5 player2str(Carry,Col,Contents,X) !
6 seq('You are in a ',Col,' room.',nl,carry(Carry),contents(Contents),exits(X))
7 carry(Key-Colour) ! seq('You are carrying a ',Key-Colour,' key.',nl)
8 contents(empty) ! seq('There is nothing in the room.',nl)
9 contents(cage(C-Col,K-Col)) !
10 seq('There is a ',C-Col,' cage here that contains a ',K-Col,' key.',nl)
11 exits(nil) ! 'No more exits.'
12 exits(cons(Exit,Exits)) ! seq('There is an exit ',Exit,nl,exits(Exits))
13 exit2e(Exit[I](Type,S,T)) ! edge[I](S,none,T,arrow,label['direction',I](target,Type))
14 n ! 'north'
15 s ! 'south'
16 e ! 'east'
17 w ! 'west'
18 room2n(Hole[I](H)) ! node['new-room',I](new-room,I,H)
19 room2n(Room[I](Col,Stuff)) !
20 node['room',I](room,I,vbox['b',I](centre(seq('A ',Col,' room.')),centre(Stuff)))
21 red ! 'red'
22 green ! 'green'
23 blue ! 'blue'
2245 ecmapgtey(Ca!ge-'Ceomlpotuyr',Key-Colour) ! seq('cage = ',Cage-Colour,nl,'key = ',Key-Colour)
26 }</p>
      <p>Lines 1 - 4 show the two rules that detect whether the game is being constructed
or played. If played, then the game state is translated into text. If constructed
then the game state is translated to a graph.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Implementation</title>
      <p>The editor described in this paper has been implemented in the programming
language Racket and used to de ne a range of heterogeneous languages. An
implementation pack accompanies this paper1. The pack includes a Mac disk image
stand-alone-editor.dmg of the editor implementation, several saved languages
(*.xml) and the source code of the language de nitions language-definitions.rkt.
Once you have installed the editor, navigate to the bin directory and start the
tool before dragging any of the xml les onto the editor pane to load up the
language de nition. The pack includes the game language de nition, an
example adventure, a use-cases implementation of hotel booking and a library class
diagram. See the language de nitions for more details.
1 http://www.eis.mdx.ac.uk/staffpages/tonyclark/Software/projectional_
editor_demo.zip</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion and Future Directions</title>
      <p>
        This paper has proposed a declarative approach to multi-mode heterogeneous
DSLs. The approach freely mixes graphical and textual syntax and an algorithm
has been presented to process the syntax structures. The algorithm has been
validated by an implementation, but leaves room for future development. The
approach is structural whilst other approaches integrate text parsing with
projectional editing (e.g., [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]); it may be possible to integrate both approaches. The
meta-language described in this paper provides no support for error handling
and will simply go wrong if the rules fail to produce a normal-form or if a
local rule de nition produces a tree of an unexpected type. One way to address
this is to have a separate category of rules that are used for checking and
error reporting. Related to this, the language does not support static checking.
For example, it should be possible to detect the use of unbound identi ers and
unde ned functors. Some aspects of static checking should be easy to achieve,
however it would also be desirable to de ne a type system so that the use of
syntax structures can be checked before use. There is interest in the modularity and
composition of languages and DSLs in particular [
        <xref ref-type="bibr" rid="ref18 ref19 ref24 ref3">24, 3, 18, 19</xref>
        ]. A key challenge
to achieving engineered integration is posed by concrete syntax. By inverting
the focus of attention to abstract-syntax, a projectional editor does not su er
from such problems. However, there are still signi cant issues to be addressed
and this could be a fruitful area for future work.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. Francisco Perez Andres, Juan de Lara, and
          <string-name>
            <given-names>Esther</given-names>
            <surname>Guerra</surname>
          </string-name>
          .
          <article-title>Domain speci c languages with graphical and textual views</article-title>
          .
          <source>In Applications of Graph Transformations with Industrial Relevance</source>
          , pages
          <volume>82</volume>
          {
          <fpage>97</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Colin</given-names>
            <surname>Atkinson</surname>
          </string-name>
          and
          <string-name>
            <given-names>Ralph</given-names>
            <surname>Gerbig</surname>
          </string-name>
          .
          <article-title>Harmonizing textual and graphical visualizations of domain speci c models</article-title>
          .
          <source>In Proceedings of the Second Workshop on Graphical Modeling Language Development</source>
          , pages
          <volume>32</volume>
          {
          <fpage>41</fpage>
          . ACM,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Walter</given-names>
            <surname>Cazzola</surname>
          </string-name>
          and
          <string-name>
            <given-names>Ivan</given-names>
            <surname>Speziale</surname>
          </string-name>
          .
          <article-title>Sectional domain speci c languages</article-title>
          .
          <source>In Proceedings of the 4th workshop on Domain-speci c aspect languages. ACM</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Lukas</given-names>
            <surname>Diekmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>Laurence</given-names>
            <surname>Tratt</surname>
          </string-name>
          .
          <article-title>Parsing composed grammars with language boxes</article-title>
          .
          <source>Workshop on Scalable Language Speci cations</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Luc</given-names>
            <surname>Engelen</surname>
          </string-name>
          and Mark van den Brand.
          <article-title>Integrating textual and graphical modelling languages</article-title>
          .
          <source>Electronic Notes in Theoretical Computer Science</source>
          ,
          <volume>253</volume>
          (
          <issue>7</issue>
          ),
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Moritz</given-names>
            <surname>Eysholdt</surname>
          </string-name>
          and
          <string-name>
            <given-names>Heiko</given-names>
            <surname>Behrens</surname>
          </string-name>
          .
          <article-title>Xtext: implement your language faster than the quick and dirty way</article-title>
          .
          <source>In Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion</source>
          , pages
          <volume>307</volume>
          {
          <fpage>309</fpage>
          . ACM,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Martin</given-names>
            <surname>Fowler</surname>
          </string-name>
          .
          <article-title>Language workbenches: The killer-app for domain speci c languages</article-title>
          .
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Florian</given-names>
            <surname>Heidenreich</surname>
          </string-name>
          , Jendrik Johannes, Sven Karol, Mirko Seifert, and
          <string-name>
            <given-names>Christian</given-names>
            <surname>Wende</surname>
          </string-name>
          .
          <article-title>Derivation and re nement of textual syntax for models</article-title>
          .
          <source>In Model Driven Architecture-Foundations and Applications</source>
          , pages
          <volume>114</volume>
          {
          <fpage>129</fpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Markus</surname>
            <given-names>Herrmannsdoerfer</given-names>
          </string-name>
          , Daniel Ratiu, and
          <string-name>
            <given-names>Guido</given-names>
            <surname>Wachsmuth</surname>
          </string-name>
          .
          <article-title>Language evolution in practice: The history of gmf</article-title>
          .
          <source>In Software Language Engineering</source>
          , pages
          <fpage>3</fpage>
          <lpage>{</lpage>
          22. Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Frederic</surname>
            <given-names>Jouault</given-names>
          </string-name>
          , Jean Bezivin, and
          <string-name>
            <given-names>Ivan</given-names>
            <surname>Kurtev</surname>
          </string-name>
          . Tcs:
          <article-title>: a dsl for the speci cation of textual concrete syntaxes in model engineering</article-title>
          .
          <source>In Proceedings of the 5th international conference on Generative programming and component engineering</source>
          , pages
          <volume>249</volume>
          {
          <fpage>254</fpage>
          . ACM,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Lennart</surname>
            <given-names>CL</given-names>
          </string-name>
          <article-title>Kats and Eelco Visser. The spoofax language workbench: rules for declarative speci cation of languages and ides</article-title>
          .
          <source>In ACM Sigplan Notices</source>
          , volume
          <volume>45</volume>
          , pages
          <fpage>444</fpage>
          {
          <fpage>463</fpage>
          . ACM,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. Paul Klint, Ralf Lammel, and Chris Verhoef.
          <article-title>Toward an engineering discipline for grammarware</article-title>
          .
          <source>ACM Transactions on Software Engineering and Methodology (TOSEM)</source>
          ,
          <volume>14</volume>
          (
          <issue>3</issue>
          ):
          <volume>331</volume>
          {
          <fpage>380</fpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Dimitrios S Kolovos</surname>
          </string-name>
          , Louis M Rose, Saad Bin Abid, Richard F Paige,
          <article-title>Fiona AC Polack, and Goetz Botterweck. Taming emf and gmf using model transformation</article-title>
          .
          <source>In Model Driven Engineering Languages and Systems</source>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Dimitrios S Kolovos</surname>
          </string-name>
          , Louis M Rose, Richard F Paige,
          <article-title>and Fiona AC Polack. Raising the level of abstraction in the development of gmf-based graphical model editors</article-title>
          .
          <source>In Proceedings of the 2009 ICSE Workshop on Modeling in Software Engineering</source>
          , pages
          <volume>13</volume>
          {
          <fpage>19</fpage>
          . IEEE Computer Society,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Holger</surname>
            <given-names>Krahn</given-names>
          </string-name>
          , Bernhard Rumpe, and Steven Volkel. Monticore:
          <article-title>Modular development of textual domain speci c languages</article-title>
          .
          <source>In Objects, Components, Models and Patterns</source>
          , pages
          <volume>297</volume>
          {
          <fpage>315</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Holger</surname>
            <given-names>Krahn</given-names>
          </string-name>
          , Bernhard Rumpe, and
          <article-title>Steven Volkel. Monticore: a framework for compositional development of domain speci c languages</article-title>
          .
          <source>International journal on software tools for technology transfer</source>
          ,
          <volume>12</volume>
          (
          <issue>5</issue>
          ):
          <volume>353</volume>
          {
          <fpage>372</fpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Marjan</surname>
            <given-names>Mernik</given-names>
          </string-name>
          , Jan Heering, and
          <string-name>
            <surname>Anthony</surname>
            <given-names>M Sloane.</given-names>
          </string-name>
          <article-title>When and how to develop domain-speci c languages</article-title>
          .
          <source>ACM computing surveys (CSUR)</source>
          ,
          <volume>37</volume>
          (
          <issue>4</issue>
          ):
          <volume>316</volume>
          {
          <fpage>344</fpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Lukas</surname>
            <given-names>Renggli</given-names>
          </string-name>
          , Marcus Denker, and
          <string-name>
            <given-names>Oscar</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          .
          <article-title>Language boxes</article-title>
          .
          <source>In Software Language Engineering</source>
          , pages
          <volume>274</volume>
          {
          <fpage>293</fpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>Bernhard</given-names>
            <surname>Rumpe</surname>
          </string-name>
          .
          <article-title>Towards model and language composition</article-title>
          .
          <source>In Proceedings of the First Workshop on the Globalization of Domain Speci c Languages. ACM</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>Markus</given-names>
            <surname>Scheidgen</surname>
          </string-name>
          .
          <article-title>Textual modelling embedded into graphical modelling</article-title>
          .
          <source>In Model Driven Architecture{Foundations and Applications</source>
          , pages
          <volume>153</volume>
          {
          <fpage>168</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <given-names>Christian</given-names>
            <surname>Schneider</surname>
          </string-name>
          .
          <article-title>On integrating graphical and textual modeling</article-title>
          .
          <source>Real-Time and Embedded Systems Group, Christian-Albrechts-Universitat zu Kiel</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Charles</surname>
            <given-names>Simonyi</given-names>
          </string-name>
          , Magnus Christerson, and
          <article-title>Shane Cli ord</article-title>
          .
          <article-title>Intentional software</article-title>
          . In Peri L. Tarr and William R. Cook, editors,
          <source>Proceedings of the 21th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications</source>
          ,
          <source>OOPSLA 2006, October 22-26</source>
          ,
          <year>2006</year>
          , Portland, Oregon, USA, pages
          <volume>451</volume>
          {
          <fpage>464</fpage>
          . ACM,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Juha-Pekka Tolvanen</surname>
            and
            <given-names>Steven</given-names>
          </string-name>
          <string-name>
            <surname>Kelly</surname>
          </string-name>
          . Metaedit+:
          <article-title>de ning and using integrated domain-speci c modeling languages</article-title>
          .
          <source>In Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications</source>
          , pages
          <volume>819</volume>
          {
          <fpage>820</fpage>
          . ACM,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Federico</surname>
            <given-names>Tomassetti</given-names>
          </string-name>
          , Antonio Vetro, Marco Torchiano, Markus Voelter, and
          <string-name>
            <given-names>Bernd</given-names>
            <surname>Kolb</surname>
          </string-name>
          .
          <article-title>A model-based approach to language integration</article-title>
          .
          <source>In Modeling in Software Engineering (MiSE)</source>
          ,
          <year>2013</year>
          5th International Workshop on. IEEE,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25. Arie Van Deursen,
          <string-name>
            <given-names>Paul</given-names>
            <surname>Klint</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Joost</given-names>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>Domain-speci c languages: An annotated bibliography</article-title>
          .
          <source>Sigplan Notices</source>
          ,
          <volume>35</volume>
          (
          <issue>6</issue>
          ):
          <volume>26</volume>
          {
          <fpage>36</fpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>