<!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>Zipper-based Embedding of Modern Attribute Grammar Extensions?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pedro Martins</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universidade do Minho</institution>
          ,
          <country country="PT">Portugal</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This research abstract describes the research plan for a Ph.D project. We plan to de ne a powerful and elegant embedding of modern extensions to attribute grammars. Attribute grammars are a suitable formalism to express complex, multiple traversal algorithms. In recent years there has been a lot of work in attribute grammars, namely by de ning new extensions to the formalism (forwarding and reference attribute grammars, etc), by proposing new attribute evaluation models (lazy and circular evaluators, etc) and by embedding attribute grammars (like rst class attribute grammars). We will study how to design such extensions through a zipper-based embedding and we will study e cient evaluation models for this embedding. Finally, we will express several attribute grammars in our setting and we will analyse the performance of our implementation.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Attribute grammars (AGs) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] are a convenient formalism not only for specifying
the semantic analysis phase of a compiler but also to model complex multiple
traversal algorithms. Traditional AG systems tailor their own syntax for the
definition of AGs. Attribute grammars in concrete syntaxes are then automatically
transformed into e cient implementations in general purpose programming
languages such as Haskell, OCaml and C. LRC [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], UUAG [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] or Silver [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] are
among the AG systems that are designed in this way.
      </p>
      <p>For many applications, it is desirable to design and implement a special
