<!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>Grammar Maturity Model</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Vadim Zaytsev</string-name>
          <email>vadim@grammarware.net</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universiteit van Amsterdam</institution>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <fpage>42</fpage>
      <lpage>51</lpage>
      <abstract>
        <p>The evolution of a software language (whether modelled by a grammar or a schema or a metamodel) is not limited to development of new versions and dialects. An important dimension of a software language evolution is maturing in the sense of improving the quality of its definition. In this paper, we present a maturity model used within the Grammar Zoo to assess and improve the quality of grammars in a broad sense (structural models) and give examples of activities possible for each level.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Motivation</title>
      <p>
        Grammar Zoo [
        <xref ref-type="bibr" rid="ref41">41</xref>
        ] is an initiative aimed at
systematic collection of grammars in the broad sense
— structural definitions of software languages;
annotation of each grammar with information about its
source, original format and authors; complementing
each grammar with details about how it was obtained;
documenting usages of each grammar — its
derivatives, tools, documents and other grammars; and
finally making all these grammars publicly available in
a variety of formats. It has many possible uses:
      </p>
      <p>
        Interoperability testing. Suppose that we have Fig. 1. Grammar Zoo,
identified multiple grammars of the same intended http://slps.github.io/
language that correspond to its different frontends. zoo
To test their interoperability, one can do code reviews or develop a test suite,
but a better, more systematic, way is to generate such a suite and compare or
converge those grammars automatically. An approach for that has been
proposed in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and evaluated by two case studies involving 4 Java grammars and
33 TESCOL grammars, which were extracted from parser specifications and
became one of the early fragments of the Grammar Zoo. Its replication with a
simplified algorithm applied to adapted grammars, used 28 grammars of different
languages from the ANTLR grammar repository [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        Grammar recovery heuristics. There have been many successful attempts
of reusing grammatical knowledge embedded in various software artefacts like
parser specifications, data format descriptions or metamodels. Some focused
on idiosyncratic properties of the source notation, others tried to generalise
the relaxed ways of treating the baseline artefact with heuristic rules for
splitting/combining names, matching parentheses, etc [
        <xref ref-type="bibr" rid="ref39">39</xref>
        ]. The more grammars can
be recovered with heuristics, the better validated and motivated they become.
      </p>
      <p>
        Empirical grammar analysis. Grammar metrics is a mature field of
research, but more elaborate characterisations such as “top” or “bottom”
nonterminals are common in grammar-based papers. When the repository of various
grammars has grown to a reasonable size and comprised over 500 grammars,
the micropattern mining methodology [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] was applied to infer characterisations
by mining this repository [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ]. They can in turn be used for clustering
grammars based purely on statistical data about sets of indicators and for triggering
grammar mutations [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>Sample-based grammar engineering. Crafting a good grammar suitable
for the intended task is not an easy activity: is must not be too restrictive or
too permissive, must be compatible with the intended technology, reasonable
in terms of performance, readable for a human expert, machine processable,
etc (some of the aspects obviously being more relevant under different
circumstances). Having access to a large corpus of existing successful grammars
(together with the information about their actual applications, of course), could
aid the grammar engineer either implicitly (essentially by “code reading”) or
explicitly (by reusing an existing grammar as a starting point for developing a
domain-specific language).</p>
      <p>
        Grammar components. There is ongoing work on identifying semantic
components of software languages that correspond to concepts like loops,
variables, exception throwing, etc [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. By using a combination of program slicing
and clone detection techniques on a large enough corpus, we can identify
syntactic components of software languages and investigate whether there is any
correspondence with semantic components.
      </p>
      <p>Since the first days of the Grammar Zoo it became painfully clear that there
is no general agreement about maturity of grammars: even a grammar in a
narrow sense (say, a parser specification) can be optimised with one parsing
technology in mind while rendering it useless for other technologies, and for
grammars in a broad sense the meaning behind measurements becomes even
more obscure. In early publications around the project there was also mentioning
of the Grammar Tank, a sibling project collecting smaller grammars of DSLs —
it seemed unreasonable to put a tiny grammar extracted from a ten-line Haskell
ADT definition right next to a “real” grammar defining a programming language
like C# or C++, extracted from a 1000+ page manual. Later we imported
grammars from the Atlantic Metamodel Zoo, from the Relax NG collection and
many other places, adding to the complexity and heterogeneity. In the end, all
grammars have been merged into one collection, each annotated with all kinds
of metadata. One of the important annotations is a maturity level, which we
define essentially as the level of details and consistency and a measure of how
close the grammar is to actual use, notwithstanding its domain and intent.</p>
      <p>The next session introduces the usual tools available for grammar engineering
activities. §3 actually presents the levels of the maturity model. In §4, we give
an example of how a grammar can be used in practice, referring to its possible
maturity level. §5 discusses related work and §6 concludes the paper.</p>
    </sec>
    <sec id="sec-2">
      <title>Grammar Manipulation</title>
      <p>
        The arsenal of grammar manipulation is rather large, and for the sake of better
understanding of the rest of the paper, we name a few important methods. All
of them are to some extent represented in the GrammarLab1 library and useful
for programming in the Rascal metaprogramming language [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ].
      </p>
      <p>
        XBGF [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] is an operator suite for programmable grammar transformations.
It consists of more than 50 operators like renameN for renaming a nonterminal
or unfold for unfolding a nonterminal reference to its definition. Operators have
universally defined semantics and known properties — some can be proven to be
language-preserving refactorings, others extend the defined language or restrict
it. Transformations are programmed against this operator suite by choosing an
operator and providing appropriate arguments for it to make it applicable to the
grammar being transformed — i.e., unfold (n) is a valid transformation step, if
n is a nonterminal present in the grammar. Similar techniques exist for other
grammar manipulation frameworks [
        <xref ref-type="bibr" rid="ref22 ref23 ref6">6,22,23</xref>
        ].
      </p>
      <p>
        SLEIR [
        <xref ref-type="bibr" rid="ref42">42</xref>
        ] is a similar suite for grammar mutations [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ], which are
generalised transformations automatically applicable on a large scale: enforcing a
normal form, changing a naming convention, systematically refactoring harmful
constructions into equivalent harmless ones are examples of grammar mutations.
      </p>
      <p>
        Grammar analysis is a research direction on its own, where based on
observable facts obtained from grammar metrics [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] or micropatterns [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ] we can
make estimations and draw conclusions about a grammar’s suitability for
specific tasks, compatibility with a technology, backwards compatibility through
versions, interoperability among various tools, etc.
      </p>
      <p>
        The last mentioned group of instruments was important for creating the
Grammar Zoo and growing it, and less so for using it as such. Grammar
extraction obtains grammars in a broad sense from software artefacts containing
grammatical knowledge (source code, documentation, protocol definitions,
algebraic data types, databases, etc). Grammar recovery [
        <xref ref-type="bibr" rid="ref24 ref34 ref39">24,34,39</xref>
        ] works similarly
with sources using deceivingly familiar notations in an inconsistent or otherwise
unexpected way — manually written, out of date, incomplete, etc.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>A Quality/Maturity Model for Grammars</title>
      <p>We distinguish among the following grammar levels:</p>
      <p>A grammar is fetched if it can be put in a file which we claim to
contain grammatical knowledge. A fetched grammar is usually written in an
(E)BNF-like notation, but it can also be an XML Schema schema, an Ecore
model, a parser specification, etc. A grammar from an undisclosed ISO
standard or a grammar built in a proprietary tool is not fetched, since we have
no possible way to extract the knowledge from it. A compiler is therefore not
a fetched grammar since the grammatical knowledge is ingrained too deep
1 GrammarLab: http://grammarware.github.io/lab.
in it and requires special techniques to be fetched. The sources of a
compiler, however, can be considered fetched, since further extraction can be
semi-automated, and the result will depend mostly on the source and not on
the extraction algorithm. Hence, a corpus of programs in a given language is
also not a fetched grammar, but an APTA (Augmented Prefix Tree
Acceptor) or a DFA (Deterministic Finite Automaton) constructed from it by a
grammatical inference algorithm, is a fetched grammar. A fetched grammar
can contain unreadable symbols, incorrect indentation, parts written in an
unknown notation or a natural language, or even be present in a form of an
image or a manuscript.</p>
      <p>
        A grammar is extracted, if it was fetched and then successfully processed
by a (hopefully automatic) grammar extractor, possibly also corrected of
typographical, text recognition and similar errors and converted into a
contextfree grammar or, more broadly speaking, to a Boolean grammar [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ]. (Not
venturing beyond context freedom is simply a consequence of the current
lack of theoretical foundations for linking classic context-dependent
grammars to generalised types — in general, aligning the Chomsky hierarchy [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]
with Barendregt λ-cube [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]). An extracted grammar is suitable for
automated processing: it can be pretty-printed in a range of different ways and
transformed by general means, without writing a tool specific for its
peculiar notation or format: syntax diagrams, Relax NG schemata, algebraic data
types, parser specifications all lose their notational differences when they are
being extracted, but they retain all structural peculiarities such as using a
particular style of recursion (syntax diagrams are incapable of expression left
recursion, and some parsing algorithms tend to avoid it as well), the lack or
presence of terminal symbols (anything that defines an abstract syntax, has
no terminals) or nonterminal symbols (classic regular expressions [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] have
no notion of named subcomponents), etc.
      </p>
      <p>
        A grammar is connected, if it was extracted and then processed to not
contain unwanted top sorts (defined but never used) and bottom sorts (used
but not defined). These two quality indicators were proposed in [
        <xref ref-type="bibr" rid="ref33 ref34">33,34</xref>
        ] and
discussed in more detail in [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] before being formalised as micropatterns [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ].
Connecting a grammar can be done automatically with a mutation [
        <xref ref-type="bibr" rid="ref38 ref42">38,42</xref>
        ],
semi-automatically with a sequence of transformation steps, or by editing it
inline. Connecting is a simple procedure that allows to start making some
claims about the grammar, since it enables its formalisation (the classic
hN , T , P, si model of a grammar requires it to have one known starting
symbol) and possible application of grammar-based algorithms (in particular
grammar-based test data generation expects the grammar to be connected
because otherwise it is futile to use any coverage criteria). In a broader
sense, a connected grammar always relies on some underlying mechanism of
testing or validation which ensures its general quality — as opposed to the
extracted grammar which can be an output of an automated extractor and
never checked nor inspected further.
      </p>
      <p>A grammar is adapted, if it is connected and then transformed towards
satisfying some constraints: it could be complemented with a lexical part,
or its naming convention can be adjusted, or certain metaconstructs can be
introduced to or removed from its syntax. The adaptation has a clear intent:
adding a lexical part can lead to automated generation of a parser or at least
a recogniser; conforming to a naming convention can enable the use of the
grammar in specific language workbenches, etc.</p>
      <p>A grammar is exported, if it was adapted and then a piece of grammarware
was generated from it. An exported grammar bidirectionally and possibly
nontrivially corresponds to a real piece of grammarware such as a compiler
or a code analysis or transformation tool.</p>
      <p>
        Each Grammar Zoo entry has one fetched grammar: ones with less than
one are “non-entries” that can perhaps be referred to, but can under no
circumstances be machine processed; having more than one fetched grammar can
happen for cases such as multiple websites mirroring one another, because an
additional check is required to assert them to be equal. If several extractors are
available (e.g., one straightforward one and one heuristic-based error-correcting
one), there can be multiple extracted grammars per entry. Similarly, there can
be several grammars of level connected and up per entry, varying per their
extracted source and methods of processing. Especially different adapted grammars
per entry are common, since each of them corresponds to a specific intentional
adaptation project. At this point in the history of the Grammar Zoo we have
not yet experienced the need to explicitly distinguish the reason for adaptation
of each grammar: some are massaged for better readability, some adjusted with
parsing in mind, some are disambiguated [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ], some adapted for testing
purposes [
        <xref ref-type="bibr" rid="ref3 ref32 ref9">3,9,32</xref>
        ], etc. We intentionally leave the hierarchy as general as it is, and
leave its extension to future work.
4
      </p>
    </sec>
    <sec id="sec-4">
      <title>A Maturation Path</title>
      <p>Suppose we would like to have a piece of grammarware to parse and analyse
programs in a particular software language — say, COBOL or PHP. Being
constrained in time, we usually start by looking for existing grammars: once we find
one that seems reasonably suitable for our needs, we can declare it fetched. If
a fetched grammar of our intended language is already in the Grammar Zoo, it
can save us the search, the frustration from websites having been taken down,
as well as the ambiguity about the true source of the grammar.</p>
      <p>
        In the simplest cases, grammar extraction methods and tools can be applied
to a fetched grammar with reasonable success. There is quite a collection of them
readily available within GrammarLab, and it is fairly straightforward to use
notation-parametric grammar extraction [
        <xref ref-type="bibr" rid="ref39">39</xref>
        ], if the input notation is anything
like BNF or EBNF; write out XSLT mapping templates, if the input notation
is XMI, XSD or anything from the XMLware technical space. If all available
methods fail, we can attempt to apply grammar recovery tools, which have
heuristics known to overcome frequent erroneous patterns. Once some reasonable
kind of non-empty grammar is obtained or if it was in the Grammar Zoo to begin
with, the grammar can be considered to be extracted.
      </p>
      <p>
        An extracted grammar can be processed further, analysed, transformed,
exported, imported, visualised etc — there are many tools in the GrammarLab
that can do it directly, and they can also help to export it to a format readily
consumable by other metagrammarware. However, it does not mean that this
grammar would “work” there, whatever that might mean. There are some
sensible metrics, constraints and grammar analyses established in state of the art
grammar recovery [
        <xref ref-type="bibr" rid="ref24 ref34">24,34</xref>
        ], that are almost universally useful in improving the
quality of a grammar. For instance, we would like to identify the starting symbol
of a grammar, establish it being unique. Furthermore, for each parts unreachable
from it, we would like to make a decision and either remove them or connect to
the rest of the grammar. This is usually done by programming the
corresponding steps in XBGF [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ], SLEIR [
        <xref ref-type="bibr" rid="ref42">42</xref>
        ], GDK [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], TXL [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] or any other grammar
manipulation language. This usually implies manual examination of a grammar
and its metrics by an expert, making the appropriate decisions and then
documenting the changes. Once this is completed, we speak of having a connected
grammar.
      </p>
      <p>
        The next step is grammar adaptation [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]: a goal-specific continuation of
grammar transformation activities. For example, if we have decided to parse and
analyse code in COBOL or PHP, this is our goal, and in case of Rascal [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] it will
mean having a complete concrete syntax specification and a suitable algebraic
data type. Both can be obtained from a connected grammar, but the adaptation
strategies are different. For a syntax specification, we need to add the lexical
part, specify layout, increasingly disambiguate the grammar, etc. For a data
type, we should think of its suitability for specifying our analyses later, and we
can easily eliminate all terminal symbols and massage the remaining abstract
grammar to enable more concise and readable patterns. These streaks of activity
end up with an adapted grammar each.
      </p>
      <p>Finally, our two grammars (or a syntax specification and a data type, or a
grammar and a schema — terminology may vary) are ready to be exported —
we do this with out of the box renderers, possibly followed by manual polishing
such as adding documenting annotations and inserting copyright notices. It is
not unusual for an exported grammar to be linked to a specific tool which it
forms a part of.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>
        Lämmel and Verhoef [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] were the first to propose the notion of a grammar level 2
to specify a quality level or a recovery status of a grammar. We have conceptually
inherited that hierarchy and extended it to accommodate more important details.
Their level 1 broadly corresponds to an extracted grammar in our model, level
2 to connected, levels 3 and 4 (depending on how thorough it has been tested)
to adapted. An exported grammar is at level 5 if it either demonstrates the
absence of manual steps in grammar deployment, or documents them by its
2 These “grammar levels” are essentially CMM-like levels applied to grammars,
unrelated to well-known “grammatical levels” used for a range of grammar metrics [
        <xref ref-type="bibr" rid="ref18 ref31">18,31</xref>
        ].
existence. Our contribution lies in rethinking and generalising this hierarchy
for all grammars in a broad sense and empirically applying it to hundreds of
grammars (as opposed to CFGs of one or two programming languages).
      </p>
      <p>
        El-Attar and Miller [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] have shown how antipattern detection can be used
to improve the quality of models (in their case, use case models, but a similar
technique for metamodels is not unthinkable). This approach is conceptually very
similar to a typical grammar engineering activity when the language engineer
identifies which metaconstructs are incompatible with the technology indended
for use, and refactors them away. At the current state of software language
engineering, the first part is the most appropriate to do with micropatterns [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ]
and the second part with grammar mutations [
        <xref ref-type="bibr" rid="ref42">42</xref>
        ].
      </p>
      <p>
        France and Rumpe [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] have investigated the relation between quality and
MDE from the pragmatic point of view and found out that one of the biggest
advantages comes from the opportunity to reuse previously assessed models (and
submodels) of known quality in the development of new ones. The same
argumentation, lifted to the metalevel, can be found in the first section of this paper
when we show some possible uses for the Grammar Zoo.
      </p>
      <p>
        It is impossible to talk about quality without mentioning ISO/IEC 9126 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ],
an official standard specifying quality of a software system as a product (hence,
also a grammarware system). It identifies quality characteristics such as
functionality, reliability, usability, efficiency, maintainability, portability, and continues
to break them down into smaller pieces. There have been some attempts to
formalise and detail parts of it up the the point of implementability — in particular,
maintainability has received a lot of attention [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], but the general agreement
is to treat the standard as a set of guidelines and considerations, not as an
immediately implementable model. An extensive review of research activities
concerning the quality models in the particular context of model-driven software
development, was made about papers in top conferences in 2000–2009 [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ].
      </p>
      <p>
        Welker’s maintainability index in the Coleman-Oman model is often claimed
useful for quickly assessing the maintainability (and hence also quality, per ISO
9126 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]) of software. Its formula exists in various slightly adjusted incarnations
in the academic literature and is commonly denoted as either just
“maintainability” [1, p.155][5, p.46] or “maintainability index” / “MI” [12, p.255][26, p.15]. As
it turns out, MI is inappropriate for grammarware purposes. Suppose we apply
aggressive normalisation and unchain all chain productions and inline all
nonterminal symbols that are used only once and have only one production rule.
Such a transformation preserves stability of the grammar, but obviously reduces
its analysability, changeability and testability. Yet MI shows improvement. Since
stability, analysability, changeability and testability are the main components of
maintainability per ISO 9126 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], MI does not adequately measure
maintainability.
      </p>
      <p>
        Discussions on language quality are abundant in the context of general
