<?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">Understanding Metalanguage Integration by Renarrating a Technical Space Megamodel</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Vadim</forename><surname>Zaytsev</surname></persName>
							<email>vadim@grammarware.net</email>
							<affiliation key="aff0">
								<orgName type="institution">Universiteit van Amsterdam</orgName>
								<address>
									<country key="NL">The Netherlands</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Understanding Metalanguage Integration by Renarrating a Technical Space Megamodel</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">E1D568915C94DD25D513174B6B393D69</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>There are many software languages which are not exposed protocols, exchange formats, interfaces and storage formats, and are only used for intermediate representation, runtime data manipulation and tool-specific serialisation. Yet, they can be important for technology comprehension, since such internal implementation details may have indirect impact on some aspects of the externally observed behaviour of the system. In this paper, we show a concrete example of how various tools and their technological differences can be explained based on one abstract megamodel and its different renarrations.</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>Megamodels are used for modelling complex systems involving many artefacts, each of which is also in turn a model or a transformation <ref type="bibr" target="#b2">[3,</ref><ref type="bibr" target="#b3">4]</ref>. For instance, they can help represent an entire technological space or a technical space in order to expose its components and to explain them to previously unaware audience (such as students) <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b9">10]</ref>. The main focus of megamodelling is usually on externally observable (meta)languages: communication protocols, data interchange formats, application programming interfaces, algebraic data types, public library interfaces, serialisation formats, etc. Yet there are a lot of (meta)language used behind the scenes for internal presentation of data structures -and we all know very well how much of an impact can a different data structure have on performance of an algorithmically nontrivial application. As it turns out, megamodelling can be very helpful here as well.</p><p>Megamodels (also called linguistic architecture models <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b9">10]</ref>, macromodels <ref type="bibr" target="#b14">[15]</ref>, technology models, etc) come in a great variety of forms and approaches and are theoretically useful for solving many problems of different stakeholders. However, one of the main showstoppers is their overwhelming complexity: not only a typical megamodel requires considerable investment in deep domain analysis, exploratory experimentation, modelling and metamodelling; but also the result thereof is a towering monolith easily intimidating any possible users. At the same time, simplification is possible yet often undesirable, for the devil lurks in the details. One of the existing solutions is investing in packaging the megamodel as well as in its development. We can slice the megamodel into digestible parts and navigate stakeholders through them, possibly through various itineraries depending on the priorities -this process is referred to as megamodel renarration <ref type="bibr" target="#b17">[18]</ref>.</p><p>A renarration of a megamodel is a story that traverses the elements of this megamodel in order to guide the users through it and to gradually introduce them to the model elements and thus to domain concepts. Formally, a renarration relies on operators for addition/removal, restriction/generalisation, zoom in/zoom out, instantiation/parametrisation, connection/disconnection and can make use of backtracking <ref type="bibr" target="#b10">[11]</ref>. In prior work we have shown renarrations as annotated megamodel transformations, but have not used them in multiple scenarios based on one original model.</p><p>The approach we propose in this paper involves investing in a global megamodel of an entire technical space, and then using renarrations of it to demonstrate each existing technology. Thus, the contribution of the paper is mainly the focus on using one baseline white box megamodel for establishing a common ground for explaining various subtly different technologies of the same domain by renarrating it repeatedly.</p><p>Specifically in the context of the GEMOC initiative, megamodelling addresses the second focus (integration of heterogeneous model elements), while renarration treats the first issue (catering various stakeholder concerns). So far this material has been (in a more volatile form) used in teaching courses on software language engineering <ref type="bibr" target="#b1">[2]</ref>, software evolution, software construction and in supervision of Master students.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Parsing with many faces</head><p>For a demonstration of the proposed approach let us consider a megamodel for parsing in the broad sense that we presented in earlier work <ref type="bibr" target="#b20">[21]</ref>. The model includes twelve kinds of artefacts commonly found in software language enginering (as well as commonly encountered mappings among them, see Figure <ref type="figure">1</ref>): ♦ Str -a string, a file, a byte stream. ♦ Tok -a finite sequence of strings (called tokens) which, when concatenated, yields Str. Includes spaces, line breaks, comments, etc -collectively, layout. ♦ TTk -a finite sequence of typed tokens, possibly with layout removed, some classified as numbers, strings, etc. ♦ Lex -a lexical source model <ref type="bibr" target="#b18">[19]</ref> that addes grouping to typing; in fact a possibly incomplete tree connecting most tokens together in one structure. ♦ For -a forest of parse trees, a parse graph or an ambiguous parse tree with sharing; a tree-like structure that models Str according to a syntactic definition. ♦ Ptr -an unambiguous parse tree where the leaves can be concatenated to form Str. ♦ Cst -a parse tree with concrete syntax information. Structurally similar to</p><p>Ptr, but abstracted from layout and other minor details. Comments could still be a part of the Cst model, depending on the use case. ♦ Ast -a tree which contains only abstract syntax information. ♦ Pic -a picture, which can be an ad hoc model, a "natural model" or a rendering of a formal model.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Tok</head><p>Ptr For Cst TTk Str Pic Dra Gra Dia Ast Lex Fig. <ref type="figure">1</ref>. A megamodel of parsing in a broad sense -see <ref type="bibr" target="#b20">[21]</ref> for detailed definitions and descriptions of these kinds of software artefacts and mappings.</p><p>♦ Dra -a graphical representation of a model (not necessarily a tree), a drawing in the sense of GraphML or SVG, or a metamodel-indepenent syntax but metametamodel-specific syntax like OMG HUTN. ♦ Gra -an entity-relationship graph, a categorical diagram or any other primitive "boxes and arrows" level model. ♦ Dia -a diagram, a graphical model in the sense of EMF or UML, a model with an explicit advanced metamodel. The megamodel from Figure <ref type="figure">1</ref> provides a unique uniform view on parsing, unparsing, formatting, pretty-printing, disambiguation, visualisation and related activities -it is a big step from heterogeneous discordant papers originating from relevant technical spaces toward general understanding of the field. Yet, as we have claimed before <ref type="bibr" target="#b17">[18,</ref><ref type="bibr" target="#b10">11]</ref>, a monolithic megamodel can play a role of a knowledge container, but cannot be used directly as the deployed artefact. (As a side remark, this corresponds to the claim by Bézivin et al that a megamodel as a model of models should not be used as a reference model <ref type="bibr" target="#b2">[3]</ref>). Hence, we need a renarration of a megamodel to successfully deliver the knowledge behind it. A renarration can happen naturally (e.g., as a lecture for students) or be formally inferred with megamodel transformation operators for addition, connection, instantiation, etc <ref type="bibr" target="#b10">[11]</ref>. In this paper, we use English for the narrative, and the models themselves are available at ReMoDD: http://www.cs.colostate.edu/remodd/v1/content/ renarrating-metalanguage-integration. In the following sections, we demonstrate several renarrations of the megamodel from Figure <ref type="figure">1</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Parsing in a narrow sense: lex + yacc</head><p>One of the textbook approaches to parsing is using two tools to obtain a parse tree from the input string: one for lexical analysis and one for syntactic analysis. In many classic compiler construction courses lexical analysis is done with lex <ref type="bibr" target="#b11">[12]</ref> or one of its successors. The tokens that are obtained by lexical analysis, are in fact typed, but the type information is not necessarily used for anything, so we can model the result of the lexical analysis with Tok. The next step is handled by a compiler compiler like yacc <ref type="bibr" target="#b6">[7]</ref> or its more modern counterparts (but not too innovative -we want to stick to the classic DragonBook-like view <ref type="bibr" target="#b0">[1]</ref>). This syntax analysis tool consumes Tok and produces a parse tree -Ptr. This can be seen on a rather simple Figure <ref type="figure" target="#fig_0">2</ref>(a).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Advanced parsing technology: ANTLR</head><p>Consider ANTLR <ref type="bibr" target="#b13">[14]</ref>, a state of the art compiler compiler that can be used for the same purpose as lex+yacc, but incorporates the results of several decades of research on parsing, compiler construction and interactive programming environments. Both a lexer and a parser are generated from the uniform syntactic definition (grammar). Lexical nonterminals, usually written in CAPSLOCK, define a grammar used for lexical analysis. Most of them are preterminals -their definitions contain only terminals, combined sequentially, with disjunction, Kleene closure and other combinators typical for regular expressions <ref type="bibr" target="#b7">[8]</ref>. As shown on Figure <ref type="figure" target="#fig_0">2</ref>(b), the output of the lexer is TTk, a stream of strongly typed tokens -each token has to either belong to one of the lexical categories (be parsed as a lexical nonterminal) or match one of the terminal symbols used in the rest of the grammar -they are turned into preterminals automatically by ANTLR. The untyped version of the same representation (Tok) is not available directly: if needed, one could possibly either disregard the typing information (e.g., by using code duplicates inside semantic actions) or plug in into the internals of the generated lexer.</p><p>A typed token stream is processed by a parser which ANTLR generates from the input grammar. The result is Cst, a parse tree that abstracts from some details like layout and comments. It is important to note that ANTLR generates the definition of the Cst and provides means to traverse them. However, if one still desires to use an abstract syntax tree, both Ast itself and the mapping from Cst to Ast need to be programmed explicitly in the base language of ANTLR (Java, C++, C#, Python, etc). The mapping can be scattered among the nonterminal definitions directly in the grammar (as semantic actions), or it can be written as a separate program that traverses the ANTLR Cst with the ANTLR visitor and constructs a specific Ast. The class structure of the Ast itself always needs to be defined and processed independently from ANTLR.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3">Rascal metaprogramming language</head><p>Rascal <ref type="bibr" target="#b8">[9]</ref> is another state of the art piece of grammarware -however, an important difference from ANTLR is that Rascal is advertised as a "one-stop-shop" for software analysis, transformation and visualisation. Let us try to understand this difference from Figure <ref type="figure" target="#fig_0">2(c)</ref>.</p><p>Rascal uses generalised parsing (more specifically, GLL), which yields a parse forest instead of a parse tree, if the grammar is ambiguous. Such parse forests (For) are represented internally with the same structure -a term representation that is allowed to explicitly contain ambiguity node. Thus, in order to decide if a given tree is For or Ptr, we need to perform a deep match on an amb(_,_) pattern (since pattern matching is one of the basic constructions in Rascal, this operation is trivial to express, even though it might become a performance bottleneck).</p><p>By Rascal design, there is no observable distinction between Ptr and Cst. All trees are stored internally as Ptr, but all pattern matching behaves as if both the pattern and term is Cst (with the pattern allowed to be incomplete). Each unambiguous tree conforms to the grammar (a syntax specification) that was used to parse it. A grammar is defined in Rascal within the same module or imported as a separate one. Relying on such grammatical structure can simplify pattern matching immensely: instead of checking for a term which is an application of a particular production rules with certain arguments, we write the same intent down with a term on the left hand side, typed to a particular nonterminal and thus fully conforming to its structure (modulo intended gaps to be skipped during unification).</p><p>A Cst can be mapped to Ast explicitly by writing a pattern-matching visitor, which is done in some cases that require sophisticated compulations as a part of the mapping. However, an easier way is to use an implode() library function that has a set of stable heuristic rules for finding bidirectional correspondence between a given syntax definition and a given algebraic data type. The ADT itself (the structure of Ast) must still be programmed manually, which is traditionally not considered to be a burden since one wants to have full control about the way abstract syntax is defined. (When this is not the case, it can be inferred from the grammar by grammar mutations <ref type="bibr" target="#b19">[20]</ref> of GrammarLab, a Rascal library for manipulating grammars in a broad sense<ref type="foot" target="#foot_0">1</ref> ). implode() is not shipped with a reverse function, so any derivation from Ast to Cst/Ptr, if needed, must be programmed manually.</p><p>High level abstract diagrams (Dia) are also modelled in Rascal by algebraic data types managed by the (meta)programmer. A universal yet still a high level visual model (Gra) is provided in the standard Rascal library and contains elements like boxes, grids, graphs, trees, plots. A render() function, however, positions all these elements automatically and only outputs the final picture (Pic) on screen or to a file, effectively skipping over Dra -for a Rascal programmer it means having no control over the exact positioning of most elements on canvas, except for general constraints which are a part of the metamodel of Gra.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.4">Semiparsing: building lexical models with ILA</head><p>Semiparsing <ref type="bibr" target="#b18">[19]</ref> is an umbrella term for techniques of imprecise manipulation of source code (its variations are known as agile modeling, robust parsing, lightweight processing, error repair, etc). They are inherently very different because usually come into existence for solving a very particular practical problem -we have claimed recently that Boolean grammars <ref type="bibr" target="#b12">[13]</ref> and parsing schemata <ref type="bibr" target="#b15">[16]</ref> can be helpful in modelling all possible variations of semiparsing. However, as useful as these two formalisations could be in deep understanding of the methods, relating them and positioning among themselves, they are not always as effective for their implementation-driven comprehension, especially by software engineering practitioners without background in formal methods.</p><p>Consider Figure <ref type="figure" target="#fig_0">2</ref>(d), which demonstrates a semiparsing technique called iterative lexical analysis <ref type="bibr" target="#b4">[5]</ref> (a similar technique has recently emerged in a more modern framework called TEBA for analysis of tokenised syntax trees <ref type="bibr" target="#b16">[17]</ref>). The technique relies mainly on patterns which are classified in levels: the higher the level, the more unstable and the less desirable the pattern is. So, on the first level there are strict matches for terminals such as keywords, and on the last level there are "desperate" heuristics that are meant more to ensure that the process produces some kind of result than to actually claim any correctness. Hence, we only work with the left column of our megamodel: the higher we are in the model, the more abstract and imprecise patterns are applied. There is no direct correspondence between pattern levels and layers of the megamodel, but for each concrete pattern we can easily find a place. For example, a pattern that detects strings and demotes the role of tokens inside a string from possible metasymbols (e.g., so that a curly bracket in a = "b{"; is never used for block identification) clearly works on TTk, while a pattern that matches an identifier followed by a bracketed comma-separated list of identifiers followed by a block of statements and promotes it to a function definition, naturally produces Lex.</p><p>Operations for descending from Lex to TTk to Tok to Str are not explicitly described in the paper about iterative lexical analysis, but are certainly available in any sensible framework: we need to flatten (unfold) all hierarchical constructs to get down to TTk, disregard type information to get down to Tok and concatenate all tokens to get all the way to Str.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Conclusion</head><p>Megamodels are used as an understanding aid in complex scenarios involving various technologies, software languages, methodologies, approaches and transformations <ref type="bibr" target="#b2">[3,</ref><ref type="bibr" target="#b3">4]</ref>. Renarrations of megamodels improve their usefulness by guiding megamodel consumers through the forest of immanently complicated artefacts and mappings <ref type="bibr" target="#b10">[11,</ref><ref type="bibr" target="#b17">18]</ref>. Megamodels, whether ad hoc (a sentence "model M conforms to a metamodel MM" is in fact a tiny megamodel) or formal (AMMA, MEGAF, SPEM, MCAST, MegaL, CT), perform undeniably well for teaching purposes when introducing students to a new technology and explaining subtle differences between two almost identical technologies. In this paper, we have claimed that the same approach can be used for internal "languages", the ones that are hiding behind the scenes inside our tools. For this purpose, we propose to have one baseline megamodel of the domain -in a formal sense, it will include a lot of abstract entities, unbounded elements, constraints based on roles, etcand use its refined renarrations for each of the concrete technologies that need to be explained and understood. We have demonstrated this approach with our megamodel for parsing in a broad sense <ref type="bibr" target="#b20">[21]</ref>, which we have used as a baseline model for four renarrations: classic lex+yacc parsing <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b6">7,</ref><ref type="bibr" target="#b11">12]</ref>, ANTLR language workbench <ref type="bibr" target="#b13">[14]</ref>, Rascal one-stop-shop <ref type="bibr" target="#b8">[9]</ref> and iterative semiparsing <ref type="bibr" target="#b4">[5,</ref><ref type="bibr" target="#b16">17,</ref><ref type="bibr" target="#b18">19]</ref>.</p><p>Beside the obvious future work claims such as promises of (mega)modelling different domains and perhaps even megamodelling relations among such domains, some other open questions remain. For example, some megamodels require explicit distinction between kinds of mappings they express (injective, bijective, monomorphic, isomorphic, asymmetric bidirectional, symmetric bidirec-tional, etc), and such distinctions would also have to be properly specified and renarrated. In other cases, the modelling framework may already have a metamodel suitable for expressing typical renarrations, and the megamodel navigating arsenal would need to be adjusted with respect to the language it must be expressed in (instead of the opposite situation which we always assume).</p><p>As any other modelling method which introduces unification and heterogenuity, (mega)modelling different technologies with renarrations of the same baseline megamodel can help not only in explaining the actual state of the art, but also in spotting singularities. Anything irregular could be a signal of a bug, a not yet implemented feature or a comprehension mistake. Why is there a mapping from Cst to Ast in Rascal but no universtal mapping from Ast to Cst? Perhaps we should include one! Is there a good reason for Dra to not be accessible in Rascal? Having it explicitly as a (possibly optional) first class entity could allow us to do things we otherwise cannot! Would it help organising patterns for ILA/TEBA based not on their "desperation", but on the kind of artefacts they are actually dealing with (untyped tokens, typed tokens, grouped tokens)? Exploration of the extent of usefulness of such conclusions remains 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. Four illustrated renarrations of the (slices of the) megamodel from Figure 1</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">GrammarLab: http://grammarware.github.io/lab.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Compilers: Principles, Techniques and Tools</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">V</forename><surname>Aho</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Sethi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">D</forename><surname>Ullman</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1985">1985</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Reflections on Courses for Software Language Engineering</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">H</forename><surname>Bagge</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Tenth Educators Symposium</title>
				<meeting><address><addrLine>EduSymp</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2014">2014. 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">MDA components: Challenges and Opportunities</title>
		<author>
			<persName><forename type="first">J</forename><surname>Bézivin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Gérard</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P.-A</forename><surname>Muller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Rioux</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the First International Workshop on Metamodelling for MDA</title>
				<meeting>the First International Workshop on Metamodelling for MDA</meeting>
		<imprint>
			<date type="published" when="2003-11">Nov. 2003</date>
			<biblScope unit="page" from="23" to="41" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">On the Need for Megamodels</title>
		<author>
			<persName><forename type="first">J</forename><surname>Bézivin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Jouault</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Valduriez</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">OOPSLA &amp; GPCE, Workshop on best MDSD practices</title>
				<imprint>
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Syntactic Approximation Using Iterative Lexical Analysis</title>
		<author>
			<persName><forename type="first">A</forename><surname>Cox</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Clarke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the International Workshop on Program Comprehension (IWPC 2003)</title>
				<meeting>the International Workshop on Program Comprehension (IWPC 2003)</meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
			<biblScope unit="page" from="154" to="163" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Modeling the Linguistic Architecture of Software Products</title>
		<author>
			<persName><forename type="first">J.-M</forename><surname>Favre</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Varanovich</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">MoDELS</title>
				<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="151" to="167" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m" type="main">YACC-Yet Another Compiler Compiler</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">C</forename><surname>Johnson</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1975">1975</date>
		</imprint>
		<respStmt>
			<orgName>AT&amp;T Bell Laboratories</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Computer Science Technical Report 32</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Representation of Events in Nerve Nets and Finite Automata</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">C</forename><surname>Kleene</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Automata Studies</title>
		<imprint>
			<biblScope unit="page" from="3" to="42" />
			<date type="published" when="1956">1956</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">EASY Meta-programming with Rascal</title>
		<author>
			<persName><forename type="first">P</forename><surname>Klint</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Van Der Storm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Vinju</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">GTTSE 2009</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2011-01">Jan. 2011</date>
			<biblScope unit="volume">6491</biblScope>
			<biblScope unit="page" from="222" to="289" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Interpretation of Linguistic Architecture</title>
		<author>
			<persName><forename type="first">R</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Varanovich</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ECMFA</title>
				<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="67" to="82" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Language Support for Megamodel Renarration</title>
		<author>
			<persName><forename type="first">R</forename><surname>Lämmel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
		<ptr target="CEUR-WS.org" />
	</analytic>
	<monogr>
		<title level="m">XM 2013</title>
				<imprint>
			<date type="published" when="2013-10">Oct. 2013</date>
			<biblScope unit="volume">1089</biblScope>
			<biblScope unit="page" from="36" to="45" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title level="m" type="main">LEX-A Lexical Analyzer Generator</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">E</forename><surname>Lesk</surname></persName>
		</author>
		<idno>39</idno>
		<imprint>
			<date type="published" when="1975">1975</date>
		</imprint>
		<respStmt>
			<orgName>AT&amp;T Bell Laboratories</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Computer Science Technical Report</note>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Conjunctive and Boolean Grammars: The True General Case of the Context-Free Grammars</title>
		<author>
			<persName><forename type="first">A</forename><surname>Okhotin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computer Science Review</title>
		<imprint>
			<biblScope unit="volume">9</biblScope>
			<biblScope unit="page" from="27" to="59" />
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">The Definitive ANTLR Reference: Building Domain-Specific Languages. Pragmatic Programmers</title>
		<author>
			<persName><forename type="first">T</forename><surname>Parr</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Pragmatic Bookshelf</title>
				<imprint>
			<date type="published" when="2007-05">May 2007</date>
		</imprint>
	</monogr>
	<note>first edition</note>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Using Macromodels to Manage Collections of Related Models</title>
		<author>
			<persName><forename type="first">R</forename><surname>Salay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Mylopoulos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Easterbrook</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">CAiSE</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="141" to="155" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<title level="m" type="main">Parsing Schemata -a Framework for Specification and Analysis of Parsing Algorithms</title>
		<author>
			<persName><forename type="first">K</forename><surname>Sikkel</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1997">1997</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">A Pattern Search Method for Unpreprocessed C Programs based on Tokenized Syntax Trees</title>
		<author>
			<persName><forename type="first">A</forename><surname>Yoshida</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Hachisu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SCAM</title>
		<imprint>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Renarrating Linguistic Architecture: A Case Study</title>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">MPM 2012</title>
				<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2012-11">Nov. 2012</date>
			<biblScope unit="page" from="61" to="66" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Formal Foundations for Semi-parsing</title>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">CSMR-WCRE 2014 ERA</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2014-02">Feb. 2014</date>
			<biblScope unit="page" from="313" to="317" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Software Language Engineering by Intentional Rewriting</title>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">EC-EASST; Software Quality and Maintainability</title>
		<imprint>
			<biblScope unit="volume">65</biblScope>
			<date type="published" when="2014-03">Mar. 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Parsing in a Broad Sense</title>
		<author>
			<persName><forename type="first">V</forename><surname>Zaytsev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">H</forename><surname>Bagge</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">MoDELS</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2014-10">Oct. 2014</date>
			<biblScope unit="volume">8767</biblScope>
			<biblScope unit="page" from="50" to="67" />
		</imprint>
	</monogr>
</biblStruct>

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