@article{dagtraversals-extended,
  title = {Generalising tree traversals and tree transformations to DAGs: Exploiting sharing without the pain },
  journal = {Science of Computer Programming },
  volume = {137},
  pages = {63 - 97},
  year = {2017},
  note = {Selected and extended papers from Partial Evaluation and Program Manipulation 2015 (PEPM'15) },
  issn = {0167-6423},
  doi = {10.1016/j.scico.2016.03.006},
  url = {http://www.sciencedirect.com/science/article/pii/S0167642316000824},
  author = {Patrick Bahr and Emil Axelsson},
  Month = apr,
  Abstract = {We present a recursion scheme based on attribute grammars that can
be transparently applied to trees and acyclic graphs. Our recursion
scheme allows the programmer to implement a tree traversal or a tree
transformation and then apply it to compact graph representations of
trees instead. The resulting graph traversal or graph transformation
avoids recomputation of intermediate results for shared nodes --
even if intermediate results are used in different
contexts. Consequently, this approach leads to asymptotic speedup
proportional to the compression provided by the graph
representation. In general, however, this sharing of intermediate
results is not sound. Therefore, we complement our implementation of
the recursion scheme with a number of correspondence theorems that
ensure soundness for various classes of traversals. We illustrate
the practical applicability of the implementation as well as the
complementing theory with a number of examples.},
  Keywords = {attribute grammar, tree automata, graph automata, sharing, rewriting, EDSLs, graph traversals}
}