<!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>Using Reference Attribute Grammar-Controlled Rewriting for Energy Auto-Tuning</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Christoff Bürger</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Johannes Mey</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>René Schöne</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sven Karol</string-name>
          <email>sven.karol@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel Langner</string-name>
          <email>daniel.langner@mailbox</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Chair for Compiler Construction, Center for Advancing Electronics Dresden, Technische Universität Dresden</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Department of Computer Science, Faculty of Engineering, Lund University</institution>
          ,
          <country country="SE">Sweden</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Professur Softwaretechnologie, Institut für Softwareund Multimediatechnik, Fakultät Informatik, Technische Universität Dresden</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Cyber-physical systems react on events reported by sensors and interact with objects of the real world according to their current state and their view of the world. This view is naturally represented by a model which is continuously analysed and updated at runtime. Model analyses should be ideally concise and efficient, requiring well-founded, comprehensible implementations with efficient reasoning mechanisms. In this paper, we apply reference attribute grammar controlled rewriting to concisely implement the runtime model of an auto-tuning case study for energy optimization. Attribute functions are used to interactively perform analyses. In case of an update, our system incrementally-and, thus, efficiently-recomputes depending analyses. Since reference attribute grammar controlled rewriting builds the required dependency graphs automatically, incremental analysis comes for free.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Developing software for cyber-physical systems is a major challenge in software
and systems engineering [
        <xref ref-type="bibr" rid="ref11 ref2 ref4">2,4,11</xref>
        ]. A cyber-physical system steadily monitors its
environment, interacts with real-world entities and other systems, and reconfigures
itself according to its current view of the world. To implement these tasks,
executable world models enriched with runtime analyses and update events (e.g,
from sensors) are a common approach [
        <xref ref-type="bibr" rid="ref19 ref3">3,19</xref>
        ]. To ensure reliability and integrity