purpose programming languages [
        <xref ref-type="bibr" rid="ref14 ref36 ref37">36,14,37</xref>
        ], modelling languages [
        <xref ref-type="bibr" rid="ref19 ref30">30,19</xref>
        ] and
domainspecific languages [
        <xref ref-type="bibr" rid="ref17 ref27">27,17</xref>
        ]. Their contributions are mostly in a form of sets of
guidelines that are with some evidence and expertise linked to the quality of the
final product. Our maturity model can be seen as an attempt to formalise and
standardise a part of software language quality — namely, its structural model.
There is some strong evidence that this syntactic aspect is not dominating when
considering software language quality in general [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
6
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>We have briefly introduced the field of grammarware manipulation and a project
of collecting grammars in a broad sense — structural definitions of structure
found in software systems. We have also presented a maturity model of several
distinct levels on which grammars can reside — the model gradually came into
existence during several years of research on grammar analysis and
improvement. The renovated Grammar Zoo with this new maturity model is about to
be deployed and made available for public use. This model was essential in its
growth from a dozen self-made grammars to over 1500 entries of fetched level
and above.</p>
      <p>There are many reasons for models to evolve: some are externally motivated
and concern the natural evolution (improvement as a response to contextual
changes), some concern the actual use of the models. In this particular paper we
have treated quality as basically the level of details in a model extracted from its
real-life counterpart, which was directly linked to the possibility of automated
processing. This made sense in our context — collecting and analysing grammars
in a broad sense — but it stands to reason that the same considerations would
apply for any fact extraction models and software models in general.</p>
      <p>There is some evidence in adjacent fields that models which evolved in one
dimension (e.g., a programming language grammar extracted from a book, cleaned
up, polished and turned into a validation tool) can be very profitably (re)used
for improving or constructing models that evolved in another dimension (e.g.,
a programming language grammar from the next edition of the book). For us,
proving this or even collecting substantial evidence by convincing case studies,
remains future work.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>D.</given-names>
            <surname>Ash</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Alderete</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. W.</given-names>
            <surname>Oman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Lowther</surname>
          </string-name>
          .
          <article-title>Using Software Maintainability Models to Track Code Health</article-title>
          .
          <source>In Proceedings of the International Conference on Software Maintenance (ICSM' 94)</source>
          , pages
          <fpage>154</fpage>
          -
          <lpage>160</lpage>
          . IEEE Computer Society,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>H. P.</given-names>
            <surname>Barendregt</surname>
          </string-name>
          .
          <article-title>Introduction to Generalized Type Systems</article-title>
          .
          <source>Journal of Functional Programming</source>
          ,
          <volume>1</volume>
          (
          <issue>2</issue>
          ):
          <fpage>125</fpage>
          -
          <lpage>154</lpage>
          ,
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>E.</given-names>
            <surname>Butrus</surname>
          </string-name>
          .
          <article-title>Satisfying Coverage Criteria by Grammar Mutations and Purdom's Sentence Generator</article-title>
          .
          <source>Master's thesis</source>
          , Universiteit van Amsterdam,
          <year>Aug</year>
          .
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>N.</given-names>
            <surname>Chomsky</surname>
          </string-name>
          .
          <source>On Certain Formal Properties of Grammars. Information and Control</source>
          ,
          <volume>2</volume>
          (
          <issue>2</issue>
          ):
          <fpage>137</fpage>
          -
          <lpage>167</lpage>
          ,
          <year>1959</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>D.</given-names>
            <surname>Coleman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Ash</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Lowther</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Oman</surname>
          </string-name>
          .
          <article-title>Using Metrics to Evaluate Software System Maintainability</article-title>
          .
          <source>Computer</source>
          ,
          <volume>27</volume>
          :
          <fpage>44</fpage>
          -
          <lpage>49</lpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>T. R.</given-names>
            <surname>Dean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Cordy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. J.</given-names>
            <surname>Malton</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K. A.</given-names>
            <surname>Schneider</surname>
          </string-name>
          .
          <article-title>Grammar Programming in TXL</article-title>
          .
          <source>In Proceedings of the Second IEEE International Conference on Source Code Analysis and Manipulation (SCAM</source>
          <year>2002</year>
          ), pages
          <fpage>93</fpage>
          -
          <lpage>102</lpage>
          . IEEE,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>M.</given-names>
            <surname>El-Attar</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <source>Improving the Quality of Use Case Models Using Antipatterns. Software and System Modeling</source>
          ,
          <volume>9</volume>
          (
          <issue>2</issue>
          ):
          <fpage>141</fpage>
          -
          <lpage>160</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>M.</given-names>
            <surname>Erwig</surname>
          </string-name>
          and
          <string-name>
            <given-names>E.</given-names>
            <surname>Walkingshaw</surname>
          </string-name>
          . Semantics First!
          <source>In Proceedings of the Fourth International Conference on Software Language Engineering</source>
          , SLE'
          <volume>11</volume>
          , pages
          <fpage>243</fpage>
          -
          <lpage>262</lpage>
          . Springer,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>B.</given-names>
            <surname>Fischer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Lämmel</surname>
          </string-name>
          , and
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          .
          <article-title>Comparison of Context-free Grammars Based on Parsing Generated Test Data</article-title>
          . In U. Aßmann and
          <string-name>
            <surname>A</surname>
          </string-name>
          . Sloane, editors,
          <source>Post-proceedings of the Fourth International Conference on Software Language Engineering (SLE</source>
          <year>2011</year>
          ), volume
          <volume>6940</volume>
          <source>of LNCS</source>
          , pages
          <fpage>324</fpage>
          -
          <lpage>343</lpage>
          . Springer,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. R. B. France and
          <string-name>
            <given-names>B.</given-names>
            <surname>Rumpe</surname>
          </string-name>
          .
          <article-title>Modeling to Improve Quality or Efficiency? An Automotive Domain Perspective</article-title>
          .
          <source>Software and System Modeling</source>
          ,
          <volume>11</volume>
          (
          <issue>3</issue>
          ):
          <fpage>303</fpage>
          -
          <lpage>304</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>J.</given-names>
            <surname>Gil</surname>
          </string-name>
          and
          <string-name>
            <surname>I. Maman. Micro</surname>
          </string-name>
          <article-title>Patterns in Java Code</article-title>
          .
          <source>In Proceedings of the 20th ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA'05)</source>
          , pages
          <fpage>97</fpage>
          -
          <lpage>116</lpage>
          . ACM,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>J. H. Hayes</surname>
            ,
            <given-names>S. C.</given-names>
          </string-name>
          <string-name>
            <surname>Patel</surname>
            , and
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Zhao</surname>
          </string-name>
          .
          <article-title>A Metrics-Based Software Maintenance Effort Model</article-title>
          .
          <source>In Proceedings of the Eighth Euromicro Working Conference on Software Maintenance and Reengineering (CSMR'04)</source>
          , pages
          <fpage>254</fpage>
          -
          <lpage>258</lpage>
          . IEEE Computer Society,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. I. Heitlager,
          <string-name>
            <given-names>T.</given-names>
            <surname>Kuipers</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>A Practical Model for Measuring Maintainability</article-title>
          .
          <source>In Proceedings of the Sixth International Conference on Quality of Information and communications Technology (QUATIC'07)</source>
          , pages
          <fpage>30</fpage>
          -
          <lpage>39</lpage>
          . IEEE,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>C. A. R.</given-names>
            <surname>Hoare</surname>
          </string-name>
          .
          <article-title>Hints on Programming Language Design</article-title>
          .
          <source>Technical report</source>
          , Stanford University, Stanford, CA, USA,
          <year>1973</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. ISO/IEC. ISO/IEC 9126.
          <string-name>
            <surname>Software</surname>
          </string-name>
          Engineering - Product
          <string-name>
            <surname>Quality</surname>
          </string-name>
          .
          <source>ISO/IEC</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>A.</given-names>
            <surname>Johnstone</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. D.</given-names>
            <surname>Mosses</surname>
          </string-name>
          , and
          <string-name>
            <surname>E. Scott.</surname>
          </string-name>
          <article-title>An Agile Approach to Language Modelling and Development</article-title>
          .
          <source>Innovations in Systems and Software Engineering</source>
          ,
          <volume>6</volume>
          (
          <issue>1</issue>
          - 2):
          <fpage>145</fpage>
          -
          <lpage>153</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. G. Karsai,
          <string-name>
            <given-names>H.</given-names>
            <surname>Krahn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Pinkernell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Rumpe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Schneider</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Völkel</surname>
          </string-name>
          .
          <article-title>Design Guidelines for Domain Specific Languages</article-title>
          . In M. Rossi,
          <string-name>
            <given-names>J.</given-names>
            <surname>Sprinkle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          , and J.-P. Tolvanen, editors,
          <source>Proceedings of the Ninth OOPSLA Workshop on DomainSpecific Modeling (DSM</source>
          <year>2009</year>
          ), pages
          <fpage>7</fpage>
          -
          <lpage>13</lpage>
          , Mar.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>A.</given-names>
            <surname>Kelemenová</surname>
          </string-name>
          .
          <article-title>Grammatical Levels of the Position Restricted Grammars</article-title>
          .
          <source>In Proceedings on Mathematical Foundations of Computer Science</source>
          , pages
          <fpage>347</fpage>
          -
          <lpage>359</lpage>
          . Springer,
          <year>1981</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>S.</given-names>
            <surname>Kelly</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Pohjonen</surname>
          </string-name>
          .
          <article-title>Worst practices for domain-specific modeling</article-title>
          .
          <source>IEEE Software</source>
          ,
          <volume>26</volume>
          (
          <issue>4</issue>
          ):
          <fpage>22</fpage>
          -
          <lpage>29</lpage>
          ,
          <year>July 2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>S. C.</given-names>
            <surname>Kleene</surname>
          </string-name>
          .
          <article-title>Representation of Events in Nerve Nets and Finite Automata</article-title>
          .
          <source>Automata Studies</source>
          , pages
          <fpage>3</fpage>
          -
          <lpage>42</lpage>
          ,
          <year>1956</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21. P. Klint, T. van der Storm, and
          <string-name>
            <surname>J. Vinju. EASY</surname>
          </string-name>
          <article-title>Meta-programming with Rascal</article-title>
          . In
          <string-name>
            <surname>J. M. Fernandes</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Lämmel</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Visser</surname>
          </string-name>
          , and J. Saraiva, editors,
          <source>Post-proceedings of the Third International Summer School on Generative and Transformational Techniques in Software Engineering (GTTSE</source>
          <year>2009</year>
          ), volume
          <volume>6491</volume>
          <source>of LNCS</source>
          , pages
          <fpage>222</fpage>
          -
          <lpage>289</lpage>
          . Springer, Jan.
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>J. Kort</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Lämmel</surname>
            , and
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Verhoef</surname>
          </string-name>
          .
          <source>The Grammar Deployment Kit. System Demonstration. Electronic Notes in Theoretical Computer Science</source>
          ,
          <volume>65</volume>
          (
          <issue>3</issue>
          ):
          <fpage>117</fpage>
          -
          <lpage>123</lpage>
          ,
          <year>2002</year>
          . Workshop on Language Descriptions,
          <article-title>Tools and Applications (LDTA).</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <given-names>R.</given-names>
            <surname>Lämmel</surname>
          </string-name>
          . Grammar Adaptation.
          <source>In Proceedings of the International Symposium of Formal Methods Europe on Formal Methods for Increasing Software Productivity</source>
          , volume
          <volume>2021</volume>
          <source>of LNCS</source>
          , pages
          <fpage>550</fpage>
          -
          <lpage>570</lpage>
          . Springer,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <given-names>R.</given-names>
            <surname>Lämmel</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Verhoef</surname>
          </string-name>
          .
          <article-title>Semi-automatic Grammar Recovery</article-title>
          .
          <source>SoftwarePractice &amp; Experience</source>
          ,
          <volume>31</volume>
          (
          <issue>15</issue>
          ):
          <fpage>1395</fpage>
          -
          <lpage>1438</lpage>
          , Dec.
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <given-names>R.</given-names>
            <surname>Lämmel</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          .
          <article-title>Recovering Grammar Relationships for the Java Language Specification</article-title>
          .
          <source>Software Quality Journal (SQJ)</source>
          ,
          <volume>19</volume>
          (
          <issue>2</issue>
          ):
          <fpage>333</fpage>
          -
          <lpage>378</lpage>
          , Mar.
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <given-names>A.</given-names>
            <surname>Liso</surname>
          </string-name>
          .
          <article-title>Software Maintainability Metrics Model: An Improvement in the ColemanOman Model</article-title>
          .
          <source>Software Engineering Technology</source>
          , pages
          <fpage>15</fpage>
          -
          <lpage>17</lpage>
          ,
          <year>August 2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>M. Mernik</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Heering</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. M.</given-names>
            <surname>Sloane</surname>
          </string-name>
          . When and How to Develop
          <source>DomainSpecific Languages. ACM Computing Surveys</source>
          ,
          <volume>37</volume>
          (
          <issue>4</issue>
          ):
          <fpage>316</fpage>
          -
          <lpage>344</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <given-names>P.</given-names>
            <surname>Mohagheghi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dehlen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Neple</surname>
          </string-name>
          .
          <article-title>Definitions and Approaches to Model Quality in Model-based Software Development - A Review of Literature</article-title>
          .
          <source>Information and Software Technology</source>
          ,
          <volume>51</volume>
          (
          <issue>12</issue>
          ):
          <fpage>1646</fpage>
          -
          <lpage>1669</lpage>
          , Dec.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <given-names>A.</given-names>
            <surname>Okhotin</surname>
          </string-name>
          .
          <source>Boolean Grammars. Information and Computation</source>
          ,
          <volume>194</volume>
          (
          <issue>1</issue>
          ):
          <fpage>19</fpage>
          -
          <lpage>48</lpage>
          ,
          <year>2004</year>
          . http://users.utu.fi/aleokh/papers/boolean_grammars_ic.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <given-names>R. F.</given-names>
            <surname>Paige</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Ostroff</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Brooke</surname>
          </string-name>
          .
          <article-title>Principles for Modeling Language Design</article-title>
          .
          <source>Information and Software Technology</source>
          ,
          <volume>42</volume>
          (
          <issue>10</issue>
          ):
          <fpage>665</fpage>
          -
          <lpage>675</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31.
          <string-name>
            <given-names>J. F.</given-names>
            <surname>Power</surname>
          </string-name>
          and
          <string-name>
            <given-names>B. A.</given-names>
            <surname>Malloy</surname>
          </string-name>
          .
          <article-title>A Metrics Suite for Grammar-based Software</article-title>
          .
          <source>Journal of Software Maintenance and Evolution: Research and Practice</source>
          ,
          <volume>16</volume>
          :
          <fpage>405</fpage>
          -
          <lpage>426</lpage>
          , Nov.
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          32.
          <string-name>
            <given-names>P.</given-names>
            <surname>Purdom</surname>
          </string-name>
          .
          <article-title>A Sentence Generator for Testing Parsers</article-title>
          . BIT,
          <volume>12</volume>
          (
          <issue>3</issue>
          ):
          <fpage>366</fpage>
          -
          <lpage>375</lpage>
          ,
          <year>1972</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          33.
          <string-name>
            <given-names>A.</given-names>
            <surname>Sellink</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Verhoef</surname>
          </string-name>
          .
          <article-title>Generation of Software Renovation Factories from Compilers</article-title>
          .
          <source>In Proceedings of 15th International Conference on Software Maintenance (ICSM</source>
          <year>1999</year>
          ), pages
          <fpage>245</fpage>
          -
          <lpage>255</lpage>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          34.
          <string-name>
            <surname>M. P. A. Sellink</surname>
            and
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Verhoef</surname>
          </string-name>
          . Development, Assessment, and
          <article-title>Reengineering of Language Descriptions</article-title>
          .
          <source>In Proceedings of the Fourth European Conference on Software Maintenance and Reengineering (CSMR</source>
          <year>2000</year>
          ), pages
          <fpage>151</fpage>
          -
          <lpage>160</lpage>
          , Mar.
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          35.
          <string-name>
            <surname>M. G. J. van den Brand</surname>
            , J. Scheerder,
            <given-names>J. J.</given-names>
          </string-name>
          <string-name>
            <surname>Vinju</surname>
            , and
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>Disambiguation Filters for Scannerless Generalized LR Parsers</article-title>
          . In N. Horspool, editor,
          <source>Compiler Construction</source>
          <year>2002</year>
          (
          <article-title>CC 2002)</article-title>
          , pages
          <fpage>143</fpage>
          -
          <lpage>158</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          36.
          <string-name>
            <given-names>A. van Wijngaarden. Orthogonal</given-names>
            <surname>Design</surname>
          </string-name>
          and
          <article-title>Description of a Formal Language</article-title>
          . MR 76,
          <string-name>
            <surname>SMC</surname>
          </string-name>
          ,
          <year>1965</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          37.
          <string-name>
            <given-names>N.</given-names>
            <surname>Wirth</surname>
          </string-name>
          .
          <article-title>On the Design of Programming Languages</article-title>
          .
          <source>In IFIP Congress</source>
          , pages
          <fpage>386</fpage>
          -
          <lpage>393</lpage>
          ,
          <year>1974</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          38.
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          . Language Evolution, Metasyntactically.
          <source>Electronic Communications of the EASST; Bidirectional Transformations</source>
          ,
          <volume>49</volume>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          39.
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          .
          <article-title>Notation-Parametric Grammar Recovery</article-title>
          . In A. Sloane and S. Andova, editors,
          <source>Post-proceedings of the 12th International Workshop on Language Descriptions</source>
          , Tools, and
          <string-name>
            <surname>Applications</surname>
          </string-name>
          (LDTA
          <year>2012</year>
          ).
          <source>ACM Digital Library</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          40.
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          . Micropatterns in Grammars. In M. Erwig,
          <string-name>
            <given-names>R. F.</given-names>
            <surname>Paige</surname>
          </string-name>
          , and E. V. Wyk, editors,
          <source>Proceedings of the Sixth International Conference on Software Language Engineering (SLE</source>
          <year>2013</year>
          ), volume
          <volume>8225</volume>
          <source>of LNCS</source>
          , pages
          <fpage>117</fpage>
          -
          <lpage>136</lpage>
          . Springer,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          41.
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          .
          <article-title>Grammar Zoo: A Repository of Experimental Grammarware</article-title>
          .
          <source>Fifth Special issue on Experimental Software and Toolkits of Science of Computer Programming (SCP EST5)</source>
          ,
          <year>2014</year>
          . In print.
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          42.
          <string-name>
            <given-names>V.</given-names>
            <surname>Zaytsev</surname>
          </string-name>
          .
          <article-title>Software Language Engineering by Intentional Rewriting</article-title>
          .
          <source>Electronic Communications of the EASST; Software Quality and Maintainability</source>
          ,
          <volume>65</volume>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>