{
  "name": "refactoring",
  "publications": [
    {
      "type": "inproceedings",
      "conference": "tools",
      "conferenceYear": "",
      "booktitle": "TOOLS 2000: 34th International Conference on Technology of Object-Oriented Languages and Systems, 30 July - 3 August 2000, Santa Barbara, CA, USA",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "IEEE Computer Society",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/qizoyan-li",
            "id": "b350bf8e-3d90-4513-9f27-2c41dff9c40f",
            "key": "qizoyan-li",
            "name": "Qizoyan Li"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/donald-firesmith",
            "id": "15139a19-b6b5-447c-b5b8-230f5bac9f1b",
            "key": "donald-firesmith",
            "name": "Donald Firesmith"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/richard-riehle",
            "id": "b093648f-5694-49cf-aa36-a9a46fdf5bd1",
            "key": "richard-riehle",
            "name": "Richard Riehle"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/bertrand-meyer",
            "id": "fefba80a-32e2-4a84-95ef-31c31b9fa96a",
            "key": "bertrand-meyer",
            "name": "Bertrand Meyer"
          },
          "person": {
            "url": "https://researchr.org/profile/bertrandmeyer",
            "id": "09ccc553-661d-448c-b2c0-e38b65f1218b",
            "key": "bertrandmeyer",
            "fullname": "Bertrand Meyer"
          }
        }
      ],
      "firstpage": 437,
      "lastpage": 0,
      "id": "06bcbdcc-014a-499f-9541-9d80c3eee2e5",
      "key": "Fowler00",
      "title": "Refactoring",
      "month": "",
      "year": "2000",
      "doi": "http://doi.ieeecomputersociety.org/10.1109/TOOLS.2000.10059",
      "note": "",
      "abstract": "",
      "url": "https://researchr.org/publication/Fowler00",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-fowler",
            "id": "ae5808d4-376f-4bcb-8076-ef654bf1d959",
            "key": "martin-fowler",
            "name": "Martin Fowler"
          },
          "person": {
            "url": "https://researchr.org/profile/martinfowler",
            "id": "1e352fe1-9192-47ae-824f-30c34d145a33",
            "key": "martinfowler",
            "fullname": "Martin Fowler"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "icse",
      "conferenceYear": "",
      "booktitle": "Proceedings of the 22rd International Conference on Software Engineering, ICSE 2002, 19-25 May 2002, Orlando, Florida, USA",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "ACM",
      "editors": [],
      "firstpage": 701,
      "lastpage": 0,
      "id": "0c9f2373-21e3-4f88-8eff-f2385f0dc4d8",
      "key": "Fowler02:0",
      "title": "Refactoring",
      "month": "",
      "year": "2002",
      "doi": "http://doi.acm.org/10.1145/581339.581453",
      "note": "",
      "abstract": "",
      "url": "https://researchr.org/publication/Fowler02%3A0",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-fowler",
            "id": "ae5808d4-376f-4bcb-8076-ef654bf1d959",
            "key": "martin-fowler",
            "name": "Martin Fowler"
          },
          "person": {
            "url": "https://researchr.org/profile/martinfowler",
            "id": "1e352fe1-9192-47ae-824f-30c34d145a33",
            "key": "martinfowler",
            "fullname": "Martin Fowler"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "cc",
      "conferenceYear": "",
      "booktitle": "Compiler Construction, 14th International Conference, CC 2005, Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2005, Edinburgh, UK, April 4-8, 2005, Proceedings",
      "volume": "3443",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/rastislav-bod%C3%ADk",
            "id": "11352994-4dcb-4067-99c6-a3a3b0c60bbe",
            "key": "rastislav-bodík",
            "name": "Rastislav Bodík"
          }
        }
      ],
      "firstpage": 204,
      "lastpage": 220,
      "id": "1e105541-ccd4-4beb-91ef-7d6031f80c36",
      "key": "OlmosV05",
      "title": "Composing Source-to-Source Data-Flow Transformations with Rewriting Strategies and Dependent Dynamic Rewrite Rules",
      "month": "",
      "year": "2005",
      "doi": "https://doi.org/10.1007/978-3-540-31985-6_14",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/OlmosV05",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/karina-olmos",
            "id": "8e6fdae1-9b09-4e01-8a08-f1ac76e40742",
            "key": "karina-olmos",
            "name": "Karina Olmos"
          },
          "person": {
            "url": "https://researchr.org/profile/karinaolmos",
            "id": "3a540653-1069-400e-93e1-051060c87ab1",
            "key": "karinaolmos",
            "fullname": "Karina Olmos"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "models",
      "conferenceYear": "",
      "booktitle": "Model Driven Engineering Languages and Systems, 11th International Conference, MoDELS 2008, Toulouse, France, September 28 - October 3, 2008. Proceedings",
      "volume": "5301",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/krzysztof-czarnecki",
            "id": "59b12c15-22de-472e-9b7a-453385164e3b",
            "key": "krzysztof-czarnecki",
            "name": "Krzysztof Czarnecki"
          },
          "person": {
            "url": "https://researchr.org/profile/krzysztofczarnecki",
            "id": "f8475ad2-6a3b-4cd6-9986-5a1ede62a0ae",
            "key": "krzysztofczarnecki",
            "fullname": "Krzysztof Czarnecki"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/ileana-ober",
            "id": "97d0ba88-fa64-4d21-9b99-6be14f7df22b",
            "key": "ileana-ober",
            "name": "Ileana Ober"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jean-michel-bruel",
            "id": "085d761f-a34a-4f06-b51f-8a2807e6a5dd",
            "key": "jean-michel-bruel",
            "name": "Jean-Michel Bruel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/axel-uhl",
            "id": "7b20a7a8-8513-48de-8345-c8c66c6c4cd7",
            "key": "axel-uhl",
            "name": "Axel Uhl"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/markus-v%C3%B6lter",
            "id": "ab591369-2e2d-42ef-a605-52de9dba9aab",
            "key": "markus-völter",
            "name": "Markus Völter"
          },
          "person": {
            "url": "https://researchr.org/profile/markusvoelter",
            "id": "d0507709-858d-4c99-9af3-97f51623b905",
            "key": "markusvoelter",
            "fullname": "Markus Völter"
          }
        }
      ],
      "firstpage": 113,
      "lastpage": 127,
      "id": "1f88b13a-f07c-4968-b8f6-ff56b9271487",
      "key": "HemelVV08",
      "title": "WebWorkFlow: An Object-Oriented Workflow Modeling Language for Web Applications",
      "month": "",
      "year": "2008",
      "doi": "http://dx.doi.org/10.1007/978-3-540-87875-9_8",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/HemelVV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/zef-hemel",
            "id": "7816809a-e2e6-42c6-8c44-481a821fb0bd",
            "key": "zef-hemel",
            "name": "Zef Hemel"
          },
          "person": {
            "url": "https://researchr.org/profile/zefhemel",
            "id": "947901fa-e910-454b-8546-c514c5a191be",
            "key": "zefhemel",
            "fullname": "Zef  Hemel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/ruben-verhaaf",
            "id": "b9250f8d-3dc2-464c-a154-f540d5c5f0b1",
            "key": "ruben-verhaaf",
            "name": "Ruben Verhaaf"
          },
          "person": {
            "url": "https://researchr.org/profile/rubenverhaaf",
            "id": "870e57e4-0504-4d53-bce2-79c0715d4085",
            "key": "rubenverhaaf",
            "fullname": "Ruben  Verhaaf"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "id": "233e7b10-19b0-4e55-8185-7d6c51a75076",
      "key": "Opdyke1992",
      "title": "Refactoring Object-Oriented Frameworks",
      "month": "",
      "year": "1992",
      "doi": "",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/Opdyke1992",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/william-f.-opdyke",
            "id": "b4d187b8-dd05-44ac-b0c5-018a7f11cd5b",
            "key": "william-f.-opdyke",
            "name": "William F. Opdyke"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Ann. Math. Artif. Intell.",
      "volumenumber": "29",
      "issuenumber": "1-4",
      "firstpage": 1,
      "lastpage": 34,
      "id": "24b38e95-3c2e-4d4c-970e-bd2db48b3d7d",
      "key": "JohannV00",
      "title": "Warm fusion in Stratego: A case study in generation of program transformation systems",
      "month": "",
      "year": "2000",
      "doi": "http://dx.doi.org/10.1023/A:1018956702672",
      "note": "",
      "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.\r\nIn 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.\r\n",
      "url": "https://researchr.org/publication/JohannV00",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/patricia-johann",
            "id": "d1ef5f4c-fa61-45ca-9b1a-559c2f751f04",
            "key": "patricia-johann",
            "name": "Patricia Johann"
          },
          "person": {
            "url": "https://researchr.org/profile/patriciajohann",
            "id": "33bf14c1-e6a4-41d9-8f87-f2b97a07b9fd",
            "key": "patriciajohann",
            "fullname": "Patricia Johann"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "57",
      "issuenumber": "",
      "firstpage": 109,
      "lastpage": 143,
      "id": "2960d3a8-d4be-4e59-9428-4d9b25b00242",
      "key": "Visser01-WRS",
      "title": "A Survey of Strategies in Program Transformation Systems",
      "month": "",
      "year": "2001",
      "doi": "https://doi.org/10.1016/S1571-0661(04)00270-1",
      "note": "",
      "abstract": "Program transformation is used in a wide range of applications including compiler \r\nconstruction, optimization, program synthesis, refactoring, software renovation, and \r\nreverse engineering. Complex program transformations are achieved through a num- \r\nber of consecutive modiﬁcations of a program. Transformation rules deﬁne basic \r\nmodiﬁcations. A transformation strategy is an algorithm for choosing a path in \r\nthe rewrite relation induced by a set of rules. This paper surveys the support for \r\nthe deﬁnition of strategies in program transformation systems. After a discussion \r\nof kinds of program transformation and choices in program representation, the \r\nbasic elements of a strategy system are discussed and the choices in the design of a \r\nstrategy language are considered. Several styles of strategy systems as provided in \r\nexisting languages are then analyzed.",
      "url": "https://researchr.org/publication/Visser01-WRS",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "gttse",
      "conferenceYear": "",
      "booktitle": "Generative and Transformational Techniques in Software Engineering II, International Summer School, GTTSE 2007",
      "volume": "5235",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "Braga, Portugal",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/ralf-l%C3%A4mmel",
            "id": "1cd5b8f9-4e0d-4121-a444-1a1c3466e59c",
            "key": "ralf-lämmel",
            "name": "Ralf Lämmel"
          },
          "person": {
            "url": "https://researchr.org/profile/ralflaemmel",
            "id": "1605f420-86fe-4521-9126-c8999c59b3ed",
            "key": "ralflaemmel",
            "fullname": "Ralf Lämmel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/joost-visser",
            "id": "a2685a71-4f48-405f-8d9b-0c4757bcef35",
            "key": "joost-visser",
            "name": "Joost Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/joostvisser",
            "id": "96380068-84b9-436b-ab9b-40d90a566d94",
            "key": "joostvisser",
            "fullname": "Joost Visser"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jo%C3%A3o-saraiva",
            "id": "55af31cd-7a9b-4070-894f-8497836f6610",
            "key": "joão-saraiva",
            "name": "João Saraiva"
          },
          "person": {
            "url": "https://researchr.org/profile/joosaraiva",
            "id": "5c5d9adc-5293-437a-80e2-bf1044dc8837",
            "key": "joosaraiva",
            "fullname": "João Saraiva"
          }
        }
      ],
      "firstpage": 291,
      "lastpage": 373,
      "id": "29f153a5-8b61-4bf9-96f8-33d1b849c1c3",
      "key": "Visser07",
      "title": "WebDSL: A Case Study in Domain-Specific Language Engineering",
      "month": "",
      "year": "2007",
      "doi": "http://dx.doi.org/10.1007/978-3-540-88643-3_7",
      "note": "",
      "abstract": " The goal of domain-speciﬁc languages (DSLs) is to increase \r\nthe productivity of software engineers by abstracting from low-level boil- \r\nerplate code. Introduction of DSLs in the software development process \r\nrequires a smooth workﬂow for the production of DSLs themselves. This \r\nrequires technology for designing and implementing DSLs, but also a \r\nmethodology for using that technology. That is, a collection of guidelines, \r\ndesign patterns, and reusable DSL components that show developers how \r\nto tackle common language design and implementation issues. This paper \r\npresents a case study in domain-speciﬁc language engineering. It reports \r\non a pro ject in which the author designed and built WebDSL, a DSL \r\nfor web applications with a rich data model, using several DSLs for DSL \r\nengineering: SDF for syntax deﬁnition and Stratego/XT for code gener- \r\nation. The paper follows the stages in the development of the DSL. The \r\ncontributions of the paper are three-fold. (1) A tutorial in the application \r\nof the speciﬁc SDF and Stratego/XT technology for building DSLs. (2) A \r\ndescription of an incremental DSL development process. (3) A domain- \r\nspeciﬁc language for web-applications with rich data models. The paper \r\nconcludes with a survey of related approaches. \r\n",
      "url": "https://researchr.org/publication/Visser07",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "59",
      "issuenumber": "4",
      "firstpage": 375,
      "lastpage": 396,
      "id": "2ac5d88e-e63c-454a-a3a9-ba818d9c440c",
      "key": "Visser01-DR",
      "title": "Scoped Dynamic Rewrite Rules",
      "month": "",
      "year": "2001",
      "doi": "https://doi.org/10.1016/S1571-0661(04)00298-1",
      "note": "",
      "abstract": "The applicability of term rewriting to program transformation is limited by the lack \r\nof control over rule application and by the context-free nature of rewrite rules. The \r\nﬁrst problem is addressed by languages supporting user-deﬁnable rewriting strate- \r\ngies. This paper addresses the second problem by extending rewriting strategies \r\nwith scoped dynamic rewrite rules. Dynamic rules are generated at run-time and \r\ncan access variables available from their deﬁnition context. Rules generated within \r\na rule scope are automatically retracted at the end of that scope. The technique is \r\nillustrated by means of several program tranformations: bound variable renaming, \r\nfunction inlining, and dead function elimination. ",
      "url": "https://researchr.org/publication/Visser01-DR",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "scam",
      "conferenceYear": "",
      "booktitle": "3rd IEEE International Workshop on Source Code Analysis and Manipulation (SCAM 2003), 26-27 September 2003, Amsterdam, The Netherlands",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "IEEE Computer Society",
      "editors": [],
      "firstpage": 141,
      "lastpage": 150,
      "id": "34bdf2c8-357c-4079-a9c6-91569d436f99",
      "key": "OlmosV03",
      "title": "Turning Dynamic Typing into Static Typing by Program Specialization in a Compiler Front-end for Octave",
      "month": "",
      "year": "2003",
      "doi": "https://doi.org/10.1109/SCAM.2003.1238040",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/OlmosV03",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/karina-olmos",
            "id": "8e6fdae1-9b09-4e01-8a08-f1ac76e40742",
            "key": "karina-olmos",
            "name": "Karina Olmos"
          },
          "person": {
            "url": "https://researchr.org/profile/karinaolmos",
            "id": "3a540653-1069-400e-93e1-051060c87ab1",
            "key": "karinaolmos",
            "fullname": "Karina Olmos"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "lopstr",
      "conferenceYear": "",
      "booktitle": "Logic Based Program Synthesis and Transformation, 13th International Symposium LOPSTR 2003, Uppsala, Sweden, August 25-27, 2003, Revised Selected Papers",
      "volume": "3018",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/maurice-bruynooghe",
            "id": "5120437c-c943-4a77-a07d-a96dd5642a76",
            "key": "maurice-bruynooghe",
            "name": "Maurice Bruynooghe"
          }
        }
      ],
      "firstpage": 56,
      "lastpage": 58,
      "id": "44166c37-164c-40e8-9589-1f10fb04612c",
      "key": "FischerV03",
      "title": "Adding Concrete Syntax to a Prolog-Based Program Synthesis System (Extended Abstract)",
      "month": "",
      "year": "2003",
      "doi": "https://doi.org/10.1007/978-3-540-25938-1_5",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/FischerV03",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/bernd-fischer",
            "id": "231729d8-d690-4294-8a00-8c6bb24204d8",
            "key": "bernd-fischer",
            "name": "Bernd Fischer"
          },
          "person": {
            "url": "https://researchr.org/profile/berndfischer",
            "id": "10b8c928-1c71-4ef2-983c-d919e30bd25c",
            "key": "berndfischer",
            "fullname": "Bernd  Fischer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "203",
      "issuenumber": "2",
      "firstpage": 21,
      "lastpage": 36,
      "id": "55fff84a-9403-44c6-9c22-a8f5cdbff9f8",
      "key": "KallebergV08",
      "title": "Fusing a Transformation Language with an Open Compiler",
      "month": "",
      "year": "2008",
      "doi": "http://dx.doi.org/10.1016/j.entcs.2008.03.042",
      "note": "",
      "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.\r\n\r\nIn 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.",
      "url": "https://researchr.org/publication/KallebergV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/karl-trygve-kalleberg",
            "id": "3ee71cd9-6b84-45a5-ab19-8f8783c8dba3",
            "key": "karl-trygve-kalleberg",
            "name": "Karl Trygve Kalleberg"
          },
          "person": {
            "url": "https://researchr.org/profile/karltk",
            "id": "d774aeed-7606-4770-8a56-2cf4990644b4",
            "key": "karltk",
            "fullname": "Karl Trygve Kalleberg"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "SLE",
      "conferenceYear": "2009",
      "booktitle": "Software Language Engineering, Second International Conference, SLE 2009, Denver, CO, USA, October 5-6, 2009, Revised Selected Papers",
      "volume": "",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/mark-van-den-brand",
            "id": "ec0da5fa-6834-4952-9fff-9c4fecce7cb7",
            "key": "mark-van-den-brand",
            "name": "Mark van den Brand"
          },
          "person": {
            "url": "https://researchr.org/profile/markgjvandenbrand",
            "id": "97855301-a569-413e-8e19-c2c376c50842",
            "key": "markgjvandenbrand",
            "fullname": "Mark G. J. van den Brand"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/dragan-gasevic",
            "id": "4e952583-7834-4817-8b6e-04feaa97fad9",
            "key": "dragan-gasevic",
            "name": "Dragan Gasevic"
          },
          "person": {
            "url": "https://researchr.org/profile/dragangasevic",
            "id": "892937c7-d9f9-49a8-89e6-734b1fb47253",
            "key": "dragangasevic",
            "fullname": "Dragan Gasevic"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jeff-gray",
            "id": "fefac3e9-8142-40df-9285-12943249e210",
            "key": "jeff-gray",
            "name": "Jeff Gray"
          },
          "person": {
            "url": "https://researchr.org/profile/jeffgray",
            "id": "474ab36e-49c3-4f85-aa00-417d49005952",
            "key": "jeffgray",
            "fullname": "Jeffrey G. Gray"
          }
        }
      ],
      "firstpage": 0,
      "lastpage": 0,
      "id": "5db285e2-5af3-4731-b0d1-3bd585251ed1",
      "key": "HemelVisser:2009",
      "title": "PIL: A Platform Independent Language for Retargetable DSLs",
      "month": "",
      "year": "2010",
      "doi": "",
      "note": "",
      "abstract": "Intermediate languages are used in compiler construction to simplify\r\nretargeting compilers to multiple machine architectures. In the\r\nimplementation of \\emph{domain-specific languages} (DSLs), compilers\r\ntypically generate high-level source code, rather than low-level\r\nmachine instructions.  DSL compilers target a software platform, i.e.\r\na programming language with a set of libraries, deployable on one or\r\nmore operating systems.  DSLs enable targeting \\emph{multiple}\r\nsoftware platforms if its abstractions are platform independent. While\r\ntransformations from DSL to each targeted platform are often\r\nconceptually very similar, there is little reuse between\r\ntransformations due to syntactic and API differences of the target\r\nplatforms, making supporting multiple platforms expensive. In this\r\npaper, we discuss the design and implementation of PIL, a Platform\r\nIndependent Language, an intermediate language providing a layer of\r\nabstraction between DSL and target platform code, abstracting from\r\nsyntactic and API differences between platforms, thereby removing the\r\nneed for platform-specific transformations. We discuss the use of PIL\r\nin an implemementation of WebDSL, a DSL for building web applications.\r\n",
      "url": "https://researchr.org/publication/HemelVisser%3A2009",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/zef-hemel",
            "id": "7816809a-e2e6-42c6-8c44-481a821fb0bd",
            "key": "zef-hemel",
            "name": "Zef Hemel"
          },
          "person": {
            "url": "https://researchr.org/profile/zefhemel",
            "id": "947901fa-e910-454b-8546-c514c5a191be",
            "key": "zefhemel",
            "fullname": "Zef  Hemel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "ASF+SDF",
      "conferenceYear": "",
      "booktitle": "2nd International Workshop on the Theory and Practice of Algebraic Specifications (ASF+SDF 1997)",
      "volume": "",
      "number": "",
      "series": "Electronic Workshops in Computing",
      "address": "Berlin",
      "organization": "",
      "publisher": "Springer-Verlag",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/m.-p.-a.-sellink",
            "id": "8c4e1fb3-f8c6-4d2c-ba6d-3d5c715e1ba9",
            "key": "m.-p.-a.-sellink",
            "name": "M. P. A. Sellink"
          }
        }
      ],
      "firstpage": 0,
      "lastpage": 0,
      "id": "70289778-dec1-4366-b4e7-a6981a245acb",
      "key": "LuttikV97",
      "title": "Specification of Rewriting Strategies",
      "month": "November",
      "year": "1997",
      "doi": "",
      "note": "",
      "abstract": "User-deﬁnable strategies for the application of rewrite rules provide a means to construct transformation systems that \r\napply rewrite rules in a controlled way. This paper describes a strategy language and its interpretation. The language \r\nis used to control the rewriting of terms using labeled rewrite rules. Rule labels are atomic strategies. Compound \r\nstrategies are formed by means of sequential composition, nondeterministic choice, left choice, ﬁxed point recursion, \r\nand two primitives for expressing term traversal. Several complex strategies such as bottom-up and top-down applica- \r\ntion and (parallel) innermost and (parallel) outermost reduction can be deﬁned in terms of these primitives. The paper \r\ncontains two case studies of the application of strategies. ",
      "url": "https://researchr.org/publication/LuttikV97",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/luttik%2C-bas",
            "id": "5844e345-452e-4a03-b49c-8cc7b1cfde30",
            "key": "luttik,-bas",
            "name": "Luttik, Bas"
          },
          "person": {
            "url": "https://researchr.org/profile/basluttik",
            "id": "e1825185-91ff-4c75-ac6e-404158585c50",
            "key": "basluttik",
            "fullname": "Bas Luttik"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/visser%2C-eelco",
            "id": "673bfe6f-924b-4751-8fa1-313bb14048be",
            "key": "visser,-eelco",
            "name": "Visser, Eelco"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "pepm",
      "conferenceYear": "",
      "booktitle": "Proceedings of the 2006 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-based Program Manipulation, 2006, Charleston, South Carolina, USA, January 9-10, 2006",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "ACM",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/john-hatcliff",
            "id": "564ab8ab-0d50-4545-b6b7-d65173111d6a",
            "key": "john-hatcliff",
            "name": "John Hatcliff"
          },
          "person": {
            "url": "https://researchr.org/profile/johnhatcliff",
            "id": "3cb35378-1e69-4d04-9436-5cadbc942fe7",
            "key": "johnhatcliff",
            "fullname": "John Hatcliff"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/frank-tip",
            "id": "3d168b83-5f24-466b-b008-953a9485bf85",
            "key": "frank-tip",
            "name": "Frank Tip"
          },
          "person": {
            "url": "https://researchr.org/profile/franktip",
            "id": "95652b5a-2761-4383-ad93-d1f6d62bd6c5",
            "key": "franktip",
            "fullname": "Frank Tip"
          }
        }
      ],
      "firstpage": 95,
      "lastpage": 99,
      "id": "7080db9f-97c4-458a-bbfb-d4073dc841f1",
      "key": "BravenboerKVV06",
      "title": "Stratego/XT 0.16: components for transformation systems",
      "month": "",
      "year": "2006",
      "doi": "http://doi.acm.org/10.1145/1111542.1111558",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/BravenboerKVV06",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/karl-trygve-kalleberg",
            "id": "3ee71cd9-6b84-45a5-ab19-8f8783c8dba3",
            "key": "karl-trygve-kalleberg",
            "name": "Karl Trygve Kalleberg"
          },
          "person": {
            "url": "https://researchr.org/profile/karltk",
            "id": "d774aeed-7606-4770-8a56-2cf4990644b4",
            "key": "karltk",
            "fullname": "Karl Trygve Kalleberg"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/rob-vermaas",
            "id": "6a38d57e-6acc-4105-be50-25e9b31b00fa",
            "key": "rob-vermaas",
            "name": "Rob Vermaas"
          },
          "person": {
            "url": "https://researchr.org/profile/robvermaas",
            "id": "f6aa2423-57ab-44c6-909c-dd1d19dfbe85",
            "key": "robvermaas",
            "fullname": "Rob Vermaas"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "dagstuhl",
      "conferenceYear": "",
      "booktitle": "Domain-Specific Program Generation, International Seminar, Dagstuhl Castle, Germany, March 23-28, 2003, Revised Papers",
      "volume": "3016",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/christian-lengauer",
            "id": "418346b7-d9f6-48b5-8f4d-55a344ab78fe",
            "key": "christian-lengauer",
            "name": "Christian Lengauer"
          },
          "person": {
            "url": "https://researchr.org/profile/christianlengauer",
            "id": "ef3493a4-c823-43d6-b7d4-2a302d206e7e",
            "key": "christianlengauer",
            "fullname": "Christian Lengauer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/don-s.-batory",
            "id": "57485cad-e284-4e71-b180-2b0878b3c28f",
            "key": "don-s.-batory",
            "name": "Don S. Batory"
          },
          "person": {
            "url": "https://researchr.org/profile/donsbatory",
            "id": "38f8a44a-60f3-472f-870d-68ed0ae161e8",
            "key": "donsbatory",
            "fullname": "Don S. Batory"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/charles-consel",
            "id": "a1653a2a-1cf9-4ff3-8dfa-cb71f898a0c3",
            "key": "charles-consel",
            "name": "Charles Consel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-odersky",
            "id": "4a0a243e-c2c5-4bb8-b69e-6c245cd64e3b",
            "key": "martin-odersky",
            "name": "Martin Odersky"
          },
          "person": {
            "url": "https://researchr.org/profile/martinodersky",
            "id": "f85bed9a-ff64-4608-b607-1d8cb84a1d4a",
            "key": "martinodersky",
            "fullname": "Martin Odersky"
          }
        }
      ],
      "firstpage": 239,
      "lastpage": 253,
      "id": "727d24fc-16dc-4a77-9742-206441595283",
      "key": "FischerV04-dagstuhl",
      "title": "Retrofitting the AutoBayes Program Synthesis System with Concrete Syntax",
      "month": "",
      "year": "2003",
      "doi": "https://doi.org/10.1007/978-3-540-25935-0_14",
      "note": "",
      "abstract": "AUTOBAYES is a fully automatic, schema-based program synthesis \r\nsystem for statistical data analysis applications. Its core component is a schema \r\nlibrary, i.e., a collection of generic code templates with associated applicability \r\nconstraints which are instantiated in a problem-speciﬁc way during synthesis. \r\nCurrently, AUTOBAYE S is implemented in Prolog; the schemas thus use abstract \r\nsyntax (i.e., Prolog terms) to formulate the templates. However, the conceptual \r\ndistance between this abstract representation and the concrete syntax of the generated programs makes the schemas hard to create and maintain. \r\n\r\nIn this paper we describe how AUTOBAYE S is retroﬁtted with concrete syn- \r\ntax. We show how it is integrated into Prolog and describe how the seamless \r\ninteraction of concrete syntax fragments with AUTOBAYE S’s remaining “legacy” \r\nmeta-programming kernel based on abstract syntax is achieved. We apply the \r\napproach to gradually migrate individual schemas without forcing a disruptive \r\nmigration of the entire system to a different meta-programming language. First \r\nexperiences show that a smooth migration can be achieved. Moreover, it can re- \r\nsult in a considerable reduction of the code size and improved readability of the \r\ncode. In particular, abstracting out fresh-variable generation and second-order \r\nterm construction allows the formulation of larger continuous fragments.",
      "url": "https://researchr.org/publication/FischerV04-dagstuhl",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/bernd-fischer",
            "id": "231729d8-d690-4294-8a00-8c6bb24204d8",
            "key": "bernd-fischer",
            "name": "Bernd Fischer"
          },
          "person": {
            "url": "https://researchr.org/profile/berndfischer",
            "id": "10b8c928-1c71-4ef2-983c-d919e30bd25c",
            "key": "berndfischer",
            "fullname": "Bernd  Fischer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "gpce",
      "conferenceYear": "",
      "booktitle": "Generative Programming and Component Engineering, 4th International Conference, GPCE 2005",
      "volume": "3676",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "Tallinn, Estonia",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/robert-gl%C3%BCck",
            "id": "cd7b018f-3287-4d39-bca4-3fbc5034dde1",
            "key": "robert-glück",
            "name": "Robert Glück"
          },
          "person": {
            "url": "https://researchr.org/profile/robertglueck",
            "id": "0f5284d5-d83b-4419-839c-d1fdd6bd4560",
            "key": "robertglueck",
            "fullname": "Robert Glück"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/michael-r.-lowry",
            "id": "eec94bfa-acc5-4ede-ba38-0ed281dfbe01",
            "key": "michael-r.-lowry",
            "name": "Michael R. Lowry"
          }
        }
      ],
      "firstpage": 157,
      "lastpage": 172,
      "id": "790af31c-26f3-4a03-a6a0-96947b5714d0",
      "key": "BravenboerVVV05",
      "title": "Generalized Type-Based Disambiguation of Meta Programs with Concrete Object Syntax",
      "month": "",
      "year": "2005",
      "doi": "http://dx.doi.org/10.1007/11561347_12",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/BravenboerVVV05",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/rob-vermaas",
            "id": "6a38d57e-6acc-4105-be50-25e9b31b00fa",
            "key": "rob-vermaas",
            "name": "Rob Vermaas"
          },
          "person": {
            "url": "https://researchr.org/profile/robvermaas",
            "id": "f6aa2423-57ab-44c6-909c-dd1d19dfbe85",
            "key": "robvermaas",
            "fullname": "Rob Vermaas"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jurgen-j.-vinju",
            "id": "61686a94-9539-4a0b-99de-42c7c3d2acae",
            "key": "jurgen-j.-vinju",
            "name": "Jurgen J. Vinju"
          },
          "person": {
            "url": "https://researchr.org/profile/jurgenjvinju",
            "id": "8ed1149d-5533-4120-8079-88085c44c8ef",
            "key": "jurgenjvinju",
            "fullname": "Jurgen J.  Vinju"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "65",
      "issuenumber": "3",
      "firstpage": 57,
      "lastpage": 76,
      "id": "7f592469-182e-43c4-83a9-a6fcfa72fb23",
      "key": "DolstraV02",
      "title": "Building Interpreters with Rewriting Strategies",
      "month": "",
      "year": "2002",
      "doi": "https://doi.org/10.1016/S1571-0661(04)80427-4",
      "note": "",
      "abstract": "Programming language semantics based on pure rewrite rules suﬀers from the gap \r\nbetween the rewriting strategy implemented in rewriting engines and the intended \r\nevaluation strategy. This paper shows how programmable rewriting strategies can \r\nbe used to implement interpreters for programming languages based on rewrite \r\nrules. The advantage of this approach is that reduction rules are ﬁrst class entities \r\nthat can be reused in diﬀerent strategies, even in other kinds of program transfor- \r\nmations such as optimizers. The approach is illustrated with several interpreters for \r\nthe lambda calculus based on implicit and explicit (parallel) substitution, diﬀerent \r\nstrategies including normalization, eager evaluation, lazy evaluation, and lazy eval- \r\nuation with updates. An extension with pattern matching and choice shows that \r\nsuch interpreters can easily be extended.",
      "url": "https://researchr.org/publication/DolstraV02",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-dolstra",
            "id": "c73bbd9f-3809-4463-9a56-d449cf26dff3",
            "key": "eelco-dolstra",
            "name": "Eelco Dolstra"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcodolstra",
            "id": "c0bae0b4-2a49-491c-b0be-e681f6cde43e",
            "key": "eelcodolstra",
            "fullname": "Eelco  Dolstra"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "icwe",
      "conferenceYear": "",
      "booktitle": "Proceedings of the Eighth International Conference on Web Engineering, ICWE 2008, 14-18 July 2008, Yorktown Heights, New York, USA",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "IEEE",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/daniel-schwabe",
            "id": "2d04b4d6-1f36-42d7-9ed5-cf3eb57476ab",
            "key": "daniel-schwabe",
            "name": "Daniel Schwabe"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/francisco-curbera",
            "id": "0de9c4c8-6721-462d-bd06-379db775070f",
            "key": "francisco-curbera",
            "name": "Francisco Curbera"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/paul-dantzig",
            "id": "e6f58540-1442-46a5-bcd0-1142327d1f5f",
            "key": "paul-dantzig",
            "name": "Paul Dantzig"
          }
        }
      ],
      "firstpage": 175,
      "lastpage": 188,
      "id": "8e9937b6-ec04-40f1-ae0b-0658da576d24",
      "key": "GroenewegenV08",
      "title": "Declarative Access Control for WebDSL: Combining Language Integration and Separation of Concerns",
      "month": "",
      "year": "2008",
      "doi": "http://dx.doi.org/10.1109/ICWE.2008.15",
      "note": "",
      "abstract": "In this paper, we present the extension of WebDSL, a domain-specific\r\nlanguage for web application development, with abstractions for\r\ndeclarative definition of access control.  The extension supports the\r\ndefinition of a wide range of access control policies concisely and\r\ntransparently as a separate concern.  In addition to regulating the\r\naccess to pages and actions, access control rules are used to infer\r\nnavigation options not accessible to the current user, preventing the\r\npresentation of inaccessible links.  The extension is an illustration\r\nof a general approach to the design of domain-specific languages for\r\ndifferent technical domains to support separation of concerns in\r\napplication development, while preserving linguistic integration. This\r\napproach is realized by means of a transformational semantics that\r\nweaves separately defined aspects into an integrated implementation.\r\n",
      "url": "https://researchr.org/publication/GroenewegenV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/danny-m.-groenewegen",
            "id": "46cf4818-8ce7-4644-9ee1-414e4c4960e7",
            "key": "danny-m.-groenewegen",
            "name": "Danny M. Groenewegen"
          },
          "person": {
            "url": "https://researchr.org/profile/dannymgroenewegen",
            "id": "f50a3666-08fe-4b30-9734-181aed455bb1",
            "key": "dannymgroenewegen",
            "fullname": "Danny M.  Groenewegen"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Fundam. Inform.",
      "volumenumber": "69",
      "issuenumber": "1-2",
      "firstpage": 123,
      "lastpage": 178,
      "id": "90951569-3d14-4aec-b74b-30451d86f939",
      "key": "BravenboerDOV06",
      "title": "Program Transformation with Scoped Dynamic Rewrite Rules",
      "month": "",
      "year": "2006",
      "doi": "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/BravenboerDOV06",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/arthur-van-dam",
            "id": "b50e21c9-3399-4469-8743-faeb6995f6a9",
            "key": "arthur-van-dam",
            "name": "Arthur van Dam"
          },
          "person": {
            "url": "https://researchr.org/profile/arthurvandam",
            "id": "7e90e182-d469-41cf-860f-282829bca0fc",
            "key": "arthurvandam",
            "fullname": "Arthur van Dam"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/karina-olmos",
            "id": "8e6fdae1-9b09-4e01-8a08-f1ac76e40742",
            "key": "karina-olmos",
            "name": "Karina Olmos"
          },
          "person": {
            "url": "https://researchr.org/profile/karinaolmos",
            "id": "3a540653-1069-400e-93e1-051060c87ab1",
            "key": "karinaolmos",
            "fullname": "Karina Olmos"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "SCAM",
      "conferenceYear": "",
      "booktitle": "5th IEEE International Workshop on Source Code Analysis and Manipulation (SCAM 2005), 30 September - 1 October 2005, Budapest, Hungary",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "IEEE Computer Society",
      "editors": [],
      "firstpage": 0,
      "lastpage": 0,
      "id": "9beeda2c-2448-4895-88e5-1274f39b3fe3",
      "key": "Visser05-SCAM",
      "title": "Transformations for Abstractions",
      "month": "October",
      "year": "2005",
      "doi": "http://dx.doi.org/10.1109/SCAM.2005.26",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/Visser05-SCAM",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Sci. Comput. Program.",
      "volumenumber": "72",
      "issuenumber": "1-2",
      "firstpage": 52,
      "lastpage": 70,
      "id": "a6da54f9-956a-4574-854c-6f0f3aee1618",
      "key": "BravenboerKVV08",
      "title": "Stratego/XT 0.17. A language and toolset for program transformation",
      "month": "",
      "year": "2008",
      "doi": "http://dx.doi.org/10.1016/j.scico.2007.11.003",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/BravenboerKVV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/karl-trygve-kalleberg",
            "id": "3ee71cd9-6b84-45a5-ab19-8f8783c8dba3",
            "key": "karl-trygve-kalleberg",
            "name": "Karl Trygve Kalleberg"
          },
          "person": {
            "url": "https://researchr.org/profile/karltk",
            "id": "d774aeed-7606-4770-8a56-2cf4990644b4",
            "key": "karltk",
            "fullname": "Karl Trygve Kalleberg"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/rob-vermaas",
            "id": "6a38d57e-6acc-4105-be50-25e9b31b00fa",
            "key": "rob-vermaas",
            "name": "Rob Vermaas"
          },
          "person": {
            "url": "https://researchr.org/profile/robvermaas",
            "id": "f6aa2423-57ab-44c6-909c-dd1d19dfbe85",
            "key": "robvermaas",
            "fullname": "Rob Vermaas"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "rta",
      "conferenceYear": "",
      "booktitle": "Rewriting Techniques and Applications, 12th International Conference, RTA 2001, Utrecht, The Netherlands, May 22-24, 2001, Proceedings",
      "volume": "2051",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/aart-middeldorp",
            "id": "3520681b-1d93-464f-805b-477331cd2c40",
            "key": "aart-middeldorp",
            "name": "Aart Middeldorp"
          }
        }
      ],
      "firstpage": 357,
      "lastpage": 362,
      "id": "acca3b32-8460-4008-afc2-31179fb2baae",
      "key": "Visser01",
      "title": "Stratego: A Language for Program Transformation Based on Rewriting Strategies",
      "month": "",
      "year": "2001",
      "doi": "https://doi.org/10.1007/3-540-45127-7_27",
      "note": "",
      "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.\r\nStratego 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.\r\nIn 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.\r\n",
      "url": "https://researchr.org/publication/Visser01",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "15",
      "issuenumber": "",
      "firstpage": 422,
      "lastpage": 441,
      "id": "b69f17ec-a8e1-41e9-8833-79f460c9b4f5",
      "key": "VisserB98",
      "title": "A core language for rewriting",
      "month": "",
      "year": "1998",
      "doi": "http://dx.doi.org/10.1016/S1571-0661(05)80027-1",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/VisserB98",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/zine-el-abidine-benaissa",
            "id": "000d6925-b35e-4f88-860f-c95510b5a0d3",
            "key": "zine-el-abidine-benaissa",
            "name": "Zine-El-Abidine Benaissa"
          },
          "person": {
            "url": "https://researchr.org/profile/zineelabidinebenaissa",
            "id": "195c7e68-4b94-4590-a45b-ac5b35de94a9",
            "key": "zineelabidinebenaissa",
            "fullname": "Zine-El-Abidine Benaissa"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Theor. Comput. Sci.",
      "volumenumber": "73",
      "issuenumber": "2",
      "firstpage": 231,
      "lastpage": 248,
      "id": "c275ff5b-97d0-4071-83ee-a74fdb29aa6c",
      "key": "Wadler90:0",
      "title": "Deforestation: Transforming Programs to Eliminate Trees",
      "month": "",
      "year": "1990",
      "doi": "",
      "note": "",
      "abstract": "",
      "url": "https://researchr.org/publication/Wadler90%3A0",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/philip-wadler",
            "id": "f8c4f726-caec-4bcf-889d-86917caa1ede",
            "key": "philip-wadler",
            "name": "Philip Wadler"
          },
          "person": {
            "url": "https://researchr.org/profile/philipwadler",
            "id": "682828ae-306b-49ea-b847-6eda8680b7d9",
            "key": "philipwadler",
            "fullname": "Philip Wadler"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "oopsla",
      "conferenceYear": "",
      "booktitle": "Proceedings of the 23rd Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2008, October 19-23, 2008, Nashville, TN, USA",
      "volume": "",
      "number": "",
      "series": "",
      "address": "",
      "organization": "",
      "publisher": "ACM",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/gail-e.-harris",
            "id": "af52a55a-04f9-476c-a946-013c96a7023e",
            "key": "gail-e.-harris",
            "name": "Gail E. Harris"
          }
        }
      ],
      "firstpage": 91,
      "lastpage": 108,
      "id": "c4413cee-a32d-4df1-85ab-01dd3c8e9361",
      "key": "KatsBV08",
      "title": "Mixing source and bytecode: a case for compilation by normalization",
      "month": "",
      "year": "2008",
      "doi": "http://doi.acm.org/10.1145/1449764.1449772",
      "note": "",
      "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\u0027s 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.\r\n\r\n",
      "url": "https://researchr.org/publication/KatsBV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/lennart-c.-l.-kats",
            "id": "f6b6789b-a32a-417c-a90e-c37a12f25728",
            "key": "lennart-c.-l.-kats",
            "name": "Lennart C. L. Kats"
          },
          "person": {
            "url": "https://researchr.org/profile/lennartclkats",
            "id": "6e29bb96-28c9-4c76-915d-160ef1947602",
            "key": "lennartclkats",
            "fullname": "Lennart C. L. Kats"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "icfp",
      "conferenceYear": "",
      "booktitle": "Proceedings of the third ACM SIGPLAN international conference on Functional programming",
      "volume": "",
      "number": "",
      "series": "",
      "address": "Baltimore, Maryland, United States",
      "organization": "",
      "publisher": "ACM",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/matthias-felleisen",
            "id": "902af431-fda0-4d7c-8a1d-7d08f7492f59",
            "key": "matthias-felleisen",
            "name": "Matthias Felleisen"
          },
          "person": {
            "url": "https://researchr.org/profile/matthiasfelleisen",
            "id": "4511a544-bb66-4fda-a809-3c82d1f28a1b",
            "key": "matthiasfelleisen",
            "fullname": "Matthias Felleisen"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/paul-hudak",
            "id": "a2d886cc-d039-46ed-9be5-ed31020b60b0",
            "key": "paul-hudak",
            "name": "Paul Hudak"
          },
          "person": {
            "url": "https://researchr.org/profile/paulhudak",
            "id": "91f15937-b47a-459d-b84b-77733370099b",
            "key": "paulhudak",
            "fullname": "Paul Hudak"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/christian-queinnec",
            "id": "afe186d3-e7b1-4cff-9b62-9a09225cfa28",
            "key": "christian-queinnec",
            "name": "Christian Queinnec"
          }
        }
      ],
      "firstpage": 13,
      "lastpage": 26,
      "id": "c798f9e6-7239-420e-a253-cd1676aa4905",
      "key": "VisserBT98",
      "title": "Building Program Optimizers with Rewriting Strategies",
      "month": "",
      "year": "1998",
      "doi": "http://doi.acm.org/10.1145/289423.289425",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/VisserBT98",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/zine-el-abidine-benaissa",
            "id": "000d6925-b35e-4f88-860f-c95510b5a0d3",
            "key": "zine-el-abidine-benaissa",
            "name": "Zine-El-Abidine Benaissa"
          },
          "person": {
            "url": "https://researchr.org/profile/zineelabidinebenaissa",
            "id": "195c7e68-4b94-4590-a45b-ac5b35de94a9",
            "key": "zineelabidinebenaissa",
            "fullname": "Zine-El-Abidine Benaissa"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/andrew-p.-tolmach",
            "id": "1c1758a0-8f75-4a42-8365-aa467678c90b",
            "key": "andrew-p.-tolmach",
            "name": "Andrew P. Tolmach"
          },
          "person": {
            "url": "https://researchr.org/profile/andrewtolmach",
            "id": "3ae7690a-ec25-45cd-b2fb-3d5355157acd",
            "key": "andrewtolmach",
            "fullname": "Andrew P. Tolmach"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "gpce",
      "conferenceYear": "",
      "booktitle": "Generative Programming and Component Engineering, ACM SIGPLAN/SIGSOFT Conference, GPCE 2002, Pittsburgh, PA, USA, October 6-8, 2002, Proceedings",
      "volume": "2487",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/don-s.-batory",
            "id": "57485cad-e284-4e71-b180-2b0878b3c28f",
            "key": "don-s.-batory",
            "name": "Don S. Batory"
          },
          "person": {
            "url": "https://researchr.org/profile/donsbatory",
            "id": "38f8a44a-60f3-472f-870d-68ed0ae161e8",
            "key": "donsbatory",
            "fullname": "Don S. Batory"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/charles-consel",
            "id": "a1653a2a-1cf9-4ff3-8dfa-cb71f898a0c3",
            "key": "charles-consel",
            "name": "Charles Consel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/walid-taha",
            "id": "d7722e79-9b93-45ef-bc15-de1703553ecf",
            "key": "walid-taha",
            "name": "Walid Taha"
          },
          "person": {
            "url": "https://researchr.org/profile/walidtaha",
            "id": "9c636405-26d3-47df-8bbf-4f1ea7dceb7b",
            "key": "walidtaha",
            "fullname": "Walid Taha"
          }
        }
      ],
      "firstpage": 299,
      "lastpage": 315,
      "id": "c99e9946-9756-4928-84a3-d07e6af1a3e6",
      "key": "Visser02",
      "title": "Meta-programming with Concrete Object Syntax",
      "month": "",
      "year": "2002",
      "doi": "https://doi.org/10.1007/3-540-45821-2_19",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/Visser02",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "icmt",
      "conferenceYear": "",
      "booktitle": "Theory and Practice of Model Transformations, First International Conference, ICMT 2008, Zürich, Switzerland, July 1-2, 2008, Proceedings",
      "volume": "5063",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/antonio-vallecillo",
            "id": "ea43e3ee-9d5c-44a9-ae63-3a0991587df7",
            "key": "antonio-vallecillo",
            "name": "Antonio Vallecillo"
          },
          "person": {
            "url": "https://researchr.org/profile/antoniovallecillo",
            "id": "fcd91adb-afc8-49ea-8462-8ea7e21fcd02",
            "key": "antoniovallecillo",
            "fullname": "Antonio Vallecillo"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jeff-gray",
            "id": "fefac3e9-8142-40df-9285-12943249e210",
            "key": "jeff-gray",
            "name": "Jeff Gray"
          },
          "person": {
            "url": "https://researchr.org/profile/jeffgray",
            "id": "474ab36e-49c3-4f85-aa00-417d49005952",
            "key": "jeffgray",
            "fullname": "Jeffrey G. Gray"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/alfonso-pierantonio",
            "id": "6bdb8120-94a2-4358-a8ff-970aeb5a607f",
            "key": "alfonso-pierantonio",
            "name": "Alfonso Pierantonio"
          },
          "person": {
            "url": "https://researchr.org/profile/alfonsopierantonio",
            "id": "b3878a28-8c5a-4748-8d0d-392889211b46",
            "key": "alfonsopierantonio",
            "fullname": "Alfonso Pierantonio"
          }
        }
      ],
      "firstpage": 183,
      "lastpage": 198,
      "id": "c9b49596-d81d-483c-b093-ee6d3b6ab486",
      "key": "HemelKV08",
      "title": "Code Generation by Model Transformation",
      "month": "",
      "year": "2008",
      "doi": "http://dx.doi.org/10.1007/978-3-540-69927-9_13",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/HemelKV08",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/zef-hemel",
            "id": "7816809a-e2e6-42c6-8c44-481a821fb0bd",
            "key": "zef-hemel",
            "name": "Zef Hemel"
          },
          "person": {
            "url": "https://researchr.org/profile/zefhemel",
            "id": "947901fa-e910-454b-8546-c514c5a191be",
            "key": "zefhemel",
            "fullname": "Zef  Hemel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/lennart-c.-l.-kats",
            "id": "f6b6789b-a32a-417c-a90e-c37a12f25728",
            "key": "lennart-c.-l.-kats",
            "name": "Lennart C. L. Kats"
          },
          "person": {
            "url": "https://researchr.org/profile/lennartclkats",
            "id": "6e29bb96-28c9-4c76-915d-160ef1947602",
            "key": "lennartclkats",
            "fullname": "Lennart C. L. Kats"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "dagstuhl",
      "conferenceYear": "",
      "booktitle": "Domain-Specific Program Generation, International Seminar, Dagstuhl Castle, Germany, March 23-28, 2003, Revised Papers",
      "volume": "3016",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/christian-lengauer",
            "id": "418346b7-d9f6-48b5-8f4d-55a344ab78fe",
            "key": "christian-lengauer",
            "name": "Christian Lengauer"
          },
          "person": {
            "url": "https://researchr.org/profile/christianlengauer",
            "id": "ef3493a4-c823-43d6-b7d4-2a302d206e7e",
            "key": "christianlengauer",
            "fullname": "Christian Lengauer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/don-s.-batory",
            "id": "57485cad-e284-4e71-b180-2b0878b3c28f",
            "key": "don-s.-batory",
            "name": "Don S. Batory"
          },
          "person": {
            "url": "https://researchr.org/profile/donsbatory",
            "id": "38f8a44a-60f3-472f-870d-68ed0ae161e8",
            "key": "donsbatory",
            "fullname": "Don S. Batory"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/charles-consel",
            "id": "a1653a2a-1cf9-4ff3-8dfa-cb71f898a0c3",
            "key": "charles-consel",
            "name": "Charles Consel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-odersky",
            "id": "4a0a243e-c2c5-4bb8-b69e-6c245cd64e3b",
            "key": "martin-odersky",
            "name": "Martin Odersky"
          },
          "person": {
            "url": "https://researchr.org/profile/martinodersky",
            "id": "f85bed9a-ff64-4608-b607-1d8cb84a1d4a",
            "key": "martinodersky",
            "fullname": "Martin Odersky"
          }
        }
      ],
      "firstpage": 216,
      "lastpage": 238,
      "id": "cc6d8c51-e589-49a4-b7dc-ccee24ca147a",
      "key": "Visser03",
      "title": "Program Transformation with Stratego/XT: Rules, Strategies, Tools, and Systems in Stratego/XT 0.9",
      "month": "",
      "year": "2003",
      "doi": "https://doi.org/10.1007/978-3-540-25935-0_13",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/Visser03",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "44",
      "issuenumber": "2",
      "firstpage": 79,
      "lastpage": 86,
      "id": "cc787b47-a9e5-42f5-b1b3-5597258397f7",
      "key": "JongeVV01",
      "title": "XT: a bundle of program transformation tools",
      "month": "",
      "year": "2001",
      "doi": "http://dx.doi.org/10.1016/S1571-0661(04)80921-6",
      "note": "",
      "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\u0027s constituents in the development process of program transformation tools, as well as some experiences with building program transformation systems with XT. ",
      "url": "https://researchr.org/publication/JongeVV01",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/merijn-de-jonge",
            "id": "c2fd021b-7f7b-44c3-af97-49d7d58c8f32",
            "key": "merijn-de-jonge",
            "name": "Merijn de Jonge"
          },
          "person": {
            "url": "https://researchr.org/profile/merijndejonge",
            "id": "3a8ae491-5c79-4670-9a35-cfe59537630e",
            "key": "merijndejonge",
            "fullname": "Merijn de Jonge"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/joost-visser",
            "id": "a2685a71-4f48-405f-8d9b-0c4757bcef35",
            "key": "joost-visser",
            "name": "Joost Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/joostvisser",
            "id": "96380068-84b9-436b-ab9b-40d90a566d94",
            "key": "joostvisser",
            "fullname": "Joost Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "J. Symb. Comput.",
      "volumenumber": "40",
      "issuenumber": "1",
      "firstpage": 831,
      "lastpage": 873,
      "id": "cd23c1ea-8d13-43f9-8439-775022f963de",
      "key": "Visser05",
      "title": "A survey of strategies in rule-based program transformation systems",
      "month": "",
      "year": "2005",
      "doi": "http://dx.doi.org/10.1016/j.jsc.2004.12.011",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/Visser05",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "147",
      "issuenumber": "1",
      "firstpage": 5,
      "lastpage": 30,
      "id": "d643cfa1-4ea1-481e-ba8c-1bdba624f172",
      "key": "KallebergV06",
      "title": "Combining Aspect-Oriented and Strategic Programming",
      "month": "",
      "year": "2006",
      "doi": "http://dx.doi.org/10.1016/j.entcs.2005.06.035",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/KallebergV06",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/karl-trygve-kalleberg",
            "id": "3ee71cd9-6b84-45a5-ab19-8f8783c8dba3",
            "key": "karl-trygve-kalleberg",
            "name": "Karl Trygve Kalleberg"
          },
          "person": {
            "url": "https://researchr.org/profile/karltk",
            "id": "d774aeed-7606-4770-8a56-2cf4990644b4",
            "key": "karltk",
            "fullname": "Karl Trygve Kalleberg"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "article",
      "journal": "Electr. Notes Theor. Comput. Sci.",
      "volumenumber": "70",
      "issuenumber": "6",
      "firstpage": 156,
      "lastpage": 175,
      "id": "dbd8e28e-c916-4843-bd37-30ee12d7c116",
      "key": "OlmosV02",
      "title": "Strategies for Source-to-Source Constant Progagation",
      "month": "",
      "year": "2002",
      "doi": "https://doi.org/10.1016/S1571-0661(04)80605-4",
      "note": "",
      "abstract": "Data-ﬂow optimizations are usually implemented on low-level intermediate repre- \r\nsentations. This is not appropriate for source-to-source optimizations, which re- \r\nconstruct a source level program after transformation. In this paper we show how \r\nconstant propagation, a well known data-ﬂow optimization problem, can be imple- \r\nmented on abstract syntax trees in Stratego, a rewriting system extended with \r\nprogrammable rewriting strategies for the control over the application of rules and \r\ndynamic rewrite rules for the propagation of information. ",
      "url": "https://researchr.org/publication/OlmosV02",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/karina-olmos",
            "id": "8e6fdae1-9b09-4e01-8a08-f1ac76e40742",
            "key": "karina-olmos",
            "name": "Karina Olmos"
          },
          "person": {
            "url": "https://researchr.org/profile/karinaolmos",
            "id": "3a540653-1069-400e-93e1-051060c87ab1",
            "key": "karinaolmos",
            "fullname": "Karina Olmos"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "models",
      "conferenceYear": "",
      "booktitle": "Models in Software Engineering, Workshops and Symposia at MoDELS 2007, Nashville, TN, USA, September 30 - October 5, 2007, Reports and Revised Selected Papers",
      "volume": "5002",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/holger-giese",
            "id": "4a69e75b-f301-4349-ada8-c93a4ca58a5a",
            "key": "holger-giese",
            "name": "Holger Giese"
          }
        }
      ],
      "firstpage": 34,
      "lastpage": 46,
      "id": "e9b0e084-565d-4e41-891b-75ba447623d0",
      "key": "BravenboerV07",
      "title": "Designing Syntax Embeddings and Assimilations for Language Libraries",
      "month": "",
      "year": "2007",
      "doi": "http://dx.doi.org/10.1007/978-3-540-69073-3_5",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/BravenboerV07",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "xpu",
      "conferenceYear": "",
      "booktitle": "Extreme Programming and Agile Methods - XP/Agile Universe 2002, Second XP Universe and First Agile Universe Conference Chicago, IL, USA, August 4-7, 2002, Proceedings",
      "volume": "2418",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/don-wells",
            "id": "3fb442ff-7b7b-4b91-b3e4-3612b2da1892",
            "key": "don-wells",
            "name": "Don Wells"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/laurie-a.-williams",
            "id": "a2311da8-4872-4f66-b469-428094fec27c",
            "key": "laurie-a.-williams",
            "name": "Laurie A. Williams"
          }
        }
      ],
      "firstpage": 256,
      "lastpage": 0,
      "id": "f15f571e-7cfd-4195-b4c4-fb0508ca5695",
      "key": "Fowler02",
      "title": "Refactoring: Improving the Design of Existing Code",
      "month": "",
      "year": "2002",
      "doi": "http://link.springer.de/link/service/series/0558/bibs/2418/24180256.htm",
      "note": "",
      "abstract": "",
      "url": "https://researchr.org/publication/Fowler02",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-fowler",
            "id": "ae5808d4-376f-4bcb-8076-ef654bf1d959",
            "key": "martin-fowler",
            "name": "Martin Fowler"
          },
          "person": {
            "url": "https://researchr.org/profile/martinfowler",
            "id": "1e352fe1-9192-47ae-824f-30c34d145a33",
            "key": "martinfowler",
            "fullname": "Martin Fowler"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "cc",
      "conferenceYear": "2009",
      "booktitle": "Compiler Construction, 18th International Conference, CC 2009, Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009, York, UK, March 22-29, 2009. Proceedings",
      "volume": "5501",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/oege-de-moor",
            "id": "23153e23-c6bd-434a-9197-e5b6c0d878fa",
            "key": "oege-de-moor",
            "name": "Oege de Moor"
          },
          "person": {
            "url": "https://researchr.org/profile/oegedemoor",
            "id": "5991e76d-b9a7-4b37-b08a-c72d4c05db58",
            "key": "oegedemoor",
            "fullname": "Oege de Moor"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/michael-i.-schwartzbach",
            "id": "55b2c00c-f58d-4303-b161-0f5fbede2eb8",
            "key": "michael-i.-schwartzbach",
            "name": "Michael I. Schwartzbach"
          },
          "person": {
            "url": "https://researchr.org/profile/michaelischwartzbach",
            "id": "506c63b4-7861-4301-8905-29b7620b6473",
            "key": "michaelischwartzbach",
            "fullname": "Michael I. Schwartzbach"
          }
        }
      ],
      "firstpage": 142,
      "lastpage": 157,
      "id": "fc5d00ce-4f71-4d82-ac2e-56221181deae",
      "key": "KatsSV09",
      "title": "Decorated Attribute Grammars: Attribute Evaluation Meets Strategic Programming",
      "month": "",
      "year": "2009",
      "doi": "http://dx.doi.org/10.1007/978-3-642-00722-4_11",
      "note": "",
      "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. ",
      "url": "https://researchr.org/publication/KatsSV09",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/lennart-c.-l.-kats",
            "id": "f6b6789b-a32a-417c-a90e-c37a12f25728",
            "key": "lennart-c.-l.-kats",
            "name": "Lennart C. L. Kats"
          },
          "person": {
            "url": "https://researchr.org/profile/lennartclkats",
            "id": "6e29bb96-28c9-4c76-915d-160ef1947602",
            "key": "lennartclkats",
            "fullname": "Lennart C. L. Kats"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/anthony-m.-sloane",
            "id": "4cebde5d-1a0c-46b4-abdc-cd51b77b3c88",
            "key": "anthony-m.-sloane",
            "name": "Anthony M. Sloane"
          },
          "person": {
            "url": "https://researchr.org/profile/anthonymsloane",
            "id": "30f25bf3-1656-4413-9a94-659dd3ba4ded",
            "key": "anthonymsloane",
            "fullname": "Anthony M. Sloane"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "gttse",
      "conferenceYear": "",
      "booktitle": "Generative and Transformational Techniques in Software Engineering, International Summer School, GTTSE 2005, Braga, Portugal, July 4-8, 2005. Revised Papers",
      "volume": "4143",
      "number": "",
      "series": "Lecture Notes in Computer Science",
      "address": "",
      "organization": "",
      "publisher": "Springer",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/ralf-l%C3%A4mmel",
            "id": "1cd5b8f9-4e0d-4121-a444-1a1c3466e59c",
            "key": "ralf-lämmel",
            "name": "Ralf Lämmel"
          },
          "person": {
            "url": "https://researchr.org/profile/ralflaemmel",
            "id": "1605f420-86fe-4521-9126-c8999c59b3ed",
            "key": "ralflaemmel",
            "fullname": "Ralf Lämmel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/jo%C3%A3o-saraiva",
            "id": "55af31cd-7a9b-4070-894f-8497836f6610",
            "key": "joão-saraiva",
            "name": "João Saraiva"
          },
          "person": {
            "url": "https://researchr.org/profile/joosaraiva",
            "id": "5c5d9adc-5293-437a-80e2-bf1044dc8837",
            "key": "joosaraiva",
            "fullname": "João Saraiva"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/joost-visser",
            "id": "a2685a71-4f48-405f-8d9b-0c4757bcef35",
            "key": "joost-visser",
            "name": "Joost Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/joostvisser",
            "id": "96380068-84b9-436b-ab9b-40d90a566d94",
            "key": "joostvisser",
            "fullname": "Joost Visser"
          }
        }
      ],
      "firstpage": 297,
      "lastpage": 311,
      "id": "fca040e0-e9f4-4461-979b-4bd68c2713dc",
      "key": "BravenboerGV06",
      "title": "MetaBorg in Action: Examples of Domain-Specific Language Embedding and Assimilation Using Stratego/XT",
      "month": "",
      "year": "2006",
      "doi": "http://dx.doi.org/10.1007/11877028_10",
      "note": "",
      "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.\r\n\r\nIn 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.\r\n\r\nWe 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.\r\n",
      "url": "https://researchr.org/publication/BravenboerGV06",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/ren%C3%A9-de-groot",
            "id": "1b2b6a39-d8e9-40ac-92ce-21e40d0d32eb",
            "key": "rené-de-groot",
            "name": "René de Groot"
          },
          "person": {
            "url": "https://researchr.org/profile/rendegroot",
            "id": "e6362c26-b475-4d1a-97a9-d8c3b55a6c2a",
            "key": "rendegroot",
            "fullname": "René de Groot"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "gpce",
      "conferenceYear": "",
      "booktitle": "Generative Programming and Component Engineering, 6th International Conference, GPCE 2007",
      "volume": "",
      "number": "",
      "series": "",
      "address": "Salzburg, Austria",
      "organization": "",
      "publisher": "ACM",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/charles-consel",
            "id": "a1653a2a-1cf9-4ff3-8dfa-cb71f898a0c3",
            "key": "charles-consel",
            "name": "Charles Consel"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/julia-l.-lawall",
            "id": "50a0fe78-d70d-4890-904d-f020a9a3f2bd",
            "key": "julia-l.-lawall",
            "name": "Julia L. Lawall"
          },
          "person": {
            "url": "https://researchr.org/profile/juliallawall",
            "id": "6d36196c-1b66-405d-9143-fdfc0e20f34f",
            "key": "juliallawall",
            "fullname": "Julia L. Lawall"
          }
        }
      ],
      "firstpage": 3,
      "lastpage": 12,
      "id": "fd3bfb67-5415-42bb-86e3-c933ff4840f2",
      "key": "BravenboerDV07",
      "title": "Preventing injection attacks with syntax embeddings",
      "month": "",
      "year": "2007",
      "doi": "http://doi.acm.org/10.1145/1289971.1289975",
      "note": "",
      "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.",
      "url": "https://researchr.org/publication/BravenboerDV07",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/martin-bravenboer",
            "id": "d43052f6-9073-47d6-98d0-b38cb940c618",
            "key": "martin-bravenboer",
            "name": "Martin Bravenboer"
          },
          "person": {
            "url": "https://researchr.org/profile/martinbravenboer",
            "id": "629a35fe-abf1-4cd3-ad19-ae3021609c90",
            "key": "martinbravenboer",
            "fullname": "Martin  Bravenboer"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-dolstra",
            "id": "c73bbd9f-3809-4463-9a56-d449cf26dff3",
            "key": "eelco-dolstra",
            "name": "Eelco Dolstra"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcodolstra",
            "id": "c0bae0b4-2a49-491c-b0be-e681f6cde43e",
            "key": "eelcodolstra",
            "fullname": "Eelco  Dolstra"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-visser",
            "id": "f68ba0ee-899e-4c4c-9d8a-6fed5092830a",
            "key": "eelco-visser",
            "name": "Eelco Visser"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcovisser",
            "id": "f0fbf7c0-9729-4ec8-b3c9-5f30dbd9614b",
            "key": "eelcovisser",
            "fullname": "Eelco Visser"
          }
        }
      ]
    }
  ]
}