ASF+SDF
Description
ASF+SDF is a term rewriting language that extends the syntax definition formalism
SDF with the following features:
- Conditional rewrite rules
- Concrete syntax (arbitrary user-defined syntax) that makes concrete meta-programming easy
- Default rewrite rules (fire only when all other rules fail)
- Traversal functions (for automatically traversing trees)
- Rewriting while preserving layout and source code comments
- Fully supported by the Meta-Environment
ASF+SDF can be used for defining:
- domain-specific languages
- source code analyses
- source code transformations
- semantics of programming languages
- many-sorted algebras
ASF+SDF is implementated by:
- A compiler that translates ASF to very efficient C code. This code is compiled to a standalone tool by gcc.
- A slower interpreter, but with a quicker startup time.
- Concrete syntax using SDF
Publications
%BIBTEX{
@InProceedings{BMV03,
author = {Brand, {M.G.J. van den} and Klusener, S. and Moonen, L. and Vinju, J.J.},
title = "{G}eneralized {P}arsing and {T}erm {R}ewriting - {S}emantics {D}irected {D}isambiguation",
booktitle = "Third Workshop on Language Descriptions Tools and Applications",
year = 2003,
volume = {82},
issue = {3},
publisher = {Elsevier},
editor = {Barret Bryant and Jo{\~a}o Saraiva},
series = {Electronic Notes in Theoretical Computer Science},
url = {http://homepages.cwi.nl/~jurgenv/publications/papers/ldta-final-version.pdf}
}
@article{BKV03,
author = "Brand, M.G.J. van den and P. Klint and J.J. Vinju",
title = {Term rewriting with Traversal functions},
journal = {ACM Transactions on Software Engineering and Methodology
(TOSEM)},
volume = {12},
number = {2},
year = {2003},
pages = {152--190},
url = {http://doi.acm.org/10.1145/941566.941568},
publisher = {ACM Press},
}
@Article{HeeringKlint00,
author = {J. Heering and P. Klint},
title = {Semantics of Programming Languages: A Tool-Oriented
Approach},
journal = {ACM SIGPLAN Notices},
year = 2000,
month = {March},
note = {also: ACM
CoRR? E-print Server
xxx.lanl.gov/abs/cs.PL/9911001}
}
@InProceedings{vanEmden:2002:JQA,
author = "Emden, E. van and L. Moonen",
title = "Java Quality Assurance by Detecting Code Smells",
booktitle = "Proceedings of the 9th Working Conference on Reverse
Engineering",
publisher = "IEEE Computer Society Press",
year = 2002,
month = oct,
url = "http://www.cwi.nl/~leon/papers/wcre2002/",
}
@inproceedings{BKO99,
author = "Brand, {M.G.J. van den} and P. Klint and P.A. Olivier",
title = "{C}ompilation and {M}emory {M}anagement for {A}{S}{F}+{S}{D}{F}",
editor = {S. J\"ahnichen},
booktitle = {Compiler Construction (CC'99)},
series = {LNCS},
volume = {1575},
pages = {198-213},
year = {1999},
url = "http://portal.acm.org/citation.cfm?id=567099&coll=ACM&dl=ACM&CFID=36363037&CFTOKEN=91566530",
}
@Article{BHK002,
author = "Brand, {M.G.J. van den} and
J. Heering and P. Klint and P.A. Olivier",
title = "{C}ompiling {R}ewrite {S}ystems: {T}he
{A}{S}{F}+{S}{D}{F} {C}ompiler",
journal = "ACM Transactions on Programming Languages and
Systems",
year = 2002,
volume = 24,
number = 4,
pages = 334--368
}
@inproceedings{BV00,
author = "Brand, {M.G.J. van den} and J. Vinju",
title = "{R}ewriting with {L}ayout",
editor = {N. Derschowitz and C. Kirchner},
booktitle = {Workshop on Rule-based Programming (PLI2000)},
year = {2000},
url = "http://www.meta-environment.org/pub/Meta-Environment/ASF%2bSDF/rewriting_with_layout.ps"
}
@inproceedings{BKV01,
author = "Brand, {M.G.J. van den} and P. Klint and J.J. Vinju",
title = "Term rewriting with {T}ype-safe {T}raversal {F}unctions",
editor = "B. Gramlich and S. Lucas",
year = "2002",
booktitle = "Workshop on Rewriting Strategies (WRS2002)",
url = "http://www.meta-environment.org/pub/Meta-Environment/ASF%2bSDF/wrs-traversalfunctions.ps",
}
@techreport{Deu94.prs,
author = "Deursen, {A. van}",
title = "Origin Tracking in Primitive Recursive Schemes",
institution = cwi,
number = "CS-R9401",
year = 1994,
address = "Amsterdam"
}
@Article{HKR94,
author = "J. Heering and P. Klint and J. Rekers",
title = "Lazy and incremental program generation",
journal = "ACM Transactions on Programming Languages and Systems",
year = 1994,
volume = 16,
pages = "1010--1023"
}
@PhdThesis{Deu94.thesis,
author = "Deursen, {A. van}",
title = "Executable Language Definitions: Case Studies and
Origin Tracking Techniques",
school = "University of Amsterdam",
year = 1994
}
@article{DKT93,
author = "Deursen, {A. van} and P. Klint and F. Tip",
title = {Origin Tracking},
journal = {Journal of Symbolic Computation},
volume = 15,
pages = {523--545},
year = 1993
}
@phdthesis{Meu94.thesis,
author = "Meulen, {E.A. van der}",
title = {Incremental Rewriting},
school = {University of Amsterdam},
year = {1994}
}
@phdthesis{Wal91,
author = {H. R. Walters},
title = {On Equal Terms --- Implementing Algebraic Specifications},
school = {University of Amsterdam},
year = {1991}
}
@InProceedings{BDKKM96.ind,
author = "Brand, {M.G.J. van den} and Deursen, {A. van} and P. Klint and S. Klusener and Meulen, {E.A. van der}",
title = "Industrial Applications of {Asd+Sdf}",
editor = "M. Wirsing and M. Nivat",
volume = "1101",
series = "Lec
2000
ture Notes in Computer Science",
booktitle = "Algebraic Methodology and Software Technology (AMAST'96)",
year = 1996,
publisher = "Springer-Verlag",
pages = "9-18"
}
@Book{DHK96,
editor = "Deursen, A. van and J. Heering and P. Klint",
title = "Language Prototyping: An Algebraic Specification Approach",
publisher = "World Scientific Publishing Co.",
year = "1996",
volume = "5",
series = "AMAST Series in Computing",
}
}%