publications: - title: "Refactoring" author: - name: "Martin Fowler" link: "http://martinfowler.com/" year: "2000" doi: "http://doi.ieeecomputersociety.org/10.1109/TOOLS.2000.10059" links: doi: "http://doi.ieeecomputersociety.org/10.1109/TOOLS.2000.10059" tags: - "refactoring" researchr: "https://researchr.org/publication/Fowler00" cites: 0 citedby: 0 pages: "437" booktitle: "TOOLS" kind: "inproceedings" key: "Fowler00" - title: "Refactoring" author: - name: "Martin Fowler" link: "http://martinfowler.com/" year: "2002" doi: "http://doi.acm.org/10.1145/581339.581453" links: doi: "http://doi.acm.org/10.1145/581339.581453" tags: - "refactoring" researchr: "https://researchr.org/publication/Fowler02%3A0" cites: 0 citedby: 0 pages: "701" booktitle: "ICSE" kind: "inproceedings" key: "Fowler02:0" - title: "Composing Source-to-Source Data-Flow Transformations with Rewriting Strategies and Dependent Dynamic Rewrite Rules" author: - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "https://doi.org/10.1007/978-3-540-31985-6_14" abstract: "Data-flow transformations used in optimizing compilers are also useful in other programming tools such as code generators, aspect weavers, domain-specific optimizers, and refactoring tools. These applications require source-to-source transformations rather than transformations on a low-level intermediate representation. In this paper we describe the composition of source-to-source data-flow transformations in the program transformation language Stratego. The language supports the high-level specification of transformations by means of rewriting strategy combinators that allow a natural modeling of data- and control-flow without committing to a specific source language. Data-flow facts are propagated using dynamic rewriting rules. In particular, we introduce the concept of dependent dynamic rewrite rules for modeling the dependencies of data-flow facts on program entities such as variables. The approach supports the combination of analysis and transformation, the combination of multiple transformations, the combination with other types of transformations, and the correct treatment of variable binding constructs and lexical scope to avoid free variable capture." links: doi: "https://doi.org/10.1007/978-3-540-31985-6_14" tags: - "programming languages" - "model-to-model transformation" - "optimization" - "rule-based" - "intermediate representation" - "program analysis" - "meta programming" - "data-flow language" - "graph transformation" - "meta-model" - "dynamic rewrite rules" - "modeling language" - "modeling" - "variable binding" - "Stratego/XT" - "model refactoring" - "refactoring" - "transformation language" - "language modeling" - "composition" - "dynamic rules" - "points-to analysis" - "domain analysis" - "dependent dynamic rewrite rules" - "analysis" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "rules" - "rule-based refactoring" - "compiler" - "model transformation" - "programming" - "program optimization" - "Meta-Environment" - "rewriting" - "data-flow analysis" - "systematic-approach" - "rewriting strategies" - "open-source" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/OlmosV05" cites: 0 citedby: 0 pages: "204-220" booktitle: "CC" kind: "inproceedings" key: "OlmosV05" - title: "WebWorkFlow: An Object-Oriented Workflow Modeling Language for Web Applications" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Ruben Verhaaf" link: "http://www.linkedin.com/pub/ruben-verhaaf/3/a73/2ab" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1007/978-3-540-87875-9_8" abstract: "Workflow languages are designed for the high-level description of processes and are typically not suitable for the generation of complete applications. In this paper, we present WebWorkFlow, an object-oriented workflow modeling language for the high-level description of workflows in web applications. Workflow descriptions define procedures operating on domain objects. Procedures are composed using sequential and concurrent process combinators. WebWorkFlow is an embedded language, extending WebDSL, a domain-specific language for web application development, with workflow abstractions. The extension is implemented by means of model-to-model transformations. Rather than providing an exclusive workflow language, WebWorkFlow supports interaction with the underlying WebDSL language. WebWorkFlow supports most of the basic workflow control patterns. " links: doi: "http://dx.doi.org/10.1007/978-3-540-87875-9_8" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-029.pdf" tags: - "workflow patterns" - "model-to-model transformation" - "interaction design" - "WebDSL" - "transformation engineering" - "completeness" - "pattern language" - "meta-model" - "modeling language" - "modeling" - "language engineering" - "transformation language" - "language modeling" - "web engineering" - "language design" - "model-driven development" - "source-to-source" - "model-driven engineering" - "object-role modeling" - "model transformation" - "web applications" - "DSL" - "abstraction" - "Meta-Environment" - "workflow" - "process modeling" - "WebWorkFlow" - "meta-objects" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/HemelVV08" cites: 0 citedby: 6 pages: "113-127" booktitle: "MoDELS" kind: "inproceedings" key: "HemelVV08" - title: "Refactoring Object-Oriented Frameworks" author: - name: "William F. Opdyke" link: "https://researchr.org/alias/william-f.-opdyke" year: "1992" abstract: "This thesis defines a set of program restructuring operations (refactorings) that support the design, evolution and reuse of object-oriented application frameworks. The focus of the thesis is on automating the refactorings in a way that preserves the behavior of a program. The refactorings are defined to be behavior preserving, provided that their preconditions are met. Most of the refactorings are simple to implement and it is almost trivial to show that they are behavior preserving. However, for a few refactorings, one or more of their preconditions are in general undecidable. Fortunately, for some cases it can be determined whether these refactorings can be applied safely. Three of the most complex refactorings are defined in detail: generalizing the inheritance hierarchy, specializing the inheritance hierarchy and using aggregations to model the relationships among classes. These operations are decomposed into more primitive parts, and the power of these operations is discussed from the perspectives of automatability and usefulness in supporting design. Two design constraints needed in refactoring are class invariants and exclusive components. These constraints are needed to ensure that behavior is preserved across some refactorings. This thesis gives some conservative algorithms for determining whether a program satisfies these constraints, and describes how to use this design information to refactor a program." links: "acm dl": "http://portal.acm.org/citation.cfm?id=169783" tags: - "object-oriented programming" - "reusable components" - "meta programming" - "application framework" - "meta-model" - "model refactoring" - "refactoring" - "constraints" - "reuse" - "object-role modeling" - "information models" - "subject-oriented programming" - "Meta-Environment" - "design" - "feature-oriented programming" - "meta-objects" researchr: "https://researchr.org/publication/Opdyke1992" cites: 0 citedby: 0 school: "University of Illinois" address: "Urbana-Champaign, IL, USA" advisor: - name: "Ralph E. Johnson" link: "http://st-www.cs.illinois.edu/users/johnson/" kind: "phdthesis" key: "Opdyke1992" - title: "Warm fusion in Stratego: A case study in generation of program transformation systems" author: - name: "Patricia Johann" link: "http://personal.cis.strath.ac.uk/~patricia/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2000" doi: "http://dx.doi.org/10.1023/A:1018956702672" abstract: "Stratego is a domain-specific language for the specification of program transformation systems. The design of Stratego is based on the paradigm of rewriting strategies: user-definable programs in a little language of strategy operators determine where and in what order transformation rules are (automatically) applied to a program. The separation of rules and strategies supports modularity of specifications. Stratego also provides generic features for specification of program traversals. In this paper we present a case study of Stratego as applied to a non-trivial problem in program transformation. We demonstrate the use of Stratego in eliminating intermediate data structures from (also known as deforesting) functional programs via the warm fusion algorithm of Launchbury and Sheard. This algorithm has been specified in Stratego and embedded in a fully automatic transformation system for kernel Haskell. The entire system consists of about 2600 lines of specification code, which breaks down into 1850 lines for a general framework for Haskell transformation and 750 lines devoted to a highly modular, easily extensible specification of the warm fusion transformer itself. Its successful design and construction provides further evidence that programs generated from Stratego specifications are suitable for integration into real systems, and that rewriting strategies are a good paradigm for the implementation of such systems. " links: doi: "http://dx.doi.org/10.1023/A:1018956702672" "stratego wiki": "http://www.program-transformation.org/Stratego/WarmFusionInStratego" tags: - "programming languages" - "optimization" - "rule-based" - "data-flow language" - "generic programming" - "case study" - "graph transformation" - "Stratego/XT" - "traversal" - "deforestation" - "transformation language" - "functional programming" - "language design" - "Haskell" - "data-flow programming" - "little language" - "data-flow" - "graph-rewriting" - "rules" - "programming paradigms" - "code generation" - "warm fusion" - "transformation system" - "programming" - "program optimization" - "higher-order transformations" - "rewriting" - "design" - "extensible language" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/JohannV00" cites: 1 citedby: 0 journal: "AMAI" volume: "29" number: "1-4" pages: "1-34" kind: "article" key: "JohannV00" - title: "A Survey of Strategies in Program Transformation Systems" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2001" doi: "https://doi.org/10.1016/S1571-0661(04)00270-1" abstract: "Program transformation is used in a wide range of applications including compiler construction, optimization, program synthesis, refactoring, software renovation, and reverse engineering. Complex program transformations are achieved through a num- ber of consecutive modifications of a program. Transformation rules define basic modifications. A transformation strategy is an algorithm for choosing a path in the rewrite relation induced by a set of rules. This paper surveys the support for the definition of strategies in program transformation systems. After a discussion of kinds of program transformation and choices in program representation, the basic elements of a strategy system are discussed and the choices in the design of a strategy language are considered. Several styles of strategy systems as provided in existing languages are then analyzed." links: doi: "https://doi.org/10.1016/S1571-0661(04)00270-1" successor: "https://researchr.org/publication/Visser05" "stratego/xt wiki": "http://strategoxt.org/Transform/ASurveyOfRewritingStrategiesInProgramTransformationSystems" tags: - "programming languages" - "optimization" - "rule-based" - "transformation engineering" - "graph transformation" - "reverse engineering" - "refactoring" - "language engineering" - "transformation language" - "software language engineering" - "language design" - "strategies" - "graph-rewriting" - "survey" - "software engineering" - "rules" - "transformation system" - "rule-based refactoring" - "compiler" - "programming" - "program optimization" - "rewriting" - "design" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser01-WRS" cites: 0 citedby: 0 journal: "ENTCS" volume: "57" pages: "109-143" kind: "article" key: "Visser01-WRS" - title: "WebDSL: A Case Study in Domain-Specific Language Engineering" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://dx.doi.org/10.1007/978-3-540-88643-3_7" abstract: " The goal of domain-specific languages (DSLs) is to increase the productivity of software engineers by abstracting from low-level boil- erplate code. Introduction of DSLs in the software development process requires a smooth workflow for the production of DSLs themselves. This requires technology for designing and implementing DSLs, but also a methodology for using that technology. That is, a collection of guidelines, design patterns, and reusable DSL components that show developers how to tackle common language design and implementation issues. This paper presents a case study in domain-specific language engineering. It reports on a pro ject in which the author designed and built WebDSL, a DSL for web applications with a rich data model, using several DSLs for DSL engineering: SDF for syntax definition and Stratego/XT for code gener- ation. The paper follows the stages in the development of the DSL. The contributions of the paper are three-fold. (1) A tutorial in the application of the specific SDF and Stratego/XT technology for building DSLs. (2) A description of an incremental DSL development process. (3) A domain- specific language for web-applications with rich data models. The paper concludes with a survey of related approaches. " links: doi: "http://dx.doi.org/10.1007/978-3-540-88643-3_7" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-023.pdf" "webdsl": "http://webdsl.org" "stratego/xt": "http://strategoxt.org" tags: - "WebDSL" - "reusable components" - "DSL engineering" - "web application development" - "data-flow language" - "pattern language" - "case study" - "software components" - "SDF" - "meta-model" - "abstract syntax" - "modeling language" - "Stratego/XT" - "language engineering" - "software language engineering" - "language modeling" - "software component" - "web engineering" - "language design" - "reuse" - "model-driven development" - "data-flow" - "survey" - "software engineering" - "model-driven engineering" - "web applications" - "DSL" - "Meta-Environment" - "incremental" - "design" - "process modeling" - "systematic-approach" - "ASF+SDF" - "language" - "Stratego" - "domain-specific language" researchr: "https://researchr.org/publication/Visser07" cites: 0 citedby: 9 pages: "291-373" booktitle: "GTTSE" kind: "inproceedings" key: "Visser07" - title: "Scoped Dynamic Rewrite Rules" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2001" doi: "https://doi.org/10.1016/S1571-0661(04)00298-1" abstract: "The applicability of term rewriting to program transformation is limited by the lack of control over rule application and by the context-free nature of rewrite rules. The first problem is addressed by languages supporting user-definable rewriting strate- gies. This paper addresses the second problem by extending rewriting strategies with scoped dynamic rewrite rules. Dynamic rules are generated at run-time and can access variables available from their definition context. Rules generated within a rule scope are automatically retracted at the end of that scope. The technique is illustrated by means of several program tranformations: bound variable renaming, function inlining, and dead function elimination. " links: doi: "https://doi.org/10.1016/S1571-0661(04)00298-1" successor: "https://researchr.org/publication/BravenboerDOV06" tags: - "programming languages" - "rule-based" - "graph transformation" - "dynamic rewrite rules" - "Stratego/XT" - "transformation language" - "term rewriting" - "graph-rewriting" - "rules" - "context-aware" - "access control" - "rewriting" - "role-based access control" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser01-DR" cites: 0 citedby: 0 journal: "ENTCS" volume: "59" number: "4" pages: "375-396" kind: "article" key: "Visser01-DR" - title: "Turning Dynamic Typing into Static Typing by Program Specialization in a Compiler Front-end for Octave" author: - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1109/SCAM.2003.1238040" abstract: "Array processing languages such as APL, Matlab and Octave rely on dynamic typechecking by the interpreter rather than static typechecking and are designed for user convenience with a syntax close to mathematical notation. Functions and operators are highly overloaded. The price to be paid for this flexibility is computational performance, since the run-time system is responsible for type checking, array shape determination, function call dispatching, and handling possible run-time errors. In order to produce effecient code, an Octave compiler should address those issues at compile-time as much as possible. In particular, static type and shape inferencing can improve the quality of the generated code. In this paper we discuss how overloading in dynamically typed Octave programs can be resolved by program specialization. We discuss the typing issues in compilation of Octave programs and give an overview of the implementation of the specializer in the transformation language Stratego." links: doi: "https://doi.org/10.1109/SCAM.2003.1238040" tags: - "programming languages" - "type inference" - "dynamic typing" - "interpreter" - "Stratego/XT" - "transformation language" - "Octave" - "language design" - "type system" - "type checking" - "transformation system" - "compiler" - "higher-order transformations" - "program specialization" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/OlmosV03" cites: 0 citedby: 0 pages: "141-150" booktitle: "SCAM" kind: "inproceedings" key: "OlmosV03" - title: "Adding Concrete Syntax to a Prolog-Based Program Synthesis System (Extended Abstract)" author: - name: "Bernd Fischer" link: "http://www.ecs.soton.ac.uk/people/bf" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1007/978-3-540-25938-1_5" abstract: "Program generation and transformation systems work on two language levels, the object-level (i.e., the language of the manipulated programs), and the meta-level (i.e., the implementation language of the system itself). The meta-level representations of object-level program fragments are usually built in an essentially syntax-free fashion using the operations provided by the meta-language. However, syntax matters and a large conceptual distance between the two languages makes it difficult to maintain and extend such systems. Here we describe how an existing Prolog-based system can gradually be retrofitted with concrete object-level syntax using the approach outlined in [5], thus shrinking this distance." links: doi: "https://doi.org/10.1007/978-3-540-25938-1_5" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "concrete object syntax" - "Prolog" - "rule-based" - "meta programming" - "AutoBayes" - "meta-model" - "abstract syntax" - "Stratego/XT" - "transformation language" - "source-to-source" - "transformation system" - "model transformation" - "programming" - "subject-oriented programming" - "Meta-Environment" - "systematic-approach" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/FischerV03" cites: 0 citedby: 0 pages: "56-58" booktitle: "LOPSTR" kind: "inproceedings" key: "FischerV03" - title: "Fusing a Transformation Language with an Open Compiler" author: - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.042" abstract: "Program transformation systems provide powerful analysis and transformation frameworks as well as concise languages for language processing, but instantiating them for every subject language is an arduous task, most often resulting in half-completed frontends. Compilers provide mature frontends with robust parsers and type checkers, but solving language processing problems in general-purpose languages without transformation libraries is tedious. Reusing these frontends with existing transformation systems is therefore attractive. However, for this reuse to be optimal, the functional logic found in the frontend should be exposed to the transformation system – simple data serialization of the abstract syntax tree is not enough, since this fails to expose important compiler functionality, such as import graphs, symbol tables and the type checker. In this paper, we introduce a novel and general technique for combining term-based transformation systems with existing language frontends. The technique is presented in the context of a scriptable analysis and transformation framework for Java built on top of the Eclipse Java compiler. The framework consists of an adapter automatically extracted from the abstract syntax tree of the compiler and an interpreter for the Stratego program transformation language. The adapter allows the Stratego interpreter to rewrite directly on the compiler AST. We illustrate the applicability of our system with scripts written in Stratego that perform framework and library-specific analyses and transformations." links: doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.042" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2007-025.pdf" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "rule-based" - "Java" - "program analysis" - "Eclipse" - "completeness" - "data-flow language" - "graph transformation" - "interpreter" - "abstract syntax" - "Stratego/XT" - "transformation language" - "term rewriting" - "functional programming" - "Eclipse Java Compiler" - "points-to analysis" - "domain analysis" - "analysis" - "type system" - "reuse" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "logic programming" - "transformation system" - "compiler" - "model transformation" - "open compiler" - "subject-oriented programming" - "context-aware" - "logic" - "Spoofax" - "rewriting logic" - "rewriting" - "data-flow analysis" - "parsing" - "feature-oriented programming" - "open-source" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/KallebergV08" cites: 0 citedby: 1 journal: "ENTCS" volume: "203" number: "2" pages: "21-36" kind: "article" key: "KallebergV08" - title: "Specification of Rewriting Strategies" author: - name: "Bas Luttik" link: "http://www.win.tue.nl/~luttik/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "November" abstract: "User-definable strategies for the application of rewrite rules provide a means to construct transformation systems that apply rewrite rules in a controlled way. This paper describes a strategy language and its interpretation. The language is used to control the rewriting of terms using labeled rewrite rules. Rule labels are atomic strategies. Compound strategies are formed by means of sequential composition, nondeterministic choice, left choice, fixed point recursion, and two primitives for expressing term traversal. Several complex strategies such as bottom-up and top-down applica- tion and (parallel) innermost and (parallel) outermost reduction can be defined in terms of these primitives. The paper contains two case studies of the application of strategies. " links: "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/LV97.ps" tags: - "control systems" - "rule-based" - "case study" - "SDF" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "composition" - "traversal combinators" - "graph-rewriting" - "rules" - "transformation system" - "rewriting" - "rewriting strategies" - "ASF+SDF" - "transformation" - "Stratego" researchr: "https://researchr.org/publication/LuttikV97" cites: 0 citedby: 0 booktitle: "ASF+SDF" kind: "inproceedings" key: "LuttikV97" - title: "Stratego/XT 0.16: components for transformation systems" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://doi.acm.org/10.1145/1111542.1111558" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, as well as declarative languages for deriving new components. Complete program transformation systems are composed from these components. In this paper we give an overview of Stratego/XT 0.16. " links: doi: "http://doi.acm.org/10.1145/1111542.1111558" successor: "https://researchr.org/publication/BravenboerKVV08" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV06" cites: 0 citedby: 0 pages: "95-99" booktitle: "PEPM" kind: "inproceedings" key: "BravenboerKVV06" - title: "Retrofitting the AutoBayes Program Synthesis System with Concrete Syntax" author: - name: "Bernd Fischer" link: "http://www.ecs.soton.ac.uk/people/bf" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1007/978-3-540-25935-0_14" abstract: "AUTOBAYES is a fully automatic, schema-based program synthesis system for statistical data analysis applications. Its core component is a schema library, i.e., a collection of generic code templates with associated applicability constraints which are instantiated in a problem-specific way during synthesis. Currently, AUTOBAYE S is implemented in Prolog; the schemas thus use abstract syntax (i.e., Prolog terms) to formulate the templates. However, the conceptual distance between this abstract representation and the concrete syntax of the generated programs makes the schemas hard to create and maintain. In this paper we describe how AUTOBAYE S is retrofitted with concrete syn- tax. We show how it is integrated into Prolog and describe how the seamless interaction of concrete syntax fragments with AUTOBAYE S’s remaining “legacy” meta-programming kernel based on abstract syntax is achieved. We apply the approach to gradually migrate individual schemas without forcing a disruptive migration of the entire system to a different meta-programming language. First experiences show that a smooth migration can be achieved. Moreover, it can re- sult in a considerable reduction of the code size and improved readability of the code. In particular, abstracting out fresh-variable generation and second-order term construction allows the formulation of larger continuous fragments." links: doi: "https://doi.org/10.1007/978-3-540-25935-0_14" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2004-012.html" tags: - "programming languages" - "object-oriented programming" - "concrete object syntax" - "Prolog" - "rule-based" - "program analysis" - "meta programming" - "data-flow language" - "generic programming" - "program synthesis" - "AutoBayes" - "SDF" - "meta-model" - "XML" - "abstract syntax" - "XML Schema" - "Stratego/XT" - "analysis" - "constraints" - "data-flow programming" - "data-flow" - "migration" - "code generation" - "language embedding" - "programming" - "subject-oriented programming" - "Meta-Environment" - "data-flow analysis" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "Stratego" researchr: "https://researchr.org/publication/FischerV04-dagstuhl" cites: 0 citedby: 0 pages: "239-253" booktitle: "Dagstuhl" kind: "inproceedings" key: "FischerV04-dagstuhl" - title: "Generalized Type-Based Disambiguation of Meta Programs with Concrete Object Syntax" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Jurgen J. Vinju" link: "http://homepages.cwi.nl/~jurgenv/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://dx.doi.org/10.1007/11561347_12" abstract: "In meta programming with concrete object syntax, object-level programs are composed from fragments written in concrete syntax. The use of small program fragments in such quotations and the use of meta-level expressions within these fragments (anti-quotation) often leads to ambiguities. This problem is usually solved through explicit disambiguation, resulting in considerable syntactic overhead. A few systems manage to reduce this overhead by using type information during parsing. Since this is hard to achieve with traditional parsing technology, these systems provide specific combinations of meta and object languages, and their implementations are difficult to reuse. In this paper, we generalize these approaches and present a language independent method for introducing concrete object syntax without explicit disambiguation. The method uses scannerless generalized-LR parsing to parse meta programs with embedded object-level fragments, which produces a forest of all possible parses. This forest is reduced to a tree by a disambiguating type checker for the meta language. To validate our method we have developed embeddings of several object languages in Java, including AspectJ and Java itself. " links: doi: "http://dx.doi.org/10.1007/11561347_12" tags: - "programming languages" - "AspectJ" - "object-oriented programming" - "concrete object syntax" - "rule-based" - "Java" - "syntax definition" - "meta programming" - "SDF" - "meta-model" - "disambiguation" - "type system" - "reuse" - "programming" - "subject-oriented programming" - "Meta-Environment" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerVVV05" cites: 0 citedby: 2 pages: "157-172" booktitle: "GPCE" kind: "inproceedings" key: "BravenboerVVV05" - title: "Building Interpreters with Rewriting Strategies" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1016/S1571-0661(04)80427-4" abstract: "Programming language semantics based on pure rewrite rules suffers from the gap between the rewriting strategy implemented in rewriting engines and the intended evaluation strategy. This paper shows how programmable rewriting strategies can be used to implement interpreters for programming languages based on rewrite rules. The advantage of this approach is that reduction rules are first class entities that can be reused in different strategies, even in other kinds of program transfor- mations such as optimizers. The approach is illustrated with several interpreters for the lambda calculus based on implicit and explicit (parallel) substitution, different strategies including normalization, eager evaluation, lazy evaluation, and lazy eval- uation with updates. An extension with pattern matching and choice shows that such interpreters can easily be extended." links: doi: "https://doi.org/10.1016/S1571-0661(04)80427-4" tags: - "laziness" - "programming languages" - "optimization" - "semantics" - "rule-based" - "pattern language" - "dynamic rewrite rules" - "interpreter" - "Stratego/XT" - "dynamic rules" - "parallel programming" - "reuse" - "graph-rewriting" - "rules" - "pattern matching" - "programming" - "program optimization" - "rewriting" - "systematic-approach" - "rewriting strategies" - "interpreters" - "Stratego" researchr: "https://researchr.org/publication/DolstraV02" cites: 0 citedby: 0 journal: "ENTCS" volume: "65" number: "3" pages: "57-76" kind: "article" key: "DolstraV02" - title: "Declarative Access Control for WebDSL: Combining Language Integration and Separation of Concerns" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1109/ICWE.2008.15" abstract: "In this paper, we present the extension of WebDSL, a domain-specific language for web application development, with abstractions for declarative definition of access control. The extension supports the definition of a wide range of access control policies concisely and transparently as a separate concern. In addition to regulating the access to pages and actions, access control rules are used to infer navigation options not accessible to the current user, preventing the presentation of inaccessible links. The extension is an illustration of a general approach to the design of domain-specific languages for different technical domains to support separation of concerns in application development, while preserving linguistic integration. This approach is realized by means of a transformational semantics that weaves separately defined aspects into an integrated implementation. " links: doi: "http://dx.doi.org/10.1109/ICWE.2008.15" "webdsl": "http://webdsl.org" tags: - "WebDSL" - "semantics" - "rule-based" - "separation of concerns" - "transformation language" - " action semantics" - "language design" - "weaving" - "rules" - "web applications" - "DSL" - "abstraction" - "access control policies" - "access control" - "aspect weaving" - "design" - "role-based access control" - "systematic-approach" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/GroenewegenV08" cites: 26 citedby: 7 pages: "175-188" booktitle: "ICWE" kind: "inproceedings" key: "GroenewegenV08" - title: "Program Transformation with Scoped Dynamic Rewrite Rules" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Arthur van Dam" link: "https://researchr.org/profile/arthurvandam/publications" - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" abstract: "The applicability of term rewriting to program transformation is limited by the lack of control over rule application and by the context-free nature of rewrite rules. The first problem is addressed by languages supporting user-definable rewriting strategies. The second problem is addressed by the extension of rewriting strategies with scoped dynamic rewrite rules. Dynamic rules are defined at run-time and can access variables available from their definition context. Rules defined within a rule scope are automatically retracted at the end of that scope. In this paper, we explore the design space of dynamic rules, and their application to transformation problems. The technique is formally defined by extending the operational semantics underlying the program transformation language Stratego, and illustrated by means of several program transformations in Stratego, including constant propagation, bound variable renaming, dead code elimination, function inlining, and function specialization. " links: doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2005-005.html" tags: - "programming languages" - "semantics" - "rule-based" - "formal semantics" - "graph transformation" - "dynamic rewrite rules" - "Stratego/XT" - "transformation language" - "term rewriting" - "language design" - "graph-rewriting" - "rules" - "operational semantics" - "context-aware" - "access control" - "rewriting" - "design" - "role-based access control" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerDOV06" cites: 0 citedby: 4 journal: "FUIN" volume: "69" number: "1-2" pages: "123-178" kind: "article" key: "BravenboerDOV06" - title: "Transformations for Abstractions" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" month: "October" doi: "http://dx.doi.org/10.1109/SCAM.2005.26" abstract: "The transformation language Stratego provides high-level abstractions for implementation of a wide range of transformations. Our aim is to integrate transformation in the software development process and make it available to programmers. This requires the transformations provided by the programming environment to be extensible. This paper presents a case study in the implementation of extensible programming environments using Stratego, by developing a small collection of language extensions and several typical transformations for these languages." links: doi: "http://dx.doi.org/10.1109/SCAM.2005.26" "pdf": "http://www.cs.uu.nl/research/techreps/repo/CS-2005/2005-034.pdf" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2005-034.html" "doi": "http://dx.doi.org/10.1109/SCAM.2005.26" tags: - "programming languages" - "meta programming" - "case study" - "Stratego/XT" - "transformation language" - "extensible languages" - "programming" - "abstraction" - "Meta-Environment" - "extensible language" - "interpreters" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser05-SCAM" cites: 0 citedby: 1 booktitle: "SCAM" kind: "inproceedings" key: "Visser05-SCAM" - title: "Stratego/XT 0.17. A language and toolset for program transformation" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, and tools for generating such components from declarative specifications. Complete program transformation systems are composed from these components." links: doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-011.pdf" "stratego/xt": "http://strategoxt.org" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "DSL" - "programming" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV08" cites: 0 citedby: 7 journal: "SCP" volume: "72" number: "1-2" pages: "52-70" kind: "article" key: "BravenboerKVV08" - title: "Stratego: A Language for Program Transformation Based on Rewriting Strategies" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2001" doi: "https://doi.org/10.1007/3-540-45127-7_27" abstract: "Program transformation is used in many areas of software engineering. Examples include compilation, optimization, synthesis, refactoring, migration, normalization and improvement [15]. Rewrite rules are a natural formalism for expressing single program transformations. However, using a standard strategy for normalizing a program with a set of rewrite rules is not adequate for implementing program transformation systems. It may be necessary to apply a rule only in some phase of a transformation, to apply rules in some order, or to apply a rule only to part of a program. These restrictions may be necessary to avoid non-termination or to choose a specific path in a non-con uent rewrite system. Stratego is a language for the specification of program transformation systems based on the paradigm of rewriting strategies. It supports the separation of strategies from transformation rules, thus allowing careful control over the application of these rules. As a result of this separation, transformation rules are reusable in multiple difierent transformations and generic strategies capturing patterns of control can be described independently of the transformation rules they apply. Such strategies can even be formulated independently of the object language by means of the generic term traversal capabilities of Stratego. In this short paper I give a description of version 0.5 of the Stratego system, discussing the features of the language (Section 2), the library (Section 3), the compiler (Section 4) and some of the applications that have been built (Section 5). Stratego is available as free software under the GNU General Public License from http://www.stratego-language.org. " links: doi: "https://doi.org/10.1007/3-540-45127-7_27" successor: "https://researchr.org/publication/BravenboerKVV06" tags: - "control systems" - "programming languages" - "optimization" - "object-oriented programming" - "rule-based" - "transformation engineering" - "pattern language" - "generic programming" - "graph transformation" - "Stratego/XT" - "traversal" - "refactoring" - "language engineering" - "transformation language" - "software language engineering" - "term rewriting" - "reuse" - "termination" - "graph-rewriting" - "software engineering" - "rules" - "programming paradigms" - "migration" - "transformation system" - "rule-based refactoring" - "compiler" - "subject-oriented programming" - "program optimization" - "higher-order transformations" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/Visser01" cites: 0 citedby: 1 pages: "357-362" booktitle: "RTA" kind: "inproceedings" key: "Visser01" - title: "A core language for rewriting" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Zine-El-Abidine Benaissa" link: "http://web.archive.org/web/20010515202744/www.cse.ogi.edu/~benaissa/" year: "1998" doi: "http://dx.doi.org/10.1016/S1571-0661(05)80027-1" abstract: "System S is a calculus providing the basic abstractions of term rewriting: matching and building terms, term traversal, combining computations and handling failure. The calculus forms a core language for implementation of a wide variety of rewriting languages, or more generally, languages for specifying tree transformations. In this paper we show how a conventional rewriting language based on conditional term rewriting can be implemented straightforwardly in System S. Subsequently we show how this implementation can be extended with features such as matching conditions, negative conditions, default rules, non-strictness annotations and alternative evaluation strategies." links: doi: "http://dx.doi.org/10.1016/S1571-0661(05)80027-1" tags: - "rule-based" - "SDF" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "graph-rewriting" - "rules" - "transformation system" - "abstraction" - "rewriting" - "rewriting strategies" - "ASF+SDF" - "transformation" researchr: "https://researchr.org/publication/VisserB98" cites: 0 citedby: 1 journal: "ENTCS" volume: "15" pages: "422-441" kind: "article" key: "VisserB98" - title: "Deforestation: Transforming Programs to Eliminate Trees" author: - name: "Philip Wadler" link: "http://homepages.inf.ed.ac.uk/wadler/" year: "1990" researchr: "https://researchr.org/publication/Wadler90%3A0" cites: 0 citedby: 0 journal: "TCS" volume: "73" number: "2" pages: "231-248" kind: "article" key: "Wadler90:0" - title: "Mixing source and bytecode: a case for compilation by normalization" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://doi.acm.org/10.1145/1449764.1449772" abstract: "Language extensions increase programmer productivity by providing concise, often domain-specific syntax, and support for static verification of correctness, security, and style constraints. Language extensions can often be realized through translation to the base language, supported by preprocessors and extensible compilers. However, various kinds of extensions require further adaptation of a base compiler's internal stages and components, for example to support separate compilation or to make use of low-level primitives of the platform (e.g., jump instructions or unbalanced synchronization). To allow for a more loosely coupled approach, we propose an open compiler model based on normalization steps from a high-level language to a subset of it, the core language. We developed such a compiler for a mixed Java and (core) bytecode language, and evaluate its effectiveness for composition mechanisms such as traits, as well as statement-level and expression-level language extensions. " links: doi: "http://doi.acm.org/10.1145/1449764.1449772" "technical report (pdf)": "http://www.lclnet.nl/publications/TUD-SERG-2008-030.pdf" "project home page": "http://www.strategoxt.org/Stratego/TheDryadCompiler" tags: - "compilation by normalization" - "rule-based" - "Java" - "synchronization" - "translation" - "meta-model" - "modeling language" - "Stratego/XT" - "language modeling" - "composition" - "constraints" - "source-to-source" - "C++" - "Dryad" - "security" - "compiler" - "Meta-Environment" - "extensible language" - "systematic-approach" - "open-source" - "Stratego" - "JavaFront" - "domain-specific language" researchr: "https://researchr.org/publication/KatsBV08" cites: 44 citedby: 3 pages: "91-108" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsBV08" - title: "Building Program Optimizers with Rewriting Strategies" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Zine-El-Abidine Benaissa" link: "http://web.archive.org/web/20010515202744/www.cse.ogi.edu/~benaissa/" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" year: "1998" doi: "http://doi.acm.org/10.1145/289423.289425" abstract: "We describe a language for defining term rewriting strategies, and its application to the production of program optimizers. Valid transformations on program terms can be described by a set of rewrite rules; rewriting strategies are used to describe when and how the various rules should be applied in order to obtain the desired optimization effects. Separating rules from strategies in this fashion makes it easier to reason about the behavior of the optimizer as a whole, compared to traditional monolithic optimizer implementations. We illustrate the expressiveness of our language by using it to describe a simple optimizer for an ML-like intermediate representation.The basic strategy language uses operators such as sequential composition, choice, and recursion to build transformers from a set of labeled unconditional rewrite rules. We also define an extended language in which the side-conditions and contextual rules that arise in realistic optimizer specifications can themselves be expressed as strategy-driven rewrites. We show that the features of the basic and extended languages can be expressed by breaking down the rewrite rules into their primitive building blocks, namely matching and building terms in variable binding environments. This gives us a low-level core language which has a clear semantics, can be implemented straightforwardly and can itself be optimized. The current implementation generates C code from a strategy specification. " links: doi: "http://doi.acm.org/10.1145/289423.289425" "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/VBT98.ps" tags: - "programming languages" - "optimization" - "semantics" - "rule-based" - "meta programming" - "graph transformation" - "variable binding" - "Stratego/XT" - "transformation language" - "term rewriting" - "composition" - "graph-rewriting" - "rules" - "C++" - "program optimization" - "Meta-Environment" - "higher-order transformations" - "rewriting" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/VisserBT98" cites: 0 citedby: 5 pages: "13-26" booktitle: "ICFP" kind: "inproceedings" key: "VisserBT98" - title: "Meta-programming with Concrete Object Syntax" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1007/3-540-45821-2_19" abstract: "Meta programs manipulate structured representations, i.e., abstract syntax trees, of programs. The conceptual distance between the concrete syntax meta-programmers use to reason about programs and the notation for abstract syntax manipulation provided by general purpose (meta-) programming languages is too great for many applications. In this paper it is shown how the syntax definition formalism SDF can be employed to fit any meta-programming language with concrete syntax notation for composing and analyzing object programs. As a case study, the addition of concrete syntax to the program transformation language Stratego is presented. The approach is then generalized to arbitrary meta-languages. " links: doi: "https://doi.org/10.1007/3-540-45821-2_19" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "concrete object syntax" - "syntax definition" - "meta programming" - "case study" - "SDF" - "meta-model" - "abstract syntax" - "Stratego/XT" - "transformation language" - "source-to-source" - "model transformation" - "programming" - "subject-oriented programming" - "Meta-Environment" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser02" cites: 23 citedby: 6 pages: "299-315" booktitle: "GPCE" kind: "inproceedings" key: "Visser02" - title: "Code Generation by Model Transformation" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1007/978-3-540-69927-9_13" abstract: "The realization of model-driven software development requires effective techniques for implementing code generators. In this paper, we present a case study of code generation by model transformation with Stratego, a high-level transformation language based on the paradigm of rewrite rules with programmable strategies that integrates model-to-model, model-to-code, and code-to-code transformations. The use of concrete object syntax guarantees syntactic correctness of code patterns, and enables the subsequent transformation of generated code. The composability of strategies supports two dimensions of transformation modularity. Vertical modularity is achieved by designing a generator as a pipeline of model-to-model transformations that gradually transforms a high-level input model to an implementation. Horizontal modularity is achieved by supporting the definition of plugins which implement all aspects of a language feature. We discuss the application of these techniques in the implementation of WebDSL, a domain-specific language for dynamic web applications with a rich data model. " links: doi: "http://dx.doi.org/10.1007/978-3-540-69927-9_13" successor: "https://researchr.org/publication/HemelKGV10" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-012.pdf" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "WebDSL" - "concrete object syntax" - "rule-based" - "transformation engineering" - "syntax definition" - "meta programming" - "data-flow language" - "pattern language" - "case study" - "graph transformation" - "meta-model" - "modeling language" - "modeling" - "language engineering" - "transformation language" - "software language engineering" - "language modeling" - "web engineering" - "data-flow programming" - "model-driven development" - "data-flow" - "source-to-source" - "graph-rewriting" - "software engineering" - "rules" - "model-driven engineering" - "C++" - "programming paradigms" - "code generation" - "object-role modeling" - "aspect oriented programming" - "model transformation" - "web applications" - "DSL" - "subject-oriented programming" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "open-source" - "meta-objects" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/HemelKV08" cites: 0 citedby: 3 pages: "183-198" booktitle: "ICMT" kind: "inproceedings" key: "HemelKV08" - title: "Program Transformation with Stratego/XT: Rules, Strategies, Tools, and Systems in Stratego/XT 0.9" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1007/978-3-540-25935-0_13" abstract: "Stratego/XT is a framework for the development of transformation systems aiming to support a wide range of program transformations. The framework consists of the transformation language Stratego and the XT collection of transformation tools. Stratego is based on the paradigm of rewriting under the control of programmable rewriting strategies. The XT tools provide facilities for the infrastructure of transformation systems including parsing and pretty-printing. The framework addresses the entire range of the development process; from the specification of transformations to their composition into transformation systems. This chapter gives an overview of the main ingredients involved in the composition of transformation systems with Stratego/XT, where we distinguish the abstraction levels of rules, strategies, tools, and systems." links: doi: "https://doi.org/10.1007/978-3-540-25935-0_13" successor: "https://researchr.org/publication/BravenboerKVV06" "springer": "http://www.springerlink.com/content/my9we5tj86u2f59n/" tags: - "control systems" - "programming languages" - "rule-based" - "graph transformation" - "Stratego/XT" - "transformation language" - "composition" - "graph-rewriting" - "rules" - "programming paradigms" - "transformation system" - "abstraction" - "rewriting" - "parsing" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser03" cites: 0 citedby: 4 pages: "216-238" booktitle: "Dagstuhl" kind: "inproceedings" key: "Visser03" - title: "XT: a bundle of program transformation tools" author: - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Joost Visser" link: "http://www.di.uminho.pt/~joost.visser/" year: "2001" doi: "http://dx.doi.org/10.1016/S1571-0661(04)80921-6" abstract: "XT bundles existing and newly developed program transformation libraries and tools into an open framework that supports component-based development of program transformations. We discuss the roles of XT's constituents in the development process of program transformation tools, as well as some experiences with building program transformation systems with XT. " links: doi: "http://dx.doi.org/10.1016/S1571-0661(04)80921-6" successor: "https://researchr.org/publication/BravenboerKVV06" tags: - "model-to-model transformation" - "rule-based" - "Stratego/XT" - "model-driven development" - "source-to-source" - "transformation system" - "model transformation" - "programming" - "open-source" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/JongeVV01" cites: 0 citedby: 0 journal: "ENTCS" volume: "44" number: "2" pages: "79-86" kind: "article" key: "JongeVV01" - title: "A survey of strategies in rule-based program transformation systems" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://dx.doi.org/10.1016/j.jsc.2004.12.011" abstract: "Program transformation is the mechanical manipulation of a program in order to improve it relative to some cost function and is understood broadly as the domain of computation where programs are the data. The natural basic building blocks of the domain of program transformation are transformation rules expressing a ?one-step? transformation on a fragment of a program. The ultimate perspective of research in this area is a high-level, language parametric, rule-based program transformation system, which supports a wide range of transformations, admitting efficient implementations that scale to large programs. This situation has not yet been reached, as trade-offs between different goals need to be made. This survey gives an overview of issues in rule-based program transformation systems, focusing on the expressivity of rule-based program transformation systems and in particular on transformation strategies available in various approaches. The survey covers term rewriting, extensions of basic term rewriting, tree parsing strategies, systems with programmable strategies, traversal strategies, and context-sensitive rules." links: doi: "http://dx.doi.org/10.1016/j.jsc.2004.12.011" tags: - "programming languages" - "transformation strategy" - "tree parsing" - "rule-based" - "attribute grammars" - "tree traversal" - "data-flow language" - "pattern language" - "generic programming" - "congruence operators" - "transformation strategies" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "generic traversal strategies" - "tree pattern matching" - "data-flow programming" - "program transformation system" - "data-flow" - "graph-rewriting" - "survey" - "rules" - "pattern matching" - "strategy annotations" - "strategy combinators" - "transformation system" - "program representation" - "programming" - "context-aware" - "rule-based program transformation" - "context-sensitive transformation" - "higher-order transformations" - "rewriting" - "parsing" - "systematic-approach" - "rewriting strategies" - "transformation" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/Visser05" cites: 1 citedby: 1 journal: "JSC" volume: "40" number: "1" pages: "831-873" kind: "article" key: "Visser05" - title: "Combining Aspect-Oriented and Strategic Programming" author: - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://dx.doi.org/10.1016/j.entcs.2005.06.035" abstract: "Properties such as logging, persistence, debugging, tracing, distribution, performance monitoring and exception handling occur in most programming paradigms and are normally very difficult or even impossible to modularize with traditional modularization mechanisms because they are cross-cutting. Recently, aspect-oriented programming has enjoyed recognition as a practical solution for separating these concerns. In this paper we describe an extension to the Stratego term rewriting language for capturing such properties. We show our aspect language offers a concise, practical and adaptable solution for dealing with unanticipated algorithm extension for forward data-flow propagation and dynamic type checking of terms. We briefly discuss some of the challenges faced when designing and implementing an aspect extension for and in a rule-based term rewriting system." links: doi: "http://dx.doi.org/10.1016/j.entcs.2005.06.035" tags: - "programming languages" - "object-oriented programming" - "rule-based" - "transformation aspects" - "data-flow language" - "graph transformation" - "exceptions" - "Stratego/XT" - "transformation language" - "term rewriting" - "type system" - "data-flow programming" - "data-flow" - "graph-rewriting" - "rules" - "programming paradigms" - "type checking" - "strategic programming" - "debugging" - "transformation system" - "Strategic term rewriting" - "aspect oriented programming" - "programming" - "subject-oriented programming" - "rewriting" - "feature-oriented programming" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/KallebergV06" cites: 0 citedby: 0 journal: "ENTCS" volume: "147" number: "1" pages: "5-30" kind: "article" key: "KallebergV06" - title: "Strategies for Source-to-Source Constant Progagation" author: - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1016/S1571-0661(04)80605-4" abstract: "Data-flow optimizations are usually implemented on low-level intermediate repre- sentations. This is not appropriate for source-to-source optimizations, which re- construct a source level program after transformation. In this paper we show how constant propagation, a well known data-flow optimization problem, can be imple- mented on abstract syntax trees in Stratego, a rewriting system extended with programmable rewriting strategies for the control over the application of rules and dynamic rewrite rules for the propagation of information. " links: doi: "https://doi.org/10.1016/S1571-0661(04)80605-4" tags: - "control systems" - "model-to-model transformation" - "optimization" - "rule-based" - "graph transformation" - "dynamic rewrite rules" - "abstract syntax" - "Stratego/XT" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "rules" - "transformation system" - "model transformation" - "program optimization" - "rewriting" - "constant propagation" - "rewriting strategies" - "open-source" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/OlmosV02" cites: 0 citedby: 0 journal: "ENTCS" volume: "70" number: "6" pages: "156-175" kind: "article" key: "OlmosV02" - title: "Designing Syntax Embeddings and Assimilations for Language Libraries" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" abstract: "Language libraries extend regular libraries with domain-specific notation. More precisely, a language library is a combination of a domain-specific language embedded in the general-purpose host language, a regular library implementing the underlying functionality, and an assimilation transformation that maps embedded DSL fragments to host language code. While the basic architecture for realizing language libraries is the same for all applications, there are many design choices to be made in the design of a particular combination of library, guest language syntax, host language, and assimilation. In this paper, we give an overview of the design space for syntax embeddings and assimilations for the realization of language libraries. " links: doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" technicalreport: "https://researchr.org/publication/TUD-SERG-2008-042" tags: - "syntax embedding" - "syntax definition" - "assimilation" - "transformation language" - "architecture" - "language design" - "DSL" - "language libraries" - "design" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV07" cites: 24 citedby: 1 pages: "34-46" booktitle: "MoDELS" kind: "inproceedings" key: "BravenboerV07" - title: "Refactoring: Improving the Design of Existing Code" author: - name: "Martin Fowler" link: "http://martinfowler.com/" year: "2002" doi: "http://link.springer.de/link/service/series/0558/bibs/2418/24180256.htm" links: doi: "http://link.springer.de/link/service/series/0558/bibs/2418/24180256.htm" tags: - "refactoring" - "design" researchr: "https://researchr.org/publication/Fowler02" cites: 0 citedby: 0 pages: "256" booktitle: "xpu" kind: "inproceedings" key: "Fowler02" - title: "Decorated Attribute Grammars: Attribute Evaluation Meets Strategic Programming" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Anthony M. Sloane" link: "http://www.comp.mq.edu.au/~asloane" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2009" doi: "http://dx.doi.org/10.1007/978-3-642-00722-4_11" abstract: "Attribute grammars are a powerful specification formalism for tree-based computation, particularly for software language processing. Various extensions have been proposed to abstract over common patterns in attribute grammar specifications. These include various forms of copy rules to support non-local dependencies, collection attributes, and expressing dependencies that are evaluated to a fixed point. Rather than implementing extensions natively in an attribute evaluator, we propose attribute decorators that describe an abstract evaluation mechanism for attributes, making it possible to provide such extensions as part of a library of decorators. Inspired by strategic programming, decorators are specified using generic traversal operators. To demonstrate their effectiveness, we describe how to employ decorators in name, type, and flow analysis. " links: doi: "http://dx.doi.org/10.1007/978-3-642-00722-4_11" "technical report (pdf)": "http://www.lclnet.nl/publications/TUD-SERG-2008-038a.pdf" "project home page": "http://strategoxt.org/Stratego/Aster" tags: - "programming languages" - "rule-based" - "attribute grammars" - "program analysis" - "etaps" - "data-flow language" - "pattern language" - "generic programming" - "Stratego/XT" - "traversal" - "analysis" - "data-flow programming" - "data-flow" - "graph-rewriting" - "rules" - "C++" - "strategic programming" - "programming" - "rewriting" - "data-flow analysis" - "Aster" - "grammar" - "Stratego" researchr: "https://researchr.org/publication/KatsSV09" cites: 36 citedby: 1 pages: "142-157" booktitle: "CC" kind: "inproceedings" key: "KatsSV09" - title: "MetaBorg in Action: Examples of Domain-Specific Language Embedding and Assimilation Using Stratego/XT" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "René de Groot" link: "http://strategoxt.org/Main/ReneDeGroot" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://dx.doi.org/10.1007/11877028_10" abstract: "General-purpose programming languages provide limited facilities for expressing domain-specific concepts in a natural manner. All domain concepts need to be captured using the same generic syntactic and semantic constructs. Generative programming methods and program transformation techniques can be used to overcome this lack of abstraction in general-purpose languages. In this tutorial we describe the MetaBorg method for embedding domain-specific languages, tailored syntactically and semantically to the application domain at hand, in a general-purpose language. MetaBorg is based on Stratego/XT, a language and toolset for the implementation of program transformation systems, which is used for the definition of syntactic embeddings and assimilation of the embedded constructs into the surrounding code. We illustrate MetaBorg with three examples. JavaSwul is a custom designed language for implementing graphical user-interfaces, which provides high-level abstractions for component composition and event-handling. JavaRegex is a new embedding of regular expression matching and string rewriting. JavaJava is an embedding of Java in Java for generating Java code. For these cases we show how Java programs in these domains become dramatically more readable, and we give an impression of the implementation of the language embeddings. " links: doi: "http://dx.doi.org/10.1007/11877028_10" tags: - "generative programming" - "programming languages" - "rule-based" - "transformation engineering" - "Java" - "generic programming" - "assimilation" - "graph transformation" - "Stratego/XT" - "language engineering" - "domain-specific language embedding" - "transformation language" - "composition" - "MetaBorg" - "language design" - "graph-rewriting" - "transformation system" - "language embedding" - "DSL" - "programming" - "abstraction" - "language composition" - "rewriting" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerGV06" cites: 0 citedby: 3 pages: "297-311" booktitle: "GTTSE" kind: "inproceedings" key: "BravenboerGV06" - title: "Preventing injection attacks with syntax embeddings" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://doi.acm.org/10.1145/1289971.1289975" abstract: "Software written in one language often needs to construct sentences in another language, such as SQL queries, XML output, or shell command invocations. This is almost always done using unhygienic string manipulation, the concatenation of constants and client-supplied strings. A client can then supply specially crafted input that causes the constructed sentence to be interpreted in an unintended way, leading to an injection attack. We describe a more natural style of programming that yields code that is impervious to injections by construction. Our approach embeds the grammars of the guest languages (e.g., SQL) into that of the host language (e.g., Java) and automatically generates code that maps the embedded language to constructs in the host language that reconstruct the embedded sentences, adding escaping functions where appropriate. This approach is generic, meaning that it can be applied with relative ease to any combination of host and guest languages." links: doi: "http://doi.acm.org/10.1145/1289971.1289975" successor: "https://researchr.org/publication/BravenboerDV10" tags: - "programming languages" - "syntax embedding" - "Java" - "preventing injection attacks" - "generic programming" - "injection attack" - "SDF" - "XML" - "embedded software" - "XML Schema" - "SQL" - "security" - "language embedding" - "DSL" - "programming" - "systematic-approach" - "ASF+SDF" - "grammar" - "query language" researchr: "https://researchr.org/publication/BravenboerDV07" cites: 0 citedby: 4 pages: "3-12" booktitle: "GPCE" kind: "inproceedings" key: "BravenboerDV07"