<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">A Declarative Approach to Heterogeneous Multi-Mode Modelling Languages</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Tony</forename><surname>Clark</surname></persName>
							<email>t.n.clark@mdx.ac.uk</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Middlesex University</orgName>
								<address>
									<settlement>London</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">A Declarative Approach to Heterogeneous Multi-Mode Modelling Languages</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">8CB20516DB7F34CB1CE9941731A5FBA9</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-25T06:56+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><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></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>Domain Specific Languages (DSLs) <ref type="bibr" target="#b24">[25,</ref><ref type="bibr" target="#b16">17]</ref> are motivated by the need to define languages that match specific 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 <ref type="bibr" target="#b7">[8]</ref>, MontiCore <ref type="bibr" target="#b14">[15,</ref><ref type="bibr" target="#b15">16]</ref>, TCS <ref type="bibr" target="#b9">[10]</ref>, and XText <ref type="bibr" target="#b5">[6]</ref>, MPS and Spoofax <ref type="bibr" target="#b10">[11]</ref> allow a DSL to be quickly and conveniently defined and the associated tooling generated. These technologies are mainly based on grammarware <ref type="bibr" target="#b11">[12]</ref> 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 <ref type="bibr" target="#b6">[7]</ref> 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 definition and tooling of DSLs containing graphical syntax elements. Exceptions include Eugenia <ref type="bibr" target="#b12">[13,</ref><ref type="bibr" target="#b13">14]</ref>, GMF <ref type="bibr" target="#b8">[9]</ref>, MetaEdit+ <ref type="bibr" target="#b22">[23]</ref>.</p><p>There has been increasing attention to heterogeneous (mixing graphical and textual notations) <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b20">21,</ref><ref type="bibr" target="#b4">5,</ref><ref type="bibr" target="#b19">20]</ref>. Intentional Software and MPS are both developing tools that support projectional editors <ref type="bibr" target="#b21">[22]</ref>. A recent model-based approach to mixing text and graphical languages is described in <ref type="bibr" target="#b1">[2]</ref> 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 Fig. <ref type="figure">1</ref>: Defining the Game involve multiple modes, minimally definition and subsequent use. Other modes include debugging and using a language from the perspective of different 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 definition 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 define 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Example</head><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 off in a room with a red key. The aim of the game is to visit all the rooms and unlock all the cages. Figure <ref type="figure">1</ref> shows the definition 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-defined 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 <ref type="figure" target="#fig_0">2</ref> shows play mode. The player starts in the blue room with a red key. The player makes a move by pressing the first 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 <ref type="figure">1</ref> shows a blue dot that is used to create roomnodes, but in general a language may offer many different types of item. Figure <ref type="figure" target="#fig_0">2</ref> shows that the state of the game is projected to become formatted text. Figure <ref type="figure">3</ref> shows how the editor that is generated from the language definition 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Declarative Language Definition</head><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 define the terms used to represent abstract syntax.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Syntax Trees and Transformations</head><p>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 Where the identity of a term is not important it is omitted and assumed to be unique. 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-defined.</p><p>The editor displays a concrete syntax tree, and then waits for a user-event. The set of user-events is pre-defined; 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 → 10}(f[0](X))=f[0] <ref type="bibr" target="#b9">(10)</ref>.</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 →[1,2,3]}(f(X...,10))=f(1,2,3,10). Repeated patterns need not be atomic as in the following example: {X →[1,2,3]}(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 definitions. A local function definition 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 definitions then the term x(f(L)) in the context of these definitions will be transformed to x(g <ref type="bibr" target="#b9">(10)</ref>). </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Fig. 4: Projectional Editor Algorithm</head><p>A rule r is a pattern and an expression p → e. Given a tree, t, and some local definitions 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 defined in figure <ref type="figure">4</ref>. 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 definitions, 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</p><formula xml:id="formula_0">t ← e.</formula><p>The procedure transform is used to apply rules to a tree in the context of some local definitions. 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).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Normal Forms</head><p>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. Different editors may define different 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:</p><p>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 define 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3">Abstract Syntax</head><p>The editor must start with an initial abstract syntax structure. This is defined by an abstract clause in the language definition that corresponds roughly to a type definition 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 filling the hole with e1 or e2. For example:</p><formula xml:id="formula_1">1 abstract { 2 numbers → number* 3 number → zero | add(number)</formula><p>represents an abstract syntax tree that is generated from the first rule (numbers).</p><p>Since the first 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 fixed, the actual representation of terms of the form add(add(zero)) will depend on the reduction rules that map it into a normal form.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Game Implementation</head><p>This section describes the game implementation in terms of the abstract syntax definition, the locals, the transformation rules and the reduction rules. The abstract syntax for the game is:</p><formula xml:id="formula_2">1 abstract { 2 game</formula><p>→ game(construct,map(rooms(room*),exits),player)</p><formula xml:id="formula_3">3 room → room(colour,empty | cage) 4 colour → red | green | blue 5 cage → cage(colour,colour) }</formula><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. The locals defines 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:</p><p>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: 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 <ref type="bibr" target="#b14">15,</ref><ref type="bibr" target="#b15">16)</ref>. The reduction rules transform the current state of the game into a normal-form ready for display by the editor: 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.</p><formula xml:id="formula_4">1 transform { 2 game(_,</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Implementation</head><p>The editor described in this paper has been implemented in the programming language Racket and used to define a range of heterogeneous languages. An implementation pack accompanies this paper 1 . 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 definitions language-definitions.rkt. Once you have installed the editor, navigate to the bin directory and start the tool before dragging any of the xml files onto the editor pane to load up the language definition. The pack includes the game language definition, an example adventure, a use-cases implementation of hotel booking and a library class diagram. See the language definitions for more details. 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., <ref type="bibr" target="#b3">[4]</ref>); 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 definition 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 identifiers and undefined functors. Some aspects of static checking should be easy to achieve, however it would also be desirable to define 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 <ref type="bibr" target="#b23">[24,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b17">18,</ref><ref type="bibr" target="#b18">19]</ref>. 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 suffer from such problems. However, there are still significant issues to be addressed and this could be a fruitful area for future work.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 2 :</head><label>2</label><figDesc>Fig. 2: Playing the Game</figDesc><graphic coords="3,136.69,581.65,169.46,61.02" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>. . . , in](t 1 , . . , t n ) where t i = transform(rules,locals,t i )</figDesc><table><row><cell cols="2">1 proc transition(tree,locals,transformations,reductions,table) {</cell></row><row><cell>2</cell><cell>while(true) {</cell></row><row><cell>3</cell><cell>tree := transform(transformations,locals,tree);</cell></row><row><cell>4</cell><cell>let tree' := transform(reductions,tree) such that tree' ∈ N</cell></row><row><cell>5</cell><cell>table := display(tree',table);</cell></row><row><cell>6</cell><cell>tree := get_event(tree',tree,table);</cell></row><row><cell>7</cell><cell>}</cell></row><row><cell>8 }</cell><cell></cell></row><row><cell cols="2">9 fun transform(rules,locals,tree) {</cell></row><row><cell>10</cell><cell>while ∃ p → e ∈ rules and ∃ E ∈ E such that I ⊆ E and E(p) = tree do {</cell></row><row><cell>11</cell><cell>tree := E(e)</cell></row><row><cell>12</cell><cell>}</cell></row><row><cell>13</cell><cell>let f[i1, . . . , in](t1, . . . , tn) = tree</cell></row><row><cell cols="2">14 tree' = f[i1, 15 if tree' = tree</cell></row><row><cell>16</cell><cell>then return tree</cell></row><row><cell>17</cell><cell>else return transform(rules,locals,tree')</cell></row><row><cell>18 }</cell><cell></cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">http://www.eis.mdx.ac.uk/staffpages/tonyclark/Software/projectional_ editor_demo.zip</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Domain specific languages with graphical and textual views</title>
		<author>
			<persName><forename type="first">Francisco</forename><surname>Pérez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andrés</forename></persName>
		</author>
		<author>
			<persName><forename type="first">Juan</forename><surname>De Lara</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Esther</forename><surname>Guerra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Applications of Graph Transformations with Industrial Relevance</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="82" to="97" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Harmonizing textual and graphical visualizations of domain specific models</title>
		<author>
			<persName><forename type="first">Colin</forename><surname>Atkinson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ralph</forename><surname>Gerbig</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Second Workshop on Graphical Modeling Language Development</title>
				<meeting>the Second Workshop on Graphical Modeling Language Development</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2013">2013</date>
			<biblScope unit="page" from="32" to="41" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Sectional domain specific languages</title>
		<author>
			<persName><forename type="first">Walter</forename><surname>Cazzola</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ivan</forename><surname>Speziale</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 4th workshop on Domain-specific aspect languages</title>
				<meeting>the 4th workshop on Domain-specific aspect languages</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Parsing composed grammars with language boxes</title>
		<author>
			<persName><forename type="first">Lukas</forename><surname>Diekmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Laurence</forename><surname>Tratt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop on Scalable Language Specifications</title>
				<imprint>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Integrating textual and graphical modelling languages</title>
		<author>
			<persName><forename type="first">Luc</forename><surname>Engelen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mark</forename><surname>Van Den</surname></persName>
		</author>
		<author>
			<persName><surname>Brand</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Electronic Notes in Theoretical Computer Science</title>
		<imprint>
			<biblScope unit="volume">253</biblScope>
			<biblScope unit="issue">7</biblScope>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Xtext: implement your language faster than the quick and dirty way</title>
		<author>
			<persName><forename type="first">Moritz</forename><surname>Eysholdt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Heiko</forename><surname>Behrens</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion</title>
				<meeting>the ACM international conference companion on Object oriented programming systems languages and applications companion</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="307" to="309" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m" type="main">Language workbenches: The killer-app for domain specific languages</title>
		<author>
			<persName><forename type="first">Martin</forename><surname>Fowler</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Derivation and refinement of textual syntax for models</title>
		<author>
			<persName><forename type="first">Florian</forename><surname>Heidenreich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jendrik</forename><surname>Johannes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sven</forename><surname>Karol</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mirko</forename><surname>Seifert</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Christian</forename><surname>Wende</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model Driven Architecture-Foundations and Applications</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="114" to="129" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Language evolution in practice: The history of gmf</title>
		<author>
			<persName><forename type="first">Markus</forename><surname>Herrmannsdoerfer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Daniel</forename><surname>Ratiu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Guido</forename><surname>Wachsmuth</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Language Engineering</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="3" to="22" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Tcs:: a dsl for the specification of textual concrete syntaxes in model engineering</title>
		<author>
			<persName><forename type="first">Frédéric</forename><surname>Jouault</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jean</forename><surname>Bézivin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ivan</forename><surname>Kurtev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 5th international conference on Generative programming and component engineering</title>
				<meeting>the 5th international conference on Generative programming and component engineering</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="249" to="254" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">The spoofax language workbench: rules for declarative specification of languages and ides</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">L</forename><surname>Lennart</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eelco</forename><surname>Kats</surname></persName>
		</author>
		<author>
			<persName><surname>Visser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Sigplan Notices</title>
		<imprint>
			<biblScope unit="volume">45</biblScope>
			<biblScope unit="page" from="444" to="463" />
			<date type="published" when="2010">2010</date>
			<publisher>ACM</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Toward an engineering discipline for grammarware</title>
		<author>
			<persName><forename type="first">Paul</forename><surname>Klint</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ralf</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Chris</forename><surname>Verhoef</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Software Engineering and Methodology (TOSEM)</title>
		<imprint>
			<biblScope unit="volume">14</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="331" to="380" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Taming emf and gmf using model transformation</title>
		<author>
			<persName><forename type="first">Louis</forename><forename type="middle">M</forename><surname>Dimitrios S Kolovos</surname></persName>
		</author>
		<author>
			<persName><surname>Rose</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Richard</forename><forename type="middle">F</forename><surname>Saad Bin Abid</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Fiona</forename><forename type="middle">Ac</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Goetz</forename><surname>Polack</surname></persName>
		</author>
		<author>
			<persName><surname>Botterweck</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model Driven Engineering Languages and Systems</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Raising the level of abstraction in the development of gmf-based graphical model editors</title>
		<author>
			<persName><forename type="first">Louis</forename><forename type="middle">M</forename><surname>Dimitrios S Kolovos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Richard</forename><forename type="middle">F</forename><surname>Rose</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Fiona</forename><forename type="middle">Ac</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><surname>Polack</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2009 ICSE Workshop on Modeling in Software Engineering</title>
				<meeting>the 2009 ICSE Workshop on Modeling in Software Engineering</meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="13" to="19" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Monticore: Modular development of textual domain specific languages</title>
		<author>
			<persName><forename type="first">Bernhard</forename><surname>Holger Krahn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Steven</forename><surname>Rumpe</surname></persName>
		</author>
		<author>
			<persName><surname>Völkel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Objects, Components, Models and Patterns</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="297" to="315" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Monticore: a framework for compositional development of domain specific languages</title>
		<author>
			<persName><forename type="first">Bernhard</forename><surname>Holger Krahn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Steven</forename><surname>Rumpe</surname></persName>
		</author>
		<author>
			<persName><surname>Völkel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International journal on software tools for technology transfer</title>
		<imprint>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="353" to="372" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">When and how to develop domain-specific languages</title>
		<author>
			<persName><forename type="first">Marjan</forename><surname>Mernik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jan</forename><surname>Heering</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Anthony</forename><forename type="middle">M</forename><surname>Sloane</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM computing surveys (CSUR)</title>
		<imprint>
			<biblScope unit="volume">37</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="316" to="344" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Language boxes</title>
		<author>
			<persName><forename type="first">Lukas</forename><surname>Renggli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marcus</forename><surname>Denker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Oscar</forename><surname>Nierstrasz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Language Engineering</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="274" to="293" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Towards model and language composition</title>
		<author>
			<persName><forename type="first">Bernhard</forename><surname>Rumpe</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the First Workshop on the Globalization of Domain Specific Languages</title>
				<meeting>the First Workshop on the Globalization of Domain Specific Languages</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Textual modelling embedded into graphical modelling</title>
		<author>
			<persName><forename type="first">Markus</forename><surname>Scheidgen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model Driven Architecture-Foundations and Applications</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="153" to="168" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">On integrating graphical and textual modeling</title>
		<author>
			<persName><forename type="first">Christian</forename><surname>Schneider</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Real-Time and Embedded Systems Group</title>
				<imprint>
			<date type="published" when="2011">2011</date>
		</imprint>
		<respStmt>
			<orgName>Christian-Albrechts-Universität zu Kiel</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Intentional software</title>
		<author>
			<persName><forename type="first">Charles</forename><surname>Simonyi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Magnus</forename><surname>Christerson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Shane</forename><surname>Clifford</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 21th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2006</title>
				<editor>
			<persName><forename type="first">Peri</forename><forename type="middle">L</forename><surname>Tarr</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">William</forename><forename type="middle">R</forename><surname>Cook</surname></persName>
		</editor>
		<meeting>the 21th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2006<address><addrLine>Portland, Oregon, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2006">October 22-26, 2006. 2006</date>
			<biblScope unit="page" from="451" to="464" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Metaedit+: defining and using integrated domain-specific modeling languages</title>
		<author>
			<persName><forename type="first">Juha-Pekka</forename><surname>Tolvanen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Steven</forename><surname>Kelly</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications</title>
				<meeting>the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="819" to="820" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">A model-based approach to language integration</title>
		<author>
			<persName><forename type="first">Federico</forename><surname>Tomassetti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Antonio</forename><surname>Vetró</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marco</forename><surname>Torchiano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Markus</forename><surname>Voelter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bernd</forename><surname>Kolb</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Modeling in Software Engineering (MiSE), 2013 5th International Workshop on</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">Domain-specific languages: An annotated bibliography</title>
		<author>
			<persName><forename type="first">Arie</forename><surname>Van Deursen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Paul</forename><surname>Klint</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Joost</forename><surname>Visser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Sigplan Notices</title>
		<imprint>
			<biblScope unit="volume">35</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="26" to="36" />
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