purpose language that is tailored to the characteristics of the problem domain.
Perhaps the most well-known example of such a language is provided by the
compiler compiler system yacc. In general, however, the design and implementation
of a new programming language from scratch can be costly. For that reason, the
designers of Simula-67 proposed that new languages are implemented through
library interfaces, so the new embedded language inherits all the bene ts of its
host language, and the implementation e ort is much reduced.</p>
      <p>
        In the context of attribute grammars, this idea has already been explored [5{
7]. Indeed, each of this embeddings bene ts from the particular characteristics
of the host language in order to achieve elegant attribute grammar solutions.
? This work has been partially supported by FCT (Portuguese Science Foundation)
project AMADEUS, under grant (POCTI, PTDC/EIA/70271/2006)
Recently, an embedding for classic AGs has been developed in a functional
language [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. This embedding, of around 100 lines of code, relies on an extremely
simple mechanism based on the notion of functional zippers [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>With our work we intend to explore this new approach in a systematic way.
Our goal is to fully develop a mature system with advanced AG constructions
embedded in a zipper-based setting, namely circular attributes ( x-point
computation), aspects (aspected oriented programming), higher-order and forwarding
(functional programming), references (imperative programming), multiple
inheritance (object oriented programming), strategies (strategic programming) and
incremental attribute evaluation (incremental computation).</p>
      <p>Once we de ne how such an embedding can be modeled in a functional
setting, we will study di erent models of execution for the AGs. Finally, we will
conduct a series of experiments in order to benchmark our system against other
well-established ones.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Overview and Related</title>
    </sec>
    <sec id="sec-3">
      <title>Work</title>
      <p>
        Attribute grammars have proven to be a suitable formalism to the design and
implementation of both domain speci c and general purpose languages, with
powerful systems based on attribute grammars [10{12, 2] been constructed. While,
in the beginning, AG systems were used mainly to specify and derive e cient
(batch) compilers for formal languages, nowadays, AG-based systems are
powerful tools that not only specify compilers, but also syntax editors [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ],
programming environments [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], visual languages [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], complex pretty printing algorithms
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], program animations [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], etc. More recently, new extensions/features have
been de ned for attribute grammars, like forwarding attribute grammars [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ],
higher-order attribute grammars [
        <xref ref-type="bibr" rid="ref15 ref17">17, 15</xref>
        ], reference attribute grammars [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ],
multiple inheritance [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], aspect oriented attribute grammars [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
      </p>
      <p>
        While these extensions can be considered standard in traditional systems,
they have not yet been studied in the context of modern functional AG
embeddings, such as [
        <xref ref-type="bibr" rid="ref5 ref7">5, 7</xref>
        ]. Given the simple mechanism of [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], however, we believe
that some extensions should be simple to obtain in that setting, while others,
although probably requiring improvements on the embedding mechanism itself,
still can be achieved elegantly.
      </p>
      <p>
        With our work, we also propose to make incremental computation available
within our embedded AG system. Reps was the rst to use incremental attribute
evaluation in the structured editors produced by the Synthesizer Generator
System [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. The LRC system [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] is a programming environment generator that
uses a strict, purely functional attribute evaluators and incrementality is
obtained via function memoisation [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. The Eli [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] AG systems produce visual
programming environments but it does not support incremental evaluation, yet.
The ASF+SDF is a programming environment generator based on the paradigm
of term re-writing [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. The action semantics environment was developed with
ASF+SDF [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. None of these systems use incremental evaluation.
      </p>
      <p>
        In the context of functional programming, John Hughes was the rst to work
on the incremental evaluation of lazy programs [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. Acar et al [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] presented
a general technique for the incrementalisation of functional programs. Magnus
Carlsson modeled this work as a Haskell library [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]. These techniques, however,
do not handle lazy evaluation. In [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], the authors show that within their
embedding, incremental computation can be obtained via function memoization. Their
techniques, however, do not require lazy evaluation. This means that if we rely
on lazyness in any of our extensions, this approach to incrementality may break
down and further studies are necessary. Even if this does not occur, the impact
of memoization in the authors' approach still needs to be evaluated.
3
      </p>
    </sec>
    <sec id="sec-4">
      <title>Research Method</title>
      <p>
        The aim of this project is to embed advanced features of the AG paradigm into
a general purpose, lazy, and purely functional language. This goal builds upon
the de nition attribute grammars as a domain-speci c embedded language in
Haskell by [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. That is, attribute grammars become a Haskell library of
higherorder and lazy functions, and we want to model in this library new language
concepts like circular attributes, aspects, higher-ordeness, forwarding, references,
multiple inheritance, strategies, and, nally, incremental evaluation.
      </p>
      <p>
        We also intend to conduct a systematic performance study of traditional
attribute grammar evaluators versus their implementation as a library in Haskell.
We want to verify with realistic examples if a highly optimized functional
implementation of AGs (lazy, strict and deforested evaluators [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]) is really faster than
the simple Haskell library. The outcome of the performance experiments, will
allow us to to recommend improvements both to existing compilers for Haskell,
attribute grammar based systems, and incremental programming environments.
      </p>
      <p>
        The phases described below constitute the main work areas for our work:
3.1 Design: For many applications, it is desirable to design and implement a
special purpose language that is tailored to the characteristics of the problem
domain. However, the design and implementation of a new programming
language from scratch is usually costy. The idea of embedded languages has been
enthusiastically embraced by the functional programming community [
        <xref ref-type="bibr" rid="ref14 ref7 ref8">14, 7, 8</xref>
        ].
      </p>
      <p>
        The rst goal to achieve in this project is to enhance the zipper-based
embedding of [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] with advanced AG features such as aspects, higher-order and circular
attributes, references, multiple inheritance and incremental attribute evaluation.
In order to achieve this, we will design and propose di erent implementations for
each feature, and each proposal will possibly rely on a di erent advanced feature
of the host language, Haskell. Then, we will conduct several experiments in
order to realize which proposal achieves our goal as elegantly as possible.
3.2 Implementation: One of the uses of AGs today is in the creation of
programming environments (also called language-based editing environments), that
report on syntactic and semantic errors as the program is being constructed.
In such an environment, it is important that the attribute values are computed
incrementally after each edit action, re-using results of previous computations
where possible. Reps and Teitelbaum were the rst to demonstrate the feasibility
of the idea [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. It is partly because of this emphasis on incremental
computation that the embedding of attribute grammars into functional programming was
ignored: it was not clear at all how incremental computation could be achieved.
      </p>
      <p>
        An important step was made by Jo~ao Saraiva, who showed how the known
attribute evaluation techniques could all be implemented in a strict, purely
functional setting [
        <xref ref-type="bibr" rid="ref21 ref27">21, 27</xref>
        ]. He was however not able to apply these techniques as part
of an implementation of attribute grammars as a software library in Haskell: a
quite complex preprocessor was still required.
      </p>
      <p>
        Acar et al. [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] presented a new technique for incremental computation of
functional programs, which is completely general as it can be used to make any
program incremental. Furthermore, it is implemented as a library of functions
in ML. A remarkable property of Acar's work is that it maintains a dynamic
dependency graph, as opposed to the static dependency graph used in all previous
work on attribute grammars. Due to this, it potentially requires few
recomputations after the input has been changed. This theoretical advantage may however
be outweighed in practice by the additional book-keeping required.
      </p>
      <p>
        With our work we will study di erent execution models for our extensions. In
particular, we will work on the development of incremental models of execution.
3.3 Benchmarks: We will apply the library developed in the previous phases
to realistic examples (Java grammar, Pretty-printing optimal algorithm [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ],
etc). Then, we will compare the performance of the obtained implementations
with equivalent implementations obtained by other AG systems. Firstly, we will
compare the performance of our library against other functional AG embeddings,
whenever such a comparison is possible (recall that most of the features we want
to embed in our system are not available in functional embeddings such as [
        <xref ref-type="bibr" rid="ref5 ref7">5,
7</xref>
        ]). Secondly, we will compare our implementations against the ones derived by
standard AG systems from AG expressed in special purpose languages [2{4].
Research Questions: The following research questions have to be answered in the
project: How can we correctly and elegantly embed advanced attribute grammar
features,e.g., reference, forwarding, higher-orderness, in the embedding of [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]?
What is the impact of memoization in the embedding of [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and in the extensions
we de ne for it? If lazyness is necessary for any of our extensions, how can we
restore incremental computation? In other words, how can we combine lazyness
and incremental computation? How does the perfomance of our implementations
compare to well-established others?
      </p>
    </sec>
    <sec id="sec-5">
      <title>4 Conclusions</title>
      <p>We propose to develop a mature attribute grammar system, embedded in a
modern functional programming language, and with all advanced AG features
incorporated. Later, a systematic analysis on this system will be conducted.</p>
      <p>
        The bene ciaries of this research are implementors of functional programming
languages [
        <xref ref-type="bibr" rid="ref29 ref30">29, 30</xref>
        ], attribute grammar-based systems [
        <xref ref-type="bibr" rid="ref12 ref14 ref2">12, 14, 2</xref>
        ] and programming
environments [
        <xref ref-type="bibr" rid="ref10 ref22 ref23 ref31">10, 22, 23, 31</xref>
        ], because we provide experimental evidence to guide
further work. The software artifacts we produce in the process will be of use to
a wide audience of functional programmers.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Knuth</surname>
            ,
            <given-names>D.E.</given-names>
          </string-name>
          :
          <article-title>Semantics of Context-free Languages</article-title>
          .
          <source>Mathematical Systems Theory</source>
          <volume>2</volume>
          (
          <issue>2</issue>
          ) (
          <year>1968</year>
          )
          <volume>127</volume>
          {145 Correction: Math.
          <source>Systems Theory</source>
          <volume>5</volume>
          ,
          <issue>1</issue>
          , pp.
          <fpage>95</fpage>
          -
          <lpage>96</lpage>
          (
          <year>1971</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Kuiper</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , J.:
          <article-title>Lrc - A Generator for Incremental Language-Oriented Tools</article-title>
          . In Koskimies, K., ed.
          <source>: 7th International Conference on Compiler Construction</source>
          . Volume
          <volume>1383</volume>
          of LNCS., Springer-Verlag (
          <year>1998</year>
          )
          <volume>298</volume>
          {
          <fpage>301</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baars</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , Loh, A.:
          <article-title>The UU-AG attribute grammar system (</article-title>
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Wyk</surname>
            ,
            <given-names>E.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krishnan</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bodin</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Johnson</surname>
          </string-name>
          , E.,
          <string-name>
            <surname>Schwerdfeger</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Russell</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          : Tool Demonstration:
          <article-title>Silver Extensible Compiler Frameworks and Modular Language Extensions for Java and C</article-title>
          . In: SCAM. (
          <year>2006</year>
          )
          <fpage>161</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>de Moor</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Backhouse</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>First-Class Attribute Grammars</article-title>
          . In Parigot, D.,
          <string-name>
            <surname>Mernik</surname>
          </string-name>
          , M., eds.
          <source>: Third Workshop on Attribute Grammars and their Applications</source>
          ,
          <source>WAGA'99</source>
          , Ponte de Lima, Portugal, INRIA Rocquencourt (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Sloane</surname>
            ,
            <given-names>A.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kats</surname>
            ,
            <given-names>L.C.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Visser</surname>
          </string-name>
          , E.:
          <article-title>A pure object-oriented embedding of attribute grammars</article-title>
          . In Ekman, T.,
          <string-name>
            <surname>Vinju</surname>
          </string-name>
          , J., eds.
          <source>: Proceedings of the Ninth Workshop on Language Descriptions</source>
          , Tools, and
          <string-name>
            <surname>Applications</surname>
          </string-name>
          (LDTA
          <year>2009</year>
          ). Electronic Notes in Theoretical Computer Science, Elsevier Science Publishers (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Viera</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Attribute Grammars Fly First-class: how to do Aspect Oriented Programming in Haskell</article-title>
          .
          <source>In: Procs. of the 14th ACM SIGPLAN Int. Conf. on Functional Programming (ICFP'09)</source>
          . (
          <year>2009</year>
          )
          <volume>245</volume>
          {
          <fpage>256</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Fernandes</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sloane</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Saraiva</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cunha</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>A lightweight functional embedding of attribute grammars (in preparation)</article-title>
          .
          <source>(</source>
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Huet</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          :
          <article-title>The zipper</article-title>
          .
          <source>Journal of Functional Programming</source>
          <volume>7</volume>
          (
          <issue>5</issue>
          ) (
          <year>1997</year>
          )
          <volume>549</volume>
          {
          <fpage>554</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Reps</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Teitelbaum</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>The Synthesizer Generator</article-title>
          . Springer (
          <year>1989</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Jourdan</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parigot</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Julie</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Durin</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bellec</surname>
            ,
            <given-names>C.L.</given-names>
          </string-name>
          :
          <article-title>Design, implementation and evaluation of the fnc-2 attribute grammar system</article-title>
          .
          <source>In: PLDI '90: Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation</source>
          , New York, NY, USA, ACM (
          <year>1990</year>
          )
          <volume>209</volume>
          {
          <fpage>222</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Kastens</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pfahler</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jung</surname>
          </string-name>
          , M.T.:
          <article-title>The Eli System</article-title>
          .
          <source>In: CC '98: Procs. of the 7th Int. Conf. on Compiler Construction</source>
          , London, UK, Springer-Verlag (
          <year>1998</year>
          )
          <volume>294</volume>
          {
          <fpage>297</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Kastens</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schmidt</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Vl-eli: A generator for visual languages (</article-title>
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Azero</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , J.:
          <article-title>Designing and Implementing Combinator Languages</article-title>
          . In Swierstra, D.,
          <string-name>
            <surname>Henriques</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Oliveira</surname>
          </string-name>
          , J.,
          <source>eds.: 3rd Summer School on Adv. Funct. Programming. Volume 1608 of LNCS Tutorial</source>
          .
          <article-title>(</article-title>
          <year>1999</year>
          )
          <volume>150</volume>
          {
          <fpage>206</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , J.:
          <article-title>Component-based programming for higher-order attribute grammars</article-title>
          .
          <source>In: GPCE '02: Proceedings of the 1st ACM SIGPLAN/SIGSOFT conference on Generative Programming and Component Engineering</source>
          , London, UK, SpringerVerlag (
          <year>2002</year>
          )
          <volume>268</volume>
          {
          <fpage>282</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Wyk</surname>
            ,
            <given-names>E.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moor</surname>
            ,
            <given-names>O.d.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Backhouse</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kwiatkowski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Forwarding in attribute grammars for modular language design</article-title>
          .
          <source>In: CC '02: Proceedings of the 11th International Conference on Compiler Construction</source>
          , London, UK, Springer-Verlag (
          <year>2002</year>
          )
          <volume>128</volume>
          {
          <fpage>142</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vogt</surname>
          </string-name>
          , H.:
          <article-title>Higher order attribute grammars</article-title>
          . In Alblas, H.,
          <string-name>
            <surname>Melichar</surname>
          </string-name>
          , B., eds.:
          <source>International Summer School on Attribute Grammars, Applications and Systems</source>
          . Volume
          <volume>545</volume>
          of LNCS., Springer-Verlag (
          <year>1991</year>
          )
          <volume>48</volume>
          {
          <fpage>113</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Hedin</surname>
          </string-name>
          , G.:
          <article-title>Reference attributed grammars</article-title>
          . In Parigot, D.,
          <string-name>
            <surname>Mernik</surname>
          </string-name>
          , M., eds.
          <source>: 2nd Workshop on Attribute Grammars and their Applications</source>
          .
          <article-title>(</article-title>
          <year>1999</year>
          )
          <volume>153</volume>
          {
          <fpage>172</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Mernik</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lenic</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Avdicausevic</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zumer</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Multiple attribute grammar inheritance</article-title>
          . In: Informatica. (
          <year>2000</year>
          )
          <volume>319</volume>
          {
          <fpage>328</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>de Moor</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Peyton Jones</surname>
          </string-name>
          , S., van
          <string-name>
            <surname>Wyk</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          :
          <article-title>Aspect-oriented compilers</article-title>
          .
          <source>In: Proceedings of the First International Symposium on Generative and ComponentBased Software Engineering (GCSE '99)</source>
          .
          <source>LNCS</source>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , J.:
          <article-title>Purely Functional Implementation of Attribute Grammars</article-title>
          .
          <source>PhD thesis</source>
          , Department of Computer Science, Utrecht University, The Netherlands (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22. van den Brand, M.,
          <string-name>
            <surname>Klint</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Olivier</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Compilation and Memory Management for ASF+SDF</article-title>
          . In Stefan Jahnichen, ed.
          <source>: 8th International Conference on Compiler Construction</source>
          . Volume
          <volume>1575</volume>
          of LNCS., Springer-Verlag (
          <year>1999</year>
          )
          <volume>198</volume>
          {
          <fpage>213</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23. van den Brand, M.,
          <string-name>
            <surname>Iversen</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mosses</surname>
            ,
            <given-names>P.D.:</given-names>
          </string-name>
          <article-title>An action environment</article-title>
          .
          <source>Sci. Comput</source>
          . Program.
          <volume>61</volume>
          (
          <issue>3</issue>
          ) (
          <year>2006</year>
          )
          <volume>245</volume>
          {
          <fpage>264</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Hughes</surname>
          </string-name>
          , J.:
          <article-title>Lazy memo-functions</article-title>
          . In Jouannaud, J.P., ed.:
          <source>Functional Programming Languages and Computer Architecture</source>
          . Volume
          <volume>201</volume>
          of LNCS.,
          <source>SpringerVerlag</source>
          (
          <year>1985</year>
          )
          <volume>129</volume>
          {
          <fpage>146</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Acar</surname>
            ,
            <given-names>U.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blelloch</surname>
            ,
            <given-names>G.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harper</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Adaptive functional programming</article-title>
          .
          <source>In: POPL'02: Proceedings of the 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages</source>
          , New York, NY, USA, ACM (
          <year>2002</year>
          )
          <volume>247</volume>
          {
          <fpage>259</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Carlsson</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Monads for incremental computing</article-title>
          .
          <source>In: ICFP'02: Proceedings of the seventh ACM SIGPLAN International Conference on Functional Programming</source>
          , New York, NY, USA, ACM (
          <year>2002</year>
          )
          <volume>26</volume>
          {
          <fpage>35</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Saraiva</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuiper</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Functional Incremental Attribute Evaluation</article-title>
          . In David Watt, ed.
          <source>: 9th International Conference on Compiler Construction</source>
          , CC/ETAPS'
          <year>2000</year>
          .
          <article-title>Volume 1781 of LNCS</article-title>
          ., Springer-Verlag (
          <year>2000</year>
          )
          <volume>279</volume>
          {
          <fpage>294</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Swierstra</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chitil</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          :
          <article-title>Linear, bounded, functional pretty-printing</article-title>
          .
          <source>Journal of Functional Programming</source>
          <volume>19</volume>
          (
          <issue>01</issue>
          ) (
          <year>2009</year>
          )
          <volume>1</volume>
          {
          <fpage>16</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <given-names>Peyton</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Hughes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Augustsson</surname>
          </string-name>
          ,
          <string-name>
            <surname>L.</surname>
          </string-name>
          , et al.
          <source>: Report on the programming language Haskell 98. Technical report</source>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <surname>Leroy</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          :
          <article-title>The Objective Caml System - Documentation and User's Manual (</article-title>
          <year>1997</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31.
          <string-name>
            <surname>Michiel</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Proxima : a presentation-oriented editor for structured documents</article-title>
          .
          <source>PhD thesis</source>
          , Utrecht University, The Netherlands (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>