of cyber-physical systems, such models need to be well-founded, interactive and
comprehensible. In particular, model analyses (e.g., to react on events accordingly)
should not only be easy to implement but also efficient —especially in the presence
of continuous model updates at runtime [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Hence, an important concern is to
avoid unnecessary or redundant reevaluations of the analyses. Essentially, if not
affected by updates, previously computed results should be reused in such a way
that model analyses become incremental. A second challenge for cyber-physical
systems is the energy scarcity, demanding for energy-efficient systems [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        In this paper, we demonstrate how a novel combination of reference attribute
grammars [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] and rewriting [
        <xref ref-type="bibr" rid="ref14 ref17">14,17</xref>
        ]—both well-known compiler-compiler
techniques [
        <xref ref-type="bibr" rid="ref13 ref17 ref9">17,9,13</xref>
        ]—can improve on the challenge of incremental model analysis.
Reference attribute grammar controlled rewriting (RAG-controlled rewriting) [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]
leverages dynamic dependency tracking to make attribute evaluation (i.e., model
analyses) incremental in the presence of rewrite-based model updates. We present
an energy auto-tuning case study whose runtime model is incrementally updated
using RAG-controlled rewriting. Our example scenario is an interactively
triggered energy-efficient indexing of text documents that runs on a changeable
network of independently powered computers.
      </p>
      <p>The paper is structured as follows: first, the energy auto-tuning scenario
of our case study is presented (Section 2), followed by a short introduction to
RAG-controlled rewriting (Section 3); afterwards, the implementation of the
actual runtime model based on RAG-controlled rewriting is presented (Section 4);
an evaluation of the presented solution concludes the paper (Section 5).
2</p>
    </sec>
    <sec id="sec-2">
      <title>Case Study: Energy-efficient Document Indexing</title>
      <p>
        Case Study Overview: Our case study to evaluate the applicability of
RAGcontrolled rewriting for runtime models is the energy-efficient indexing of text
documents using a network of embedded computers. Indexing a text document
in our context means to construct a hash-table that counts the frequency of each
word in the document. A typical application of this indexer may be instant search
or case-based reasoning in a network of robots [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Each indexing request has
two parameters: a text document of a certain size to index and a hard deadline
until which the result must be computed. Indexing requests are interactive (i.e.,
occur randomly); at any moment, only previous requests are known but nothing
about future requests, including their frequency, deadlines and document sizes.
Given an arbitrary stream of indexing requests and a network of independent
computers available for indexing (called workers), the objective is to dispatch the
processing of requests in such a way that the total energy consumed to process
the stream is minimized.
      </p>
      <p>To save energy, single devices or complete network parts—including their
switches, attached workers and subnetworks—can be deactivated. Furthermore,
indexing can be prolonged as long as the corresponding deadlines are met. All
devices are exclusively available for indexing and not occupied with other tasks.
The start-up and shut-down times of devices are not constant however; sometimes
toggling them may even fail and require retries4. Furthermore, devices can be
removed interactively or new ones added, requiring reschedules to still meet
deadlines and optimise energy consumption.
4 This is a realistic problem that happens with some of our devices (CubieBoards).</p>
      <p>Three kinds of instruction events and respective acknowledgements for device
communication exist: to start indexing of a text document on a certain worker
(master $ worker), to start-up/shut-down devices (master $ power supply
and/or workers) and power measurements (master $ power supply). Devices are
either idle and ready for instructions, or busy, in which case they cannot process
new instructions (indexing cannot be suspended and each worker processes at
most one request at a time, thus resulting in a virtual request queue stored in
the runtime model). If ready, received instructions are immediately performed;
their start and result is acknowledged to the master.</p>
      <p>The controller performs two main tasks in its control loop. First, it dispatches
the event queue and updates the runtime model according to acknowledgement
events; in case of indexing requests it delegates to the runtime model to incorporate
a schedule (such updates are provided by the runtime model in the form of rewrite
rules, cf. Section 4). Second, it periodically checks for devices that can be shut
down, indexing tasks that must be started, and new or failed devices. These
periodic tasks use runtime model analyses for reasoning.</p>
      <p>Our runtime model combines a scheduling and energy policy. Consolidating
workload, the scheduling satisfies deadlines using as less resources as possible.
The energy analysis deduces unused, and in the future most likely not required,
devices—it saves energy by shutting them down taking into account reactivity
for emerging requests (energy-awareness). Both analyses are well-balanced; it
is their combination that saves energy while still processing as many indexing
request as possible (cf. Section 5).
3</p>
    </sec>
    <sec id="sec-3">
      <title>RAG-Controlled Rewriting Background</title>
      <p>
        A well-known formalism for the specification of semantic analyses are attribute
grammars [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Their main advantage is to relieve users from manual traversals of
analysed models and scheduling of analyses. Given a concrete attribute grammar,
an highly optimised evaluator can be generated based on a static analysis of the
grammar’s attribute dependencies [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]; essentially, incremental model analysis
is achieved. However, attribute grammars are specified w.r.t. tree structure, for
which reason their graph analysis capabilities are inconvenient.
      </p>
      <p>
        Reference attribute grammars (RAGs) improve on this by extending attribute
grammars with so called reference attributes, attributes evaluating to nodes of
the tree being analysed [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], enabling the deduction of abstract syntax graphs
(ASGs) from abstract syntax trees (ASTs) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] and reasoning about ASGs [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. The
viability of this technique to specify semantics for metamodels, like EMF Ecore [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ],
has been shown [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The main disadvantage of RAGs is, that reference attributes
hinder static dependency analyses and therefore incremental evaluation.
      </p>
      <p>
        To still achieve incremental evaluation, recent research proposed the tracking
of attribute dependencies at evaluation time, i.e., dynamically [
        <xref ref-type="bibr" rid="ref18 ref6">6,18</xref>
        ]. We even go
one step further and comprehend AST changes in terms of graph rewriting [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ],
thus combining incremental RAG-based analyses and rewriting-based model
transformations, either interactive, deduced or a combination thereof.
      </p>
      <p>reads</p>
      <p>Root
scheduler: l.c.s.
switching: 1‐3</p>
      <p>calls
a schedule
a schedule‐shortest‐queue
a schedule‐load‐consolida ng</p>
      <p>RseizIdqe::u04e05s06t4.78 (s1c)heAdunleedw irseiqnuseesrttetdhaint thhaes qtuoebuee
deadline: 13:37:00 of requests of a running worker.</p>
      <p>Root
Switch</p>
      <p>
        WId:oCurbike1er a
Switch
(2) ASG of an example configuration. Nonterminals are (3) The updated
configurarounded rectangles including their child terminals and tion after the insertion of the
some of their attributes, denoted with an a . new request into the model.
In the following, we present a RAG-controlled rewriting-based runtime model for
the case study of Section 2. Our implementation uses RACR [
        <xref ref-type="bibr" rid="ref5 ref6">5,6</xref>
        ], a reference
implementation of RAG-controlled rewriting in Scheme5. Using RAGs, we
represent the runtime model (cf. Fig. 1) as an abstract syntax graph (ASG) with an
underlying abstract syntax tree (AST) as a distinct spanning tree. Using RACR,
we define the corresponding AST grammar as follows:
1 ( ast rule ’ Root &gt;scheduler backupworkers CompositeWorker )
2 ( ast rule ’ AbstractWorker &gt;id state timestamp )
3 ( ast rule ’ CompositeWorker : AbstractWorker &gt;AbstractWorker )
4 ( ast rule ’ S w i t c h : CompositeWorker &gt;)
5 ( ast rule ’ Worker : AbstractWorker &gt;d e v i c e t y p e R e q u e s t &lt;Queue )
6 ( ast rule ’ Request &gt;i d s i z e d e a d l i n e d i s p a t c h t i m e )
      </p>
      <p>Each line describes one nonterminal that corresponds to a possible node type
in the AST. For example, Line 5 defines a Worker inheriting from AbstractWorker
and therefore comprising an ID, a current state, the most recent alternation date,
the type of worker and any number of Requests called Queue. A concrete ASG
(i.e., an AST with evaluated attributes) is shown in Fig. 2b.</p>
      <p>Analyses are concisely specified using attributes. The main attribute schedule
of the scheduling algorithm is depicted below while its evaluation is exemplified in
5 The implementation of our solution can be found at https://github.com/2bt/haec.
the upper part of Fig. 2b. The attribute is defined for Root—the start symbol in
the AST grammar, which defines virtual root components in our runtime model,
and does a dynamic dispatch to determine which scheduler to use. It reads the
terminal scheduler using ast-child and invokes the another attribute via att-value.
1 ( ag rule s c h e d u l e
2 ( Root (lambda ( n time work id l o a d s i z e d e a d l i n e )
3 ( att value ( ast child ’ s c h e d u l e r n ) n time work id
4 l o a d s i z e d e a d l i n e ) ) ) )</p>
      <p>We employ two basic scheduling strategies. The first one always chooses the
worker with the shortest queue (shortest-queue scheduler ) whereas the second
tries to fill the request queues of running workers as much as possible in order
to consolidate the load (load-consolidating scheduler ). Another analysis is the
energy-aware adaptation strategy, which periodically computes the ideal number
of online workers and switches off everything else, trying to keep at most one
worker with an empty queue running as backup for further incoming tasks.</p>
      <p>Figure 2 shows an example of a rewrite that creates a new Request and
inserts it in the request queue of a selected worker. In RACR, such model
transformations can be specified as below. After each rewrite application, the
cache of every attribute depending on values of the rewritten part of the ASG
is automatically flushed, flagging those attributes for reevaluation. The actual
computation of the new attribute value is lazy, which prevents unnecessary work
and thus enables fast, incremental analyses of the runtime model.
1 ( rewrite insert
2 ( ast child ’ Queue worker ) ; l i s t n o d e t o i n s e r t i n t o
3 i n d e x ; p o s i t i o n o f i n s e r t i o n
4 ( create ast s p e c ’ Request ( l i s t i d s i z e d e a d l i n e #f ) ) )</p>
      <p>An additional use case for rewrites is the failure of a physical worker. In this
case, the current and all pending requests are removed from the worker in the
ASG and simply scheduled again—now without considering the failed worker.</p>
      <p>As described in Section 2, we use a socket-based communication protocol
between the devices. Figure 3 sketches the processing of a request. Upon arrival at
the controller, a request event is created and added to the runtime model, where
a scheduler is used to determine a processing worker. A command to process the
request is first sent to the controller, which relays it to the appropriate worker.
Once finished, the controller is notified and invokes event-work-complete to let
the runtime model update accordingly.
5</p>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>To evaluate the presented approach, the applied measurement techniques are
introduced, followed by a discussion of the acquired data. These very use-case
specific results are followed by a more general investigation of the applicability
of RAG-controlled rewriting for runtime models.
Webserver</p>
      <p>Request</p>
      <p>Master
Controller</p>
      <p>Runtime
model</p>
      <p>Compmroutoncicoalltion</p>
      <p>Slave
Performance and Energy Savings As mentioned in Section 2, the controller
constantly monitors the state of the workers and their energy consumption, and
protocols them as well as the events it processes. For the evaluation, periods
of running the same workload in different system configurations have been
selected to compare the energy-consumption properties of them. Figure 4 shows
three different runs using both implemented scheduling and worker adaptation
strategies. The bar charts associated with the three runs show how the same set
of work requests (displayed as grey triangles) are scheduled. While the
shortestqueue schedulers in Fig. 4b and 4c schedule events to run as soon as possible, the
load-consolidating scheduler tries to fill the request queue as much as possible,
resulting in less workers being used. Additionally, runs in Fig. 4c and 4d use
the energy-aware adaptation strategy (cf. Section 4) with three workers kept
running to handle the assumed base load. Each device has a lane in the diagram,
the brightness of its colour determines its state: very bright means the worker is
switched off, fairly bright means it is currently booting or shutting down, and
a dark colour represents an active worker connected to the master. Currently
processed work requests are shown as grey boxes on the respective worker.</p>
      <p>The power consumption of all three runs is shown in Fig. 4a. A dashed line
depicts the average power consumption which is proportional to the required
energy. As summarised in Table 1, with the best heuristics used in run 4d, only
82:5% of the simple scheduling heuristics are used, amounting to savings of 17:5%.
An important effect of the load-consolidating scheduler is that less workers are
needed while the deadlines are kept.</p>
      <p>
        Benefits of a RAG-based Runtime Model Besides the energy savings
described in the last section, a RAG-controlled rewriting-based approach offers
qualitative benefits for developers. Even though context-free grammars describe
tree structures, RAGs can express arbitrary graphs through their reference
attributes. No name resolution tables have to be defined explicitly and navigation
in a RAG-based model can be performed easily. Furthermore, the declarative
Scheduler
Shortest-queue
Energy-aware, shortest-queue
Energy-aware, load-consolidating
nature of the grammar and its attribute definitions makes modifications of both
fairly simple. Also, the runtime models described by a RAG can be modified
easily with direct rewrite commands or with pattern-based techniques using
different strategies [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. While these properties of RAGs make them an option
for the description of runtime models, the approach must also be easily usable.
RACR provides not only a lightweight solution without any dependencies other
than a running Scheme implementation, but also allows a compact and concise
specification of runtime models. As shown in Table 2, our main programming
effort went into the controller and worker programs while the model including all
scheduling heuristics contains only about 500 lines of code.
      </p>
      <p>Our use case shows RAG-controlled rewriting to be an adequate concept to
manage a small runtime configuration. But while the size of the demo is limited
due to technical constraints, for the concept to be practically useful, large systems
must be treated consistently and efficiently. This is possible through incremental
evaluation. Consistency of attribute values (and therefore scheduling heuristic)
is given automatically, because whenever an attribute value is required, our
approach makes sure that the value is up-to-date and consistent with the model.
In general, consistency comes at a price: it threatens either the efficiency of a
system (each attribute is recalculated on every call) or the simplicity
(problemspecific bookkeeping is needed to determine which attributes to recompute in
the event of model changes). These problems do not exist in RAG-controlled
rewriting. While attribute values are cached, necessary re-computations due to
model changes are triggered automatically with an attribute-dependency analysis.
This enables the application of the presented approach in larger systems and
also the future use of more complex and computationally expensive scheduling
and adaptation algorithms. Thus, reference attribute grammars prove to be an
adequate modelling formalism for cyber-physical systems.
6</p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>We addressed two cyber-physical system challenges: (1) the development of
wellfounded, interactive and comprehensible runtime models with efficient, easily
implementable analyses and (2) energy auto-tuning for energy-efficient
computations. The latter requires the first; to auto tune regarding energy-efficiency
requires a runtime model that can be used to deduce beneficial reconfigurations.
We proposed RAG-controlled rewriting as a solution to implement such a model
and presented an indexing case study, whose challenges are representative for
cyber-physical systems and energy auto-tuning. The evaluation of our solution
showed energy savings of up to 17:5%. It is lightweight, extensible, declarative
and efficient (comprehensible specifications yielding incremental analyses). In the
future, we intend to apply our approach to larger use cases and more complex
cyber-physical systems to show its scalability.</p>
      <p>Acknowledgments: This work is supported by the German Research
Foundation (DFG) in the SFB 912 “Highly Adaptive Energy-Efficient Computing”.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Aßmann</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          , et al.:
          <article-title>A reference architecture and roadmap for Models@run.time systems</article-title>
          .
          <source>In: Models@run.time. LNCS</source>
          , Springer (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Baheti</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gill</surname>
          </string-name>
          , H.:
          <article-title>Cyber-physical systems</article-title>
          .
          <source>Impact of Control Technology</source>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Blair</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bencomo</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          , France, R.B.:
          <article-title>Models@ run.time</article-title>
          .
          <source>Computer</source>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Broy</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cengarle</surname>
            ,
            <given-names>M.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Geisberger</surname>
          </string-name>
          , E.:
          <article-title>Cyber-physical systems: Imminent challenges</article-title>
          .
          <source>In: Large-Scale Complex IT Systems: Development, Operation and Management. LNCS</source>
          , Springer (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Bürger</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>RACR: A Scheme library for reference attribute grammar controlled rewriting</article-title>
          .
          <source>Tech. Rep. TUD-Fl12-09</source>
          , Technische Universität Dresden (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Bürger</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Reference attribute grammar controlled graph rewriting: Motivation and overview</article-title>
          .
          <source>In: Software Language Engineering: 8th Int. Conf. ACM</source>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Bürger</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , et al.:
          <article-title>Reference attribute grammars for metamodel semantics</article-title>
          .
          <source>In: Software Language Engineering: 3rd Int. Conf. LNCS</source>
          , vol.
          <volume>6563</volume>
          . Springer (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>8. Eclipse Foundation: EMF, http://www.eclipse.org/modeling/emf/</mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Ekman</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hedin</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          :
          <article-title>The JastAdd system: Modular extensible compiler construction</article-title>
          .
          <source>Science of Computer Programming</source>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Hedin</surname>
          </string-name>
          , G.:
          <article-title>Reference attributed grammars</article-title>
          .
          <source>Informatica (Slovenia)</source>
          (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>E.A.</given-names>
          </string-name>
          :
          <article-title>Cyber physical systems: Design challenges</article-title>
          .
          <source>In: ISORC. IEEE</source>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Magnusson</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hedin</surname>
          </string-name>
          , G.:
          <article-title>Circular reference attributed grammars: Their evaluation and applications</article-title>
          .
          <source>Science of Computer Programming</source>
          <volume>68</volume>
          (
          <issue>1</issue>
          ) (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Nagl</surname>
          </string-name>
          , M. (ed.):
          <article-title>Building Tightly Integrated Software Development Environments: The IPSEN Approach</article-title>
          . LNCS, Springer (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Nipkow</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baader</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Term Rewriting</article-title>
          and
          <string-name>
            <given-names>All</given-names>
            <surname>That</surname>
          </string-name>
          . Cambridge University Press (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Paakki</surname>
          </string-name>
          , J.:
          <article-title>Attribute grammar paradigms: A high-level methodology in language implementation</article-title>
          .
          <source>ACM Computing Surveys</source>
          <volume>27</volume>
          (
          <issue>2</issue>
          ) (
          <year>1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Reps</surname>
          </string-name>
          , T.W.:
          <article-title>Generating Language-Based Environments</article-title>
          .
          <source>Ph.D. thesis</source>
          , Cornell University (
          <year>1982</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Rozenberg</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          , et al. (eds.):
          <article-title>Handbook of Graph Grammars and Computing by Graph Transformation</article-title>
          , vol.
          <volume>1</volume>
          -
          <fpage>2</fpage>
          . World Scientific Publishing (
          <year>1997</year>
          /
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Söderberg</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hedin</surname>
          </string-name>
          , G.:
          <article-title>Incremental evaluation of reference attribute grammars using dynamic dependency tracking</article-title>
          .
          <source>Tech. rep.</source>
          , Lund University (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Steck</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lotz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schlegel</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Model-driven engineering and run-time model-usage in service robotics</article-title>
          .
          <source>ACM SIGPLAN Notices</source>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Watson</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marir</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Case-based reasoning: A review. The knowledge engineering review (</article-title>
          <year>1994</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>