publications: - title: "The ASF+SDF Meta-environment: A Component-Based Language Development Environment" author: - name: "Mark G. J. van den Brand" link: "http://www.win.tue.nl/~mvdbrand/" - name: "Arie van Deursen" link: "http://www.st.ewi.tudelft.nl/~arie/" - name: "Jan Heering" link: "http://homepages.cwi.nl/~jan/" - name: "H. A. de Jong" link: "http://www.cwi.nl" - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" - name: "Tobias Kuipers" link: "http://www.sig.eu" - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" - name: "Leon Moonen" link: "http://simula.no/~leonm/" - name: "Pieter A. Olivier" link: "http://www.cwi.nl" - name: "Jeroen Scheerder" link: "http://www.linkedin.com/in/jeroenscheerder" - name: "Jurgen J. Vinju" link: "http://homepages.cwi.nl/~jurgenv/" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Joost Visser" link: "http://www.di.uminho.pt/~joost.visser/" year: "2001" doi: "https://doi.org/10.1016/S1571-0661(04)80917-4" abstract: "The Asf+Sdf Meta-environment is an interactive development environment for the automatic generation of interactive systems for constructing language definitions and generating tools for them. Over the years, this system has been used in a variety of academic and commercial projects ranging from formal program manipulation to conversion of COBOL systems. Since the existing implementation of the Meta-environment started exhibiting more and more characteristics of a legacy system, we decided to build a completely new, component-based, version. We demonstrate this new system and stress its open architecture. " links: doi: "https://doi.org/10.1016/S1571-0661(04)80917-4" tags: - "programming languages" - "rule-based" - "meta programming" - "SDF" - "meta-model" - "architecture" - "model-driven development" - "source-to-source" - "DSL" - "metaprogramming" - "Meta-Environment" - "Cobol" - "ASF+SDF" - "open-source" - "meta-objects" researchr: "https://researchr.org/publication/BrandDHJ01" cites: 0 citedby: 3 pages: "365-370" booktitle: "CC" kind: "inproceedings" key: "BrandDHJ01" - title: "Disambiguation Filters for Scannerless Generalized LR Parsers" author: - name: "Mark G. J. van den Brand" link: "http://www.win.tue.nl/~mvdbrand/" - name: "Jeroen Scheerder" link: "http://www.linkedin.com/in/jeroenscheerder" - name: "Jurgen J. Vinju" link: "http://homepages.cwi.nl/~jurgenv/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1007/3-540-45937-5_12" abstract: "In this paper we present the fusion of generalized LR parsing and scannerless parsing. This combination supports syntax definitions in which all aspects (lexical and context-free) of the syntax of a language are defined explicitly in one formalism. Furthermore, there are no restrictions on the class of grammars, thus allowing a natural syntax tree structure. Ambiguities that arise through the use of unrestricted grammars are handled by explicit disambiguation constructs, instead of implicit defaults that are taken by traditional scanner and parser generators. Hence, a syntax definition becomes a full declarative description of a language. Scannerless generalized LR parsing is a viable technique that has been applied in various industrial and academic projects. " links: doi: "https://doi.org/10.1007/3-540-45937-5_12" tags: - "GLR parsing" - "syntax definition" - "SDF" - "lexical syntax" - "scannerless" - "disambiguation" - "GLR" - "context-aware" - "parsing" - "scannerless parsing" - "ASF+SDF" - "SGLR" - "grammar" researchr: "https://researchr.org/publication/BrandSVV02" cites: 0 citedby: 4 pages: "143-158" booktitle: "CC" kind: "inproceedings" key: "BrandSVV02" - title: "From Whole Program Compilation to Incremental Compilation: A Critical Case" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" month: "10" abstract: "We introduce a design approach for incremental compilers that we believe may be applicable to other languages. We demonstrate it on the critical case of Stratego, a term rewriting language with open extensibility features. After a brief overview of the open extensibility features, we show our compilation method, which is somewhere in between separate and incremental compilation. Our approach allows us to reuse almost all of the existing compiler while gaining great improvements in recompilation speed. We evaluate the new compiler with a benchmark on the version control history of a large Stratego project." researchr: "https://researchr.org/publication/SmitsKV19" cites: 0 citedby: 0 booktitle: "Second Workshop on Incremental Computing (IC 2019)" kind: "inproceedings" key: "SmitsKV19" - title: "Towards language-parametric semantic editor services based on declarative type system specifications" author: - name: "Daniël A. A. Pelsmaeker" link: "https://pelsmaeker.net/" - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" doi: "https://doi.org/10.1145/3359061.3362782" abstract: "New programming languages often lack good IDE support, as developing advanced semantic editor services takes additional effort. In previous work we discussed the operational requirements of a constraint solver that leverages the declarative type system specification of a language to provide language-parametric semantic editor services. In this work we describe the implementation of our solver as a two stage process: inference and search. An editor-service specific search strategy determines how and where the search is conducted, and when it terminates. We are currently implementing and evaluating this idea." links: doi: "https://doi.org/10.1145/3359061.3362782" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/PelsmaekerAV19" researchr: "https://researchr.org/publication/PelsmaekerAV19-SPLASH" cites: 0 citedby: 0 pages: "19-20" booktitle: "OOPSLA" kind: "inproceedings" key: "PelsmaekerAV19-SPLASH" - title: "Towards Language-Parametric Semantic Editor Services Based on Declarative Type System Specifications (Brave New Idea Paper)" author: - name: "Daniël A. A. Pelsmaeker" link: "https://pelsmaeker.net/" - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.26" abstract: "Editor services assist programmers to more effectively write and comprehend code. Implementing editor services correctly is not trivial. This paper focuses on the specification of semantic editor services, those that use the semantic model of a program. The specification of refactorings is a common subject of study, but many other semantic editor services have received little attention. We propose a language-parametric approach to the definition of semantic editor services, using a declarative specification of the static semantics of the programming language, and constraint solving. Editor services are specified as constraint problems, and language specifications are used to ensure correctness. We describe our approach for the following semantic editor services: reference resolution, find usages, goto subclasses, code completion, and the extract definition refactoring. We do this in the context of Statix, a constraint language for the specification of type systems. We investigate the specification of editor services in terms of Statix constraints, and the requirements these impose on a suitable solver." links: doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.26" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/PelsmaekerAV19" researchr: "https://researchr.org/publication/PelsmaekerAV19" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "PelsmaekerAV19" - title: "Encapsulating Software Platform Logic by Aspect-Oriented Programming: A Case Study in Using Aspects for Language Portability" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://dx.doi.org/10.1109/SCAM.2010.11" abstract: "Software platforms such as the Java Virtual Machine or the CLR. NET virtual machine have their own ecosystem of a core programming language or instruction set, libraries, and developer community. Programming languages can target multiple software platforms to increase interoperability or to boost performance. Introducing a new compiler backend for a language is the first step towards targeting a new platform, translating the language to the platform's language or instruction set. Programs written in modern languages generally make extensive use of APIs, based on the runtime system of the software platform, introducing additional portability concerns. They may use APIs that are implemented by platform-specific libraries. Libraries may perform platform-specific operations, make direct native calls, or make assumptions about performance characteristics of operations or about the file system. This paper proposes to use aspect weaving to invasively adapt programs and libraries to address such portability concerns, and identifies four classes of aspects for this purpose. We evaluate this approach through a case study where we retarget the Stratego program transformation language towards the Java Virtual Machine." links: doi: "http://dx.doi.org/10.1109/SCAM.2010.11" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/scam/KatsV10" tags: - "programming languages" - "object-oriented programming" - "case study" - "C++" - "logic programming" - "aspect oriented programming" - "programming" - "subject-oriented programming" - "logic" - "feature-oriented programming" researchr: "https://researchr.org/publication/KatsV10scam" cites: 0 citedby: 0 pages: "147-156" booktitle: "SCAM" kind: "inproceedings" key: "KatsV10scam" - title: "PIL: A Platform Independent Language for Retargetable DSLs" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2009" doi: "http://dx.doi.org/10.1007/978-3-642-12107-4_17" abstract: "Intermediate languages are used in compiler construction to simplify retargeting compilers to multiple machine architectures. In the implementation of domain-specific languages (DSLs), compilers typically generate high-level source code, rather than low-level machine instructions. DSL compilers target a software platform, i.e. a programming language with a set of libraries, deployable on one or more operating systems. DSLs enable targeting multiple software platforms if its abstractions are platform independent. While transformations from DSL to each targeted platform are often conceptually very similar, there is little reuse between transformations due to syntactic and API differences of the target platforms, making supporting multiple platforms expensive. In this paper, we discuss the design and implementation of PIL, a Platform Independent Language, an intermediate language providing a layer of abstraction between DSL and target platform code, abstracting from syntactic and API differences between platforms, thereby removing the need for platform-specific transformations. We discuss the use of PIL in an implemementation of WebDSL, a DSL for building web applications." links: doi: "http://dx.doi.org/10.1007/978-3-642-12107-4_17" tags: - "DSL" researchr: "https://researchr.org/publication/HemelV09" cites: 0 citedby: 1 pages: "224-243" booktitle: "SLE" kind: "inproceedings" key: "HemelV09" - title: "Efficient annotated terms" author: - name: "Mark G. J. van den Brand" link: "http://www.win.tue.nl/~mvdbrand/" - name: "H. A. de Jong" link: "https://researchr.org/alias/h.-a.-de-jong" - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" - name: "Pieter A. Olivier" link: "https://researchr.org/alias/pieter-a.-olivier" year: "2000" doi: "https://doi.org/10.1002/(SICI)1097-024X(200003)30:3\\%3C259::AID-SPE298\\%3E3.0.CO;2-Y" abstract: "How do distributed applications exchange (tree-like) data structures? To this end, we introduce the abstract data type of Annotated Terms (ATerms) and discuss their design, implementation and application. A comprehensive procedural interface enables creation and manipulation of ATerms in C. A Java version is also supported. The ATerm implementation is based on maximal subterm sharing and automatic garbage collection. A binary exchange format for the concise representation of ATerms (sharing preserved) allows the fast exchange of ATerms between applications. In a typical application---parse trees which contain quite some redundant information---less than 2 bytes are needed to represent a node in memory, and less than 2 bits are needed to represent it in binary format. It is shown that the implementation of ATerms scales up to the manipulation of ATerms in the giga-byte range." links: doi: "https://doi.org/10.1002/(SICI)1097-024X(200003)30:3\\%3C259::AID-SPE298\\%3E3.0.CO;2-Y" tags: - "rule-based" - "Java" - "parsing" researchr: "https://researchr.org/publication/BrandJKO00" cites: 0 citedby: 1 journal: "SPE" volume: "30" number: "3" pages: "259-291" kind: "article" key: "BrandJKO00" - title: "Towards Live Language Development" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" abstract: "We would like to see live programming applied to language development, to getlive language development. With live language development, a language developer gets fast feed- back when they change their language, enabling experimentation with language design and development. In this paper, we describe what live language development is and why it is useful, and we analyze what is needed to achieve live language development. Moreover, we describe our work in progress in supporting live language development in the Spoofax language workbench." links: technicalreport: "https://researchr.org/publication/preprint-KonatEV16-0" researchr: "https://researchr.org/publication/KonatEV16-LIVE" cites: 0 citedby: 0 booktitle: "Workshop on Live Programming Systems (LIVE)" kind: "inproceedings" key: "KonatEV16-LIVE" - title: "The Semantics of Name Resolution in Grace" author: - name: "Vlad Vergu" link: "https://researchr.org/alias/vlad-vergu" - name: "Michiel Haisma" link: "https://researchr.org/alias/michiel-haisma" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "https://doi.org/10.1145/3170472.3133847" abstract: "Grace is a dynamic object oriented programming language designed to aid programming education. We present a formal model of and give an operational semantics for its object model and name resolution algorithm. Our main contributions are a systematic model of Grace's name resolution using scope graphs, relating linguistic features to other languages, and an operationalization of this model in the form of an operational semantics which is readable and executable. The semantics are extensively tested against a reference Grace implementation. " links: doi: "https://doi.org/10.1145/3170472.3133847" published: "https://researchr.org/publication/VerguHV17" researchr: "https://researchr.org/publication/TUD-SERG-2017-011" cites: 0 citedby: 0 institution: "Software Engineering Research Group, Delft University of Technology" number: "TUD-SERG-2017-011" kind: "techreport" key: "TUD-SERG-2017-011" - title: "A Language Designer's Workbench: A One-Stop-Shop for Implementation and Verification of Language Designs" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Augusto Passalaqua" link: "http://www.linkedin.com/pub/augusto-passalaqua/9/829/b29" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" year: "2014" doi: "http://doi.acm.org/10.1145/2661136.2661149" abstract: "The realization of a language design requires multiple artifacts that redundantly encode the same information. This entails significant effort for language implementors, and often results in late detection of errors in language definitions. In this paper we present a proof-of-concept language designer's workbench that supports generation of IDEs, interpreters, and verification infrastructure from a single source. This constitutes a first milestone on the way to a system that fully automates language implementation and verification. " links: doi: "http://doi.acm.org/10.1145/2661136.2661149" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/VisserWTNVPK14" "pdf": "http://dl.acm.org/ft_gateway.cfm?id=2661149&ftid=1505232&dwn=1&CFID=550125770&CFTOKEN=54358949" researchr: "https://researchr.org/publication/VisserOnward14" cites: 0 citedby: 0 pages: "95-111" booktitle: "OOPSLA" kind: "inproceedings" key: "VisserOnward14" - title: "Composing Source-to-Source Data-Flow Transformations with Rewriting Strategies and Dependent Dynamic Rewrite Rules" author: - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "https://doi.org/10.1007/978-3-540-31985-6_14" abstract: "Data-flow transformations used in optimizing compilers are also useful in other programming tools such as code generators, aspect weavers, domain-specific optimizers, and refactoring tools. These applications require source-to-source transformations rather than transformations on a low-level intermediate representation. In this paper we describe the composition of source-to-source data-flow transformations in the program transformation language Stratego. The language supports the high-level specification of transformations by means of rewriting strategy combinators that allow a natural modeling of data- and control-flow without committing to a specific source language. Data-flow facts are propagated using dynamic rewriting rules. In particular, we introduce the concept of dependent dynamic rewrite rules for modeling the dependencies of data-flow facts on program entities such as variables. The approach supports the combination of analysis and transformation, the combination of multiple transformations, the combination with other types of transformations, and the correct treatment of variable binding constructs and lexical scope to avoid free variable capture." links: doi: "https://doi.org/10.1007/978-3-540-31985-6_14" tags: - "programming languages" - "model-to-model transformation" - "optimization" - "rule-based" - "intermediate representation" - "program analysis" - "meta programming" - "data-flow language" - "graph transformation" - "meta-model" - "dynamic rewrite rules" - "modeling language" - "modeling" - "variable binding" - "Stratego/XT" - "model refactoring" - "refactoring" - "transformation language" - "language modeling" - "composition" - "dynamic rules" - "points-to analysis" - "domain analysis" - "dependent dynamic rewrite rules" - "analysis" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "rules" - "rule-based refactoring" - "compiler" - "model transformation" - "programming" - "program optimization" - "Meta-Environment" - "rewriting" - "data-flow analysis" - "systematic-approach" - "rewriting strategies" - "open-source" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/OlmosV05" cites: 0 citedby: 0 pages: "204-220" booktitle: "CC" kind: "inproceedings" key: "OlmosV05" - title: "Language-Independent Type-Dependent Name Resolution" author: - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2015" month: "July" abstract: "We extend and combine two existing declarative formalisms, the scope graphs of Neron et al. and type constraint systems, to build a language-independent theory that can describe both name and type resolution for realistic languages with complex scope and typing rules. Unlike conventional static semantics presentations, our approach maintains a clear separation between scoping and typing concerns, while still be- ing able to handle language constructs, such as class field access, for which name and type resolution are necessarily intertwined. We define a constraint scheme that can express both typing and name binding constraints, and give a for- mal notion of constraint satisfiability together with a sound algorithm for finding solutions in important special cases. We describe the details of constraint generation for a model language that illustrates many of the interesting resolution issues associated with modules, classes, and records. Our constraint generator and solver have been implemented in the Spoofax Language Workbench." links: "pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2015-006.pdf" researchr: "https://researchr.org/publication/TUD-SERG-2015-006" cites: 0 citedby: 0 institution: "Delft University of Technology, Software Engineering Research Group" number: "TUD-SERG-2015-006" address: "Delft, The Netherlands" kind: "techreport" key: "TUD-SERG-2015-006" - title: "WebWorkFlow: An Object-Oriented Workflow Modeling Language for Web Applications" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Ruben Verhaaf" link: "http://www.linkedin.com/pub/ruben-verhaaf/3/a73/2ab" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1007/978-3-540-87875-9_8" abstract: "Workflow languages are designed for the high-level description of processes and are typically not suitable for the generation of complete applications. In this paper, we present WebWorkFlow, an object-oriented workflow modeling language for the high-level description of workflows in web applications. Workflow descriptions define procedures operating on domain objects. Procedures are composed using sequential and concurrent process combinators. WebWorkFlow is an embedded language, extending WebDSL, a domain-specific language for web application development, with workflow abstractions. The extension is implemented by means of model-to-model transformations. Rather than providing an exclusive workflow language, WebWorkFlow supports interaction with the underlying WebDSL language. WebWorkFlow supports most of the basic workflow control patterns. " links: doi: "http://dx.doi.org/10.1007/978-3-540-87875-9_8" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-029.pdf" tags: - "workflow patterns" - "model-to-model transformation" - "interaction design" - "WebDSL" - "transformation engineering" - "completeness" - "pattern language" - "meta-model" - "modeling language" - "modeling" - "language engineering" - "transformation language" - "language modeling" - "web engineering" - "language design" - "model-driven development" - "source-to-source" - "model-driven engineering" - "object-role modeling" - "model transformation" - "web applications" - "DSL" - "abstraction" - "Meta-Environment" - "workflow" - "process modeling" - "WebWorkFlow" - "meta-objects" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/HemelVV08" cites: 0 citedby: 6 pages: "113-127" booktitle: "MoDELS" kind: "inproceedings" key: "HemelVV08" - title: "Language extension and composition with language workbenches" author: - name: "Markus Völter" link: "http://www.voelter.de/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://doi.acm.org/10.1145/1869542.1869623" abstract: " Domain-specific languages (DSLs) provide high expressive power focused on a particular problem domain. They provide linguistic abstractions and specialized syntax specifically designed for a domain, allowing developers to avoid boilerplate code and low-level implementation details. Language workbenches are tools that integrate all aspects of the definition of domain-specific or general-purpose software languages and the creation of a programming environment from such a definition. To count as a language workbench, a tool needs to satisfy basic requirements for the integrated definition of syntax, semantics, and editor services, and preferably also support language extension and composition. Within these requirements there is ample room for variation in the design of a language workbench. In this tutorial, we give an introduction to the state of the art in textual DSLs and language workbenches. We discuss the main requirements and variation points in the design of language workbenches, and describe two points in the design space using two state-of-the-art language workbenches. Spoofax is an example of a parser-based language workbench, while MPS represents language workbenches based on projectional editors. " links: doi: "http://doi.acm.org/10.1145/1869542.1869623" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/VolterV10" tags: - "workbench" - "composition" - "language workbench" researchr: "https://researchr.org/publication/VolterV10" cites: 0 citedby: 0 pages: "301-304" booktitle: "OOPSLA" kind: "inproceedings" key: "VolterV10" - title: "Code generation by model transformation: a case study in transformation modularity" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "10.1007/s10270-009-0136-1" abstract: "The realization of model-driven software development requires effective techniques for implementing code generators for domain-specific languages. This paper identifies techniques for improving separation of concerns in the implementation of generators. The core technique is code generation by model transformation, that is, the generation of a structured representation (model) of the target program instead of plain text. This approach enables the transformation of code after generation, which in turn enables the extension of the target language with features that allow better modularity in code generation rules. The technique can also be applied to ‘internal code generation’ for the translation of high-level extensions of a DSL to lower-level constructs within the same DSL using model-to-model transformations. This paper refines our earlier description of code generation by model transformation with an improved architecture for the composition of model-to-model normalization rules, solving the problem of combining type analysis and transformation. Instead of coarse-grained stages that alternate between normalization and type analysis, we have developed a new style of type analysis that can be integrated with normalizing transformations in a fine-grained manner. The normalization strategy has a simple extension interface and integrates non-local, context-sensitive transformation rules. We have applied the techniques in a realistic case study of domain-specific language engineering, i.e. the code generator for WebDSL, using Stratego, a high-level transformation language that integrates model-to-model, model-to-code, and code-to-code transformations." links: dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/sosym/HemelKGV10" tags: - "model-to-model transformation" - "case study" - "meta-model" - "source-to-source" - "C++" - "code generation" - "model transformation" - "Meta-Environment" - "transformation" researchr: "https://researchr.org/publication/HemelKGV10" cites: 0 citedby: 0 journal: "SoSyM" volume: "9" number: "3" pages: "375-402" kind: "article" key: "HemelKGV10" - title: "Declarative Specification of Template-Based Textual Editors" author: - name: "Tobi Vollebregt" link: "http://www.tobivollebregt.nl/" year: "2012" month: "April" doi: "http://resolver.tudelft.nl/uuid:8907468c-b102-4a35-aa84-d49bb2110541" abstract: "Syntax discoverability has been a crucial advantage of structure editors for new users of a language. Despite this advantage, structure editors have not been widely adopted. Nevertheless, the Cheetah system, developed at Capgemini, leverages a structure editor to aid domain experts modeling tax-benefit rules in a domain specific language. The structure editor suffers from a lack of free form editing and conversions from/to plain text. The Spoofax language workbench, developed at Delft University of Technology, uses a textual editor, which is syntax-aware due to immediate parsing and analyses. In this thesis we describe a migration from Cheetah to Spoofax, which aims to bring the advantages of text editing to the tax-benefit rule modeling language. During the migration, we experienced that current text-based language workbenches, such as Spoofax, require redundant specification of the ingredients for a template-based editor, which is detrimental to the quality of syntactic completion, as consistency and completeness of the definition cannot be guaranteed. We describe the design and implementation of a specification language for syntax definition based on templates. It unifies the specification of parser, pretty printer and template-based editor. We evaluate the template language by application to the tax-benefit rule modeling language and a language for mobile web applications." links: doi: "http://resolver.tudelft.nl/uuid:8907468c-b102-4a35-aa84-d49bb2110541" "pdf": "http://repository.tudelft.nl/assets/uuid:8907468c-b102-4a35-aa84-d49bb2110541/thesis-final.pdf" "tud repository": "http://resolver.tudelft.nl/uuid:8907468c-b102-4a35-aa84-d49bb2110541" tags: - "workbench" - "rule-based" - "syntax definition" - "completeness" - "model editor" - "meta-model" - "modeling language" - "modeling" - "language modeling" - "language design" - "rules" - "migration" - "web applications" - "consistency" - "language workbench" - "Spoofax" - "Meta-Environment" - "parsing" - "domain-specific language" researchr: "https://researchr.org/publication/Vollebregt2012" cites: 0 citedby: 0 school: "Delft University of Technology" address: "Delft, The Netherlands" advisor: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" kind: "mastersthesis" key: "Vollebregt2012" - title: "A Meta-Environment for Generating Programming Environments" author: - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" year: "1989" tags: - "generative programming" - "meta programming" - "meta-model" - "programming" - "Meta-Environment" - "meta-objects" researchr: "https://researchr.org/publication/Klint89" cites: 0 citedby: 0 pages: "105-124" booktitle: "am" kind: "inproceedings" key: "Klint89" - title: "Generating Editors for Embedded Languages. Integrating SGLR into IMP" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" month: "April" abstract: "Integrated Development Environments (IDEs) increase productivity by providing a rich user interface and rapid feedback for a specific language. Creating an editor for a specific language is not a trivial undertaking, and is a cumbersome task even when working with an extensible framework such as Eclipse. A new IBM-guided effort, the IMP framework, relieves the IDE developer from a significant portion of the required work by providing various abstractions for this. For embedded languages, such as embedded regular expressions, SQL queries, or code generation templates, its LALR parser generator falls short, however. Scannerless parsing with SGLR enables concise, modular definition of such languages. In this paper, we present an integration of SGLR into IMP, demonstrating that a scannerless parser can be successfully integrated into an IDE. Given an SDF syntax definition, the sdf2imp tool automatically generates an editor plugin based on the IMP API, complete with syntax checking, syntax highlighting, outline view, and code folding. Using declarative domain-specific languages, these services can be customized, and using the IMP metatooling framework it can be extended with other features. " links: successor: "https://researchr.org/publication/KatsVisser2010" "spoofax homepage": "http://strategoxt.org/Spoofax" "pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-006.pdf" tags: - "rule-based" - "Eclipse" - "syntax definition" - "completeness" - "SDF" - "SQL" - "C++" - "code generation" - "abstraction" - "Spoofax" - "Meta-Environment" - "parsing" - "scannerless parsing" - "extensible language" - "ASF+SDF" - "SGLR" - "query language" - "domain-specific language" researchr: "https://researchr.org/publication/KatsKV08" cites: 0 citedby: 1 booktitle: "LDTA" kind: "inproceedings" key: "KatsKV08" - title: "Grammar Engineering Support for Precedence Rule Recovery and Compatibility Checking" author: - name: "Eric Bouwers" link: "http://www.st.ewi.tudelft.nl/~bouwers/main/" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.046" abstract: "A wide range of parser generators are used to generate parsers for programming languages. The grammar formalisms that come with parser generators provide different approaches for defining operator precedence. Some generators (e.g. YACC) support precedence declarations, others require the grammar to be unambiguous, thus encoding the precedence rules. Even if the grammar formalism provides precedence rules, a particular grammar might not use it. The result is grammar variants implementing the same language. For the C language, the GNU Compiler uses YACC with precedence rules, the C-Transformers uses SDF without priorities, while the SDF library does use priorities. For PHP, Zend uses YACC with precedence rules, whereas PHP-front uses SDF with priority and associativity declarations. The variance between grammars raises the question if the precedence rules of one grammar are compatible with those of another. This is usually not obvious, since some languages have complex precedence rules. Also, for some parser generators the semantics of precedence rules is defined operationally, which makes it hard to reason about their effect on the defined language. We present a method and tool for comparing the precedence rules of different grammars and parser generators. Although it is undecidable whether two grammars define the same language, this tool provides support for comparing and recovering precedence rules, which is especially useful for reliable migration of a grammar from one grammar formalism to another. We evaluate our method by the application to non-trivial mainstream programming languages, such as PHP and C." links: doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.046" tags: - "programming languages" - "semantics" - "rule-based" - "syntax definition" - "YACC" - "precedence rule" - "SDF" - "Stratego/XT" - "language engineering" - "grammar engineering" - "PHP" - "rules" - "C++" - "migration" - "compiler" - "programming" - "operational semantics" - "priority" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "grammar" - "Stratego" researchr: "https://researchr.org/publication/BouwersBV08" cites: 0 citedby: 1 journal: "ENTCS" volume: "203" number: "2" pages: "85-101" kind: "article" key: "BouwersBV08" - title: "A Constraint-based Approach to Name Binding and Type Checking using Scope Graphs" author: - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" year: "2016" month: "January" abstract: "Recently scope graphs were introduced as a formalism to specify the name binding structure of a program and do name resolution independent of the abstract syntax tree of a program. In this thesis we show how to use a constraint language based on scope graphs to do static analysis of programs. We do this by extracting constraints from a program, that specify name binding and typing. We treat binding and typing as separate building blocks, but our approach allows language constructs – such as access of record fields – where name and type resolution are mutually dependent. By using scope graphs for name resolution, our approach supports a wide range of name binding patterns that are not easily supported in existing constraint-based approaches. We present a formal semantics for our constraint language, as well as a solver algorithm, for which we discuss soundness, termination and completeness of the solver. We evaluate our approach by expressing the static semantics of PCF and Featherweight Java with our constraints, and we implemented the solver algorithm, as well as static analysis for both languages, in the Spoofax language workbench." researchr: "https://researchr.org/publication/VanAntwerpen2016" cites: 0 citedby: 0 school: "Delft University of Technology" advisor: - name: "Eelco Visser" link: "http://eelcovisser.org" kind: "mastersthesis" key: "VanAntwerpen2016" - title: "WebDSL: A Case Study in Domain-Specific Language Engineering" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://dx.doi.org/10.1007/978-3-540-88643-3_7" abstract: " The goal of domain-specific languages (DSLs) is to increase the productivity of software engineers by abstracting from low-level boil- erplate code. Introduction of DSLs in the software development process requires a smooth workflow for the production of DSLs themselves. This requires technology for designing and implementing DSLs, but also a methodology for using that technology. That is, a collection of guidelines, design patterns, and reusable DSL components that show developers how to tackle common language design and implementation issues. This paper presents a case study in domain-specific language engineering. It reports on a pro ject in which the author designed and built WebDSL, a DSL for web applications with a rich data model, using several DSLs for DSL engineering: SDF for syntax definition and Stratego/XT for code gener- ation. The paper follows the stages in the development of the DSL. The contributions of the paper are three-fold. (1) A tutorial in the application of the specific SDF and Stratego/XT technology for building DSLs. (2) A description of an incremental DSL development process. (3) A domain- specific language for web-applications with rich data models. The paper concludes with a survey of related approaches. " links: doi: "http://dx.doi.org/10.1007/978-3-540-88643-3_7" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-023.pdf" "webdsl": "http://webdsl.org" "stratego/xt": "http://strategoxt.org" tags: - "WebDSL" - "reusable components" - "DSL engineering" - "web application development" - "data-flow language" - "pattern language" - "case study" - "software components" - "SDF" - "meta-model" - "abstract syntax" - "modeling language" - "Stratego/XT" - "language engineering" - "software language engineering" - "language modeling" - "software component" - "web engineering" - "language design" - "reuse" - "model-driven development" - "data-flow" - "survey" - "software engineering" - "model-driven engineering" - "web applications" - "DSL" - "Meta-Environment" - "incremental" - "design" - "process modeling" - "systematic-approach" - "ASF+SDF" - "language" - "Stratego" - "domain-specific language" researchr: "https://researchr.org/publication/Visser07" cites: 0 citedby: 9 pages: "291-373" booktitle: "GTTSE" kind: "inproceedings" key: "Visser07" - title: "Scoped Dynamic Rewrite Rules" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2001" doi: "https://doi.org/10.1016/S1571-0661(04)00298-1" abstract: "The applicability of term rewriting to program transformation is limited by the lack of control over rule application and by the context-free nature of rewrite rules. The first problem is addressed by languages supporting user-definable rewriting strate- gies. This paper addresses the second problem by extending rewriting strategies with scoped dynamic rewrite rules. Dynamic rules are generated at run-time and can access variables available from their definition context. Rules generated within a rule scope are automatically retracted at the end of that scope. The technique is illustrated by means of several program tranformations: bound variable renaming, function inlining, and dead function elimination. " links: doi: "https://doi.org/10.1016/S1571-0661(04)00298-1" successor: "https://researchr.org/publication/BravenboerDOV06" tags: - "programming languages" - "rule-based" - "graph transformation" - "dynamic rewrite rules" - "Stratego/XT" - "transformation language" - "term rewriting" - "graph-rewriting" - "rules" - "context-aware" - "access control" - "rewriting" - "role-based access control" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser01-DR" cites: 0 citedby: 0 journal: "ENTCS" volume: "59" number: "4" pages: "375-396" kind: "article" key: "Visser01-DR" - title: "Separation of Concerns and Linguistic Integration in WebDSL" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Zef Hemel" link: "http://zef.me" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://dx.doi.org/10.1109/MS.2010.92" abstract: "WebDSL is a domain-specific language for Web information systems that maintains separation of concerns while integrating its sublanguages, enabling consistency checking and reusing common language concepts." links: doi: "http://dx.doi.org/10.1109/MS.2010.92" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/software/GroenewegenHV10" tags: - "WebDSL" - "separation of concerns" researchr: "https://researchr.org/publication/GroenewegenHV10" cites: 0 citedby: 0 journal: "IEEE Software" volume: "27" number: "5" pages: "31-37" kind: "article" key: "GroenewegenHV10" - title: "FlowSpec: declarative dataflow analysis specification" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "http://doi.acm.org/10.1145/3136014.3136029" abstract: "We present FlowSpec, a declarative specification language for the domain of dataflow analysis. FlowSpec has declarative support for the specification of control flow graphs of programming languages, and dataflow analyses on these control flow graphs. We define the formal semantics of FlowSpec, which is rooted in Monotone Frameworks. We also discuss a prototype implementation of the language, built in the Spoofax Language Workbench. Finally, we evaluate the expressiveness and conciseness of the language with two case studies. These case studies are analyses for Green-Marl, an industrial, domain-specific language for graph processing. The first case study is a classical dataflow analysis, scaled to this full language. The second case study is a domain-specific analysis of Green-Marl. " links: doi: "http://doi.acm.org/10.1145/3136014.3136029" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/SmitsV17" successor: "https://researchr.org/publication/SmitsWV20" researchr: "https://researchr.org/publication/SmitsV17" cites: 0 citedby: 0 pages: "221-231" booktitle: "SLE" kind: "inproceedings" key: "SmitsV17" - title: "WebDSL: a domain-specific language for dynamic web applications" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Zef Hemel" link: "http://zef.me" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://doi.acm.org/10.1145/1449814.1449858" abstract: "WebDSL is a domain-specific language for the implementation of dynamic web applications with a rich datamodel. It consists of a core language with constructs to define entities, pages and business logic. Higher-level abstractions, modeling access control and workflow, are defined in a modular fashion as extensions of the core language." links: doi: "http://doi.acm.org/10.1145/1449814.1449858" tags: - "WebDSL" - "meta-model" - "modeling language" - "modeling" - "language engineering" - "language modeling" - "web engineering" - "model-driven engineering" - "C++" - "web applications" - "DSL" - "logic" - "abstraction" - "Meta-Environment" - "access control" - "workflow" - "domain-specific language" researchr: "https://researchr.org/publication/GroenewegenHKV08" cites: 0 citedby: 0 pages: "779-780" booktitle: "OOPSLA" kind: "inproceedings" key: "GroenewegenHKV08" - title: "IceDust: Incremental and Eventual Computation of Derived Values in Persistent Object Graphs" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "http://dx.doi.org/10.4230/LIPIcs.ECOOP.2016.11" abstract: "Derived values are values calculated from base values. They can be expressed in object-oriented languages by means of getters calculating the derived value, and in relational or logic databases by means of (materialized) views. However, switching to a different calculation strategy (for example caching) in object-oriented programming requires invasive code changes, and the databases limit expressiveness by disallowing recursive aggregation. In this paper, we present IceDust, a data modeling language for expressing derived attribute values without committing to a calculation strategy. IceDust provides three strategies for calculating derived values in persistent object graphs: Calculate-on-Read, Calculate-on-Write, and Calculate-Eventually. We have developed a path-based abstract interpretation that provides static dependency analysis to generate code for these strategies. Benchmarks show that different strategies perform better in different scenarios. In addition we have conducted a case study that suggests that derived value calculations of systems used in practice can be expressed in IceDust. " links: doi: "http://dx.doi.org/10.4230/LIPIcs.ECOOP.2016.11" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/HarkesGV16" researchr: "https://researchr.org/publication/HarkesGV16" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "HarkesGV16" - title: "A Theory of Name Resolution" author: - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2015" doi: "http://dx.doi.org/10.1007/978-3-662-46669-8_9" abstract: "We describe a language-independent theory for name binding and resolution, suitable for programming languages with complex scoping rules including both lexical scoping and modules. We formulate name resolution as a two-stage problem. First a language-independent scope graph is constructed using language-specific rules from an abstract syntax tree. Then references in the scope graph are resolved to corresponding declarations using a language-independent resolution process. We introduce a resolution calculus as a concise, declarative, and languageindependent specification of name resolution. We develop a resolution algorithm that is sound and complete with respect to the calculus. Based on the resolution calculus we develop language-independent definitions of α-equivalence and rename refactoring. We illustrate the approach using a small example language with modules. In addition, we show how our approach provides a model for a range of name binding patterns in existing languages." links: doi: "http://dx.doi.org/10.1007/978-3-662-46669-8_9" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/esop/NeronTVW15" technicalreport: "https://researchr.org/publication/TUD-SERG-2015-001" researchr: "https://researchr.org/publication/NeronTVW15" cites: 0 citedby: 0 pages: "205-231" booktitle: "ESOP" kind: "inproceedings" key: "NeronTVW15" - title: "A language generic solution for name binding preservation in refactorings" author: - name: "Maartje de Jonge" link: "https://researchr.org/profile/maartjedejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "http://doi.acm.org/10.1145/2427048.2427050" abstract: "The implementation of refactorings for new languages requires considerable effort from the language developer. We aim at reducing that effort by using language generic techniques. This paper focuses on behavior preservation, in particular the preservation of static name bindings. To detect name binding violations, we implement a technique that reuses the name analysis defined in the compiler front end. Some languages offer the possibility to access variables using qualified names. As a refinement to violation detection, we show that name analysis can be defined as a reusable traversal strategy that can be applied to restore name bindings by creating qualified names. These techniques offer an efficient and reliable solution; the semantics of the language is implemented only once, with the compiler being the single source of truth. We evaluate our approach by implementing a language generic rename refactoring, which we apply to two domain specific languages and a subset of the Java language." links: doi: "http://doi.acm.org/10.1145/2427048.2427050" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ldta/JongeV12" researchr: "https://researchr.org/publication/JongeV12-LDTA" cites: 0 citedby: 0 pages: "2" booktitle: "LDTA" kind: "inproceedings" key: "JongeV12-LDTA" - title: "Rewriting Strategies for Instruction Selection" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1007/3-540-45610-4_17" abstract: "Instruction selection (mapping IR trees to machine instructions) can be expressed by means of rewrite rules. Typically, such sets of rewrite rules are highly ambiguous. Therefore, standard rewriting engines based on fixed, exhaustive strategies are not appropriate for the execution of instruction selection. Code generator generators use special purpose implementations employing dynamic programming. In this paper we show how rewriting strategies for instruction selection can be encoded concisely in Stratego, a language for program transformation based on the paradigm of programmable rewriting strategies. This embedding obviates the need for a language dedicated to code generation, and makes it easy to combine code generation with other optimizations. " links: doi: "https://doi.org/10.1007/3-540-45610-4_17" tags: - "programming languages" - "optimization" - "rule-based" - "graph transformation" - "Stratego/XT" - "instruction selection" - "transformation language" - "term rewriting" - "graph-rewriting" - "rules" - "programming paradigms" - "code generation" - "programming" - "program optimization" - "rewriting" - "compilers" - "compilation" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerV02" cites: 0 citedby: 0 pages: "237-251" booktitle: "RTA" kind: "inproceedings" key: "BravenboerV02" - title: "Static consistency checking of web applications with WebDSL" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "https://doi.org/10.1016/j.jsc.2010.08.006" abstract: "Modern web application development frameworks provide web application developers with high-level abstractions to improve their productivity. However, their support for static verification of applications is limited. Inconsistencies in an application are often not detected statically, but appear as errors at run-time. The reports about these errors are often obscure and hard to trace back to the source of the inconsistency. A major part of this inadequate consistency checking can be traced back to the lack of linguistic integration of these frameworks. Parts of an application are defined with separate domain-specific languages, which are not checked for consistency with the rest of the application. Examples include regular expressions, query languages and XML-based languages for definition of user interfaces. We give an overview and analysis of typical problems arising in development with frameworks for web application development, with Ruby on Rails, Lift and Seam as representatives. To remedy these problems, in this paper, we argue that domain-specific languages should be designed from the ground up with static verification and cross-aspect consistency checking in mind, providing linguistic integration of domain-specific sub-languages. We show how this approach is applied in the design of WebDSL, a domain-specific language for web applications, by examining how its compiler detects inconsistencies not caught by web frameworks, providing accurate and clear error messages. Furthermore, we show how this consistency analysis can be expressed with a declarative rule-based approach using the Stratego transformation language." links: doi: "https://doi.org/10.1016/j.jsc.2010.08.006" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/jsc/HemelGKV11" "technical report ": "http://resolver.tudelft.nl/uuid:588b78a1-f8d8-45fc-855f-fd03699725cf" "jsc": "https://doi.org/10.1016/j.jsc.2010.08.006" tags: - "model-to-model transformation" - "WebDSL" - "rule-based" - "application framework" - "model checking" - "XML" - "XML Schema" - "transformation language" - "points-to analysis" - "domain analysis" - "analysis" - "language design" - "static analysis" - "model-driven development" - "source-to-source" - "rules" - "C++" - "compiler" - "model transformation" - "web applications" - "consistency" - "abstraction" - "design" - "systematic-approach" - "open-source" - "transformation" - "Ruby on Rails" - "Stratego" - "Ruby" - "query language" - "domain-specific language" researchr: "https://researchr.org/publication/HemelGKV11" cites: 0 citedby: 0 journal: "JSC" volume: "46" number: "2" pages: "150-182" kind: "article" key: "HemelGKV11" - title: "Specializing a meta-interpreter: JIT compilation of Dynsem specifications on the Graal VM" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3237009.3237018" abstract: " DynSem is a domain-specific language for concise specification of the dynamic semantics of programming languages, aimed at rapid experimentation and evolution of language designs. DynSem specifications can be executed to interpret programs in the language under development. To enable fast turnaround during language development, we have developed a meta-interpreter for DynSem specifications, which requires minimal processing of the specification. In addition to fast development time, we also aim to achieve fast run times for interpreted programs. In this paper we present the design of a meta-interpreter for DynSem and report on experiments with JIT compiling the application of the meta-interpreter on the Graal VM. By interpreting specifications directly, we have minimal compilation overhead. By specializing pattern matches, maintaining call-site dispatch chains and using native control-flow constructs we gain significant run-time performance. We evaluate the performance of the meta-interpreter when applied to the Tiger language specification running a set of common benchmark programs. Specialization enables the Graal VM to JIT compile the meta-interpreter giving speedups of up to factor 15 over running on the standard Oracle Java VM. " links: doi: "https://doi.org/10.1145/3237009.3237018" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/pppj/VerguV18" researchr: "https://researchr.org/publication/VerguV18" cites: 0 citedby: 0 booktitle: "PPPJ" kind: "inproceedings" key: "VerguV18" - title: "Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.22152/programming-journal.org/2020/4/16" abstract: "Context: Compilation time is an important factor in the adaptability of a software project. Fast recompilation enables cheap experimentation with changes to a project, as those changes can be tested quickly. Separate and incremental compilation has been a topic of interest for a long time to facilitate fast recompilation. Inquiry: Despite the benefits of an incremental compiler, such compilers are usually not the default. This is because incrementalization requires cross-cutting, complicated, and error-prone techniques such as dependency tracking, caching, cache invalidation, and change detection. Especially in compilers for languages with cross-module definitions and integration, correctly and efficiently implementing an incremental compiler can be a challenge. Retrofitting incrementality into a compiler is even harder. We address this problem by developing a compiler design approach that reuses parts of an existing non-incremental compiler to lower the cost of building an incremental compiler. It also gives an intuition into compiling difficult-to-incrementalize language features through staging. Approach: We use the compiler design approach presented in this paper to develop an incremental com- piler for the Stratego term-rewriting language. This language has a set of features that at first glance look incompatible with incremental compilation. Therefore, we treat Stratego as our critical case to demonstrate the approach on. We show how this approach decomposes the original compiler and has a solution to com- pile Stratego incrementally. The key idea on which we build our incremental compiler is to internally use an incremental build system to wire together the components we extract from the original compiler. Knowledge: The resulting compiler is already in use as a replacement of the original whole-program compiler. We find that the incremental build system inside the compiler is a crucial component of our approach. This allows a compiler writer to think in multiple steps of compilation, and combine that into a incremental compiler almost effortlessly. Normally, separate compilation à la C is facilitated by an external build system, where the programmer is responsible for managing dependencies between files. We reuse an existing sound and optimal incremental build system, and integrate its dependency tracking into the compiler. Grounding: The incremental compiler for Stratego is available as an artefact along with this article. We evaluate it on a large Stratego project to test its performance. The benchmark replays edits to the Stratego project from version control. These benchmarks are part of the artefact, packaged as a virtual machine image for easy reproducibility. Importance: Although we demonstrate our design approach on the Stratego programming language, we also describe it generally throughout this paper. Many currently used programming languages have a compiler that is much slower than necessary. Our design provides an approach to change this, by reusing an existing compiler and making it incremental within a reasonable amount of time." links: doi: "https://doi.org/10.22152/programming-journal.org/2020/4/16" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/programming/SmitsKV20" researchr: "https://researchr.org/publication/SmitsKV20" cites: 0 citedby: 0 journal: "Programming" volume: "4" number: "3" pages: "16" kind: "article" key: "SmitsKV20" - title: "Natural and Flexible Error Recovery for Generated Parsers" author: - name: "Maartje de Jonge" link: "https://researchr.org/profile/maartjedejonge/publications" - name: "Emma Nilsson-Nyman" link: "http://www.cs.lth.se/home/Emma.Nilsson_Nyman/" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2009" doi: "http://dx.doi.org/10.1007/978-3-642-12107-4_16" abstract: "Parser generators are an indispensable tool for rapid language development. However, they often fall short of the finesse of a hand-crafted parser, built with the language semantics in mind. One area where generated parsers have provided unsatisfactory results is that of error recovery. Good error recovery is both natural, giving recovery suggestions in line with the intention of the programmer; and flexible, allowing it to be adapted according to language insights and language changes. This paper describes a novel approach to error recovery, taking into account not only the context-free grammar, but also indentation usage. We base our approach on an extension of the SGLR parser that supports fine-grained error recovery rules and can be used to parse complex, composed languages. We take a divide-and-conquer approach to error recovery: using indentation, erroneous regions of code are identified. These regions constrain the search space for applying recovery rules, improving performance and ensuring recovery suggestions local to the error. As a last resort, erroneous regions can be discarded. Our approach also integrates bridge parsing to provide more accurate suggestions for indentation-sensitive language constructs such as scopes. We evaluate our approach by comparison with the JDT Java parser used in Eclipse. " links: doi: "http://dx.doi.org/10.1007/978-3-642-12107-4_16" successor: "https://researchr.org/publication/JongeKVS12" tags: - "semantics" - "rule-based" - "Java" - "Eclipse" - "rules" - "C++" - "search suggestions" - "context-aware" - "search" - "parsing" - "error recovery" - "systematic-approach" - "SGLR" - "grammar" researchr: "https://researchr.org/publication/JongeNKV09" cites: 0 citedby: 0 pages: "204-223" booktitle: "SLE" kind: "inproceedings" key: "JongeNKV09" - title: "Declarative Syntax Definition for Modern Language Workbenches" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" year: "2019" doi: "https://www.base-search.net/Record/261b6c9463c1d4fe309e3c6104cd4d80fbc9d3cc8fbc66006f34130f481b506f" links: doi: "https://www.base-search.net/Record/261b6c9463c1d4fe309e3c6104cd4d80fbc9d3cc8fbc66006f34130f481b506f" dblp: "http://dblp.uni-trier.de/rec/bibtex/phd/basesearch/Amorim19" researchr: "https://researchr.org/publication/Amorim2019" cites: 0 citedby: 0 school: "Delft University of Technology, Netherlands" advisor: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" kind: "phdthesis" key: "Amorim2019" - title: "Fusing a Transformation Language with an Open Compiler" author: - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.042" abstract: "Program transformation systems provide powerful analysis and transformation frameworks as well as concise languages for language processing, but instantiating them for every subject language is an arduous task, most often resulting in half-completed frontends. Compilers provide mature frontends with robust parsers and type checkers, but solving language processing problems in general-purpose languages without transformation libraries is tedious. Reusing these frontends with existing transformation systems is therefore attractive. However, for this reuse to be optimal, the functional logic found in the frontend should be exposed to the transformation system – simple data serialization of the abstract syntax tree is not enough, since this fails to expose important compiler functionality, such as import graphs, symbol tables and the type checker. In this paper, we introduce a novel and general technique for combining term-based transformation systems with existing language frontends. The technique is presented in the context of a scriptable analysis and transformation framework for Java built on top of the Eclipse Java compiler. The framework consists of an adapter automatically extracted from the abstract syntax tree of the compiler and an interpreter for the Stratego program transformation language. The adapter allows the Stratego interpreter to rewrite directly on the compiler AST. We illustrate the applicability of our system with scripts written in Stratego that perform framework and library-specific analyses and transformations." links: doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.042" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2007-025.pdf" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "rule-based" - "Java" - "program analysis" - "Eclipse" - "completeness" - "data-flow language" - "graph transformation" - "interpreter" - "abstract syntax" - "Stratego/XT" - "transformation language" - "term rewriting" - "functional programming" - "Eclipse Java Compiler" - "points-to analysis" - "domain analysis" - "analysis" - "type system" - "reuse" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "logic programming" - "transformation system" - "compiler" - "model transformation" - "open compiler" - "subject-oriented programming" - "context-aware" - "logic" - "Spoofax" - "rewriting logic" - "rewriting" - "data-flow analysis" - "parsing" - "feature-oriented programming" - "open-source" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/KallebergV08" cites: 0 citedby: 1 journal: "ENTCS" volume: "203" number: "2" pages: "21-36" kind: "article" key: "KallebergV08" - title: "Bootstrapping Domain-Specific Meta-Languages in Language Workbenches" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "http://doi.acm.org/10.1145/2993236.2993242" abstract: " It is common practice to bootstrap compilers of programming languages. By using the compiled language to implement the compiler, compiler developers can code in their own high-level language and gain a large-scale test case. In this paper, we investigate bootstrapping of compiler-compilers as they occur in language workbenches. Language workbenches support the development of compilers through the application of multiple collaborating domain-specific meta-languages for defining a language's syntax, analysis, code generation, and editor support. We analyze the bootstrapping problem of language workbenches in detail, propose a method for sound bootstrapping based on fixpoint compilation, and show how to conduct breaking meta-language changes in a bootstrapped language workbench. We have applied sound bootstrapping to the Spoofax language workbench and report on our experience. " links: doi: "http://doi.acm.org/10.1145/2993236.2993242" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/gpce/KonatEV16" researchr: "https://researchr.org/publication/KonatEV16" cites: 0 citedby: 0 pages: "47-58" booktitle: "GPCE" kind: "inproceedings" key: "KonatEV16" - title: "DynSem: A DSL for Dynamic Semantics Specification" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2015" doi: "http://dx.doi.org/10.4230/LIPIcs.RTA.2015.365" abstract: "The formal semantics of a programming language and its implementation are typically separately defined, with the risk of divergence such that properties of the formal semantics are not properties of the implementation. In this paper, we present DynSem, a domain-specific language for the specification of the dynamic semantics of programming languages that aims at supporting both formal reasoning and efficient interpretation. DynSem supports the specification of the operational semantics of a language by means of statically typed conditional term reduction rules. DynSem supports concise specification of reduction rules by providing implicit build and match coercions based on reduction arrows and implicit term constructors. DynSem supports modular specification by adopting implicit propagation of semantic components from I-MSOS, which allows omitting propagation of components such as environments and stores from rules that do not affect those. DynSem supports the declaration of native operators for delegation of aspects of the semantics to an external definition or implementation. DynSem supports the definition of auxiliary meta-functions, which can be expressed using regular reduction rules and are subject to semantic component propagation. DynSem specifications are executable through automatic generation of a Java-based AST interpreter. " links: doi: "http://dx.doi.org/10.4230/LIPIcs.RTA.2015.365" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/rta/VerguNV15" "techreport": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2015-003.pdf" researchr: "https://researchr.org/publication/VerguNV15" cites: 0 citedby: 0 pages: "365-378" booktitle: "RTA" kind: "inproceedings" key: "VerguNV15" - title: "Character Classes" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "August" abstract: "Character classes are used in syntax definition formalisms as compact representations of sets of characters. A character class is a list of characters and ranges of characters. For instance [A-Z0-9] describes the set containing all uppercase characters and all digits. One set of characters can be represented in many ways with character classes. In this paper an algebraic specification of character classes is presented. We define a normalization of character classes that results in unique, most compact normal forms such that equality of character classes becomes syntactic equality of their normal forms." links: "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/P9708.ps" tags: - "syntax definition" - "SDF" - "term rewriting" - "character class" - "graph-rewriting" - "algebraic specification" - " algebra" - "rewriting" - "ASF+SDF" researchr: "https://researchr.org/publication/Visser97-CC" cites: 0 citedby: 0 institution: "Programming Research Group, University of Amsterdam" number: "P9708" kind: "techreport" key: "Visser97-CC" - title: "Testing domain-specific languages" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2048147.2048160" abstract: "The Spoofax testing language provides a new approach to testing domain-specific languages as they are developed. It allows test cases to be written using fragments of the language under test, providing full IDE support for writing test cases and supporting tests for language syntax, semantics, and editor services." links: doi: "http://doi.acm.org/10.1145/2048147.2048160" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/KatsVV11a" researchr: "https://researchr.org/publication/KatsVV11a" cites: 0 citedby: 0 pages: "25-26" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsVV11a" - title: "An Algorithm for Layout Preservation in Refactoring Transformations" author: - name: "Maartje de Jonge" link: "https://researchr.org/profile/maartjedejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://dx.doi.org/10.1007/978-3-642-28830-2_3" abstract: "Transformations and semantic analysis for source-to-source transformations such as refactorings are most effectively implemented using an abstract representation of the source code. An intrinsic limitation of transformation techniques based on abstract syntax trees is the loss of layout, i.e. comments and whitespace. This is especially relevant in the context of refactorings, which produce source code for human consumption. In this paper, we present an algorithm for fully automatic source code reconstruction for source-to-source transformations. The algorithm preserves the layout and comments of the unaffected parts and reconstructs the indentation of the affected parts, using a set of clearly defined heuristic rules to handle comments." links: doi: "http://dx.doi.org/10.1007/978-3-642-28830-2_3" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/JongeV11" technicalreport: "https://researchr.org/publication/DeJongeVisser2012-TUD-SERG-2011-027" researchr: "https://researchr.org/publication/JongeV11" cites: 0 citedby: 0 pages: "40-59" booktitle: "SLE" kind: "inproceedings" key: "JongeV11" - title: "Principled syntactic code completion using placeholders" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "http://dx.doi.org/10.1145/2997364.2997374" abstract: "Principled syntactic code completion enables developers to change source code by inserting code templates, thus increasing developer efficiency and supporting language exploration. However, existing code completion systems are ad-hoc and neither complete nor sound. They are not complete and only provide few code templates for selected programming languages. They also are not sound and propose code templates that yield invalid programs when inserted.This paper presents a generic framework that automatically derives complete and sound syntactic code completion from the syntax definition of arbitrary languages. A key insight of our work is to provide an explicit syntactic representation for incomplete programs using placeholders. This enables us to address the following challenges for code completion separately: (i) completing incomplete programs by replacing placeholders with code templates, (ii) injecting placeholders into complete programs to make them incomplete, and (iii) introducing lexemes and placeholders into incorrect programs through error-recovery parsing to make them correct so we can apply one of the previous strategies. We formalize our framework and provide an implementation in the Spoofax Language Workbench. " links: doi: "http://dx.doi.org/10.1145/2997364.2997374" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/AmorimEWV16" researchr: "https://researchr.org/publication/AmorimEWV16" cites: 0 citedby: 0 pages: "163-175" booktitle: "SLE" kind: "inproceedings" key: "AmorimEWV16" - title: "Natural and Flexible Error Recovery for Generated Modular Language Environments" author: - name: "Maartje de Jonge" link: "https://researchr.org/profile/maartjedejonge/publications" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Emma Söderberg" link: "https://researchr.org/alias/emma-s%C3%B6derberg" year: "2012" doi: "http://doi.acm.org/10.1145/2400676.2400678" abstract: "Integrated development environments (IDEs) increase programmer productivity, providing rapid, interactive feedback based on the syntax and semantics of a language. Unlike conventional parsing algorithms, scannerless generalized-LR parsing supports the full set of context-free grammars, which is closed under composition, and hence can parse languages composed from separate grammar modules. To apply this algorithm in an interactive environment, this paper introduces a novel error recovery mechanism. Our approach is language-independent, and relies on automatic derivation of recovery rules from grammars. By taking layout information into consideration it can efficiently suggest natural recovery suggestions." links: doi: "http://doi.acm.org/10.1145/2400676.2400678" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/toplas/JongeKVS12" researchr: "https://researchr.org/publication/JongeKVS12" cites: 0 citedby: 0 journal: "TOPLAS" volume: "34" number: "4" pages: "15" kind: "article" key: "JongeKVS12" - title: "Declarative, formal, and extensible syntax definition for AspectJ" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Éric Tanter" link: "http://pleiad.dcc.uchile.cl/people/etanter" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://doi.acm.org/10.1145/1167473.1167491" abstract: " Aspect-Oriented Programming (AOP) is attracting attention from both research and industry, as illustrated by the ever-growing popularity of AspectJ, the de facto standard AOP extension of Java. From a compiler construction perspective AspectJ is interesting as it is a typical example of compositional language, ie a language composed of a number of separate languages with different syntactical styles: in addition to plain Java, AspectJ includes a language for defining pointcuts and one for defining advices. Language composition represents a non-trivial challenge for conventional parsing techniques. First, combining several languages with different lexical syntax leads to considerable complexity in the lexical states to processed. Second, as new language features for AOP are being explored, many research proposals are concerned with further extending the AspectJ language, resulting in a need for an extensible syntax definition.This paper shows how scannerless parsing elegantly addresses the issues encountered by conventional techniques when parsing AspectJ . We present the design of a modular, extensible, and formal definition of the lexical and context-free aspects of the AspectJ syntax in the Syntax Definition Formalism SDF, which is implemented by a scannerless, generalized-LR parser (SGLR). We introduce grammar mixins as a novel application of SDF's modularity features, which allows the declarative definition of different keyword policies and combination of extensions. We illustrate the modular extensibility of our definition with syntax extensions taken from current research on aspect languages. Finally, benchmarks show the reasonable performance of scannerless generalized-LR parsing for this grammar. " links: doi: "http://doi.acm.org/10.1145/1167473.1167491" tags: - "programming languages" - "AspectJ" - "object-oriented programming" - "Java" - "syntax definition" - "SDF" - "lexical syntax" - "design complexity" - "composition" - "design research" - "language design" - "aspect oriented programming" - "compiler" - "programming" - "subject-oriented programming" - "context-aware" - "language composition" - "parsing" - "design" - "scannerless parsing" - "extensible language" - "ASF+SDF" - "feature-oriented programming" - "SGLR" - "grammar" researchr: "https://researchr.org/publication/BravenboerTV06" cites: 0 citedby: 1 pages: "209-228" booktitle: "OOPSLA" kind: "inproceedings" key: "BravenboerTV06" - title: "Language Independent Traversals for Program Transformation" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2000" month: "July" abstract: "Many language processing operations have a generic underlying algorithm. However, these generic algorithms either have to be implemented specifically for the language under consideration or the language needs to be encoded in a generic format that the generic algorithm works on. Stratego is a language for program transformation that supports both specific and generic views of data types. A Stratego program defines a transformation on first-order ground terms. Transformation rules define single transformation steps. Transformation rules are combined into transformation \\emph{strategies} by means of combinators that determine where and in what order rules are applied. These combinators include: primitives for traversal to the direct subterms of a node, allowing the definition of many kinds of full term traversals; full control over recursion in traversals; patterns as first-class citizens; generic term construction and deconstruction. These features create a setting in which it is possible to combine generic traversal with data type specific pattern matching, and separating logic (transformation, pattern matching) from control (traversal). This makes it possible to give language independent descriptions of language processing operations that can be instantiated to a specific language by providing the patterns of the relevant constructs. These generic algorithms only touch relevant constructors and do not need to know the entire datatype, making the algorithms insensitive to changes in the abstract syntax that do not affect the constructors relevant to the operation. Stratego is currently implemented by compilation to C code. All constructs of the language are implemented directly, i.e., the compiled program is as large as the specification, in contrast to approaches that rely on preprocessing or program generation which may have a scaling problem when dealing with large languages. The approach to generic programming in Stratego is illustrated by means of several examples including free variable extraction, bound variable renaming, substitution and syntactic unification." links: technicalreport: "https://researchr.org/publication/preprint-Vis00" tags: - "programming languages" - "rule-based" - "syntax definition" - "data-flow language" - "pattern language" - "generic programming" - "abstract syntax" - "traversal" - "transformation language" - "data-flow programming" - "data-flow" - "rules" - "C++" - "pattern matching" - "code generation" - "logic programming" - "compiler" - "programming" - "logic" - "higher-order transformations" - "systematic-approach" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/Visser00" cites: 0 citedby: 0 booktitle: "Workshop on Generic Programming (WGP 2000)" kind: "inproceedings" key: "Visser00" - title: "The syntax definition formalism SDF - reference manual" author: - name: "Jan Heering" link: "http://homepages.cwi.nl/~jan/" - name: "P. R. H. Hendriks" link: "https://researchr.org/alias/p.-r.-h.-hendriks" - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" - name: "Jan Rekers" link: "http://www.cwi.nl" year: "1989" doi: "http://doi.acm.org/10.1145/71605.71607" abstract: "SDF is a formalism for the definition of syntax which is comparable to BNF in some respects, but has a wider scope in that it also covers the definition of lexical and abstract syntax. Its design and implementation are tailored towards the language designer who wants to develop new languages as well as implement existing ones in a highly interactive manner. It emphasizes compactness of syntax definitions by offering (a) a standard interface between lexical and context-free syntax; (b) a standard correspondence between context-free and abstract syntax; (c) powerful disambiguation and list constructs; and (d) an efficient incremental implementation which accepts arbitrary context-free syntax definitions. SDF can be combined with a variety of programming and specification languages. In this way these obtain fully general user-definable syntax. " links: doi: "http://doi.acm.org/10.1145/71605.71607" tags: - "programming languages" - "syntax definition" - "SDF" - "lexical syntax" - "abstract syntax" - "disambiguation" - "language design" - "C++" - "programming" - "context-aware" - "incremental" - "design" - "ASF+SDF" researchr: "https://researchr.org/publication/HeeringHKR89" cites: 0 citedby: 4 journal: "SIGPLAN" volume: "24" number: "11" pages: "43-75" kind: "article" key: "HeeringHKR89" - title: "Spoofax: An Interactive Development Environment for Program Transformation with Stratego/XT" author: - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" month: "March" links: "url": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2007-018.pdf" tags: - "model-to-model transformation" - "meta programming" - "meta-model" - "model-driven development" - "model transformation" - "Spoofax" - "Meta-Environment" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/KallebergV07" cites: 0 citedby: 0 booktitle: "Proceedings of the Seventh Workshop on Language Descriptions, Tools and Applications (LDTA 2007)" kind: "inproceedings" key: "KallebergV07" - title: "Separation of concerns in language definition" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://doi.acm.org/10.1145/2584469.2584662" abstract: "Effectively applying linguistic abstraction to emerging domains of computation requires the ability to rapidly develop software languages. However, a software language is a complex software system in its own right and can take significant effort to design and implement. We are currently investigating a radical separation of concerns in language definition by designing high-level declarative meta-languages specialized to the various concerns of language definition that can be used as the single source of production quality (incremental) semantic operations and as a model for reasoning about language properties." links: doi: "http://doi.acm.org/10.1145/2584469.2584662" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/aosd/Visser14" researchr: "https://researchr.org/publication/VisserModularity14" cites: 0 citedby: 0 pages: "1-2" booktitle: "AOSD" kind: "inproceedings" key: "VisserModularity14" - title: "Layout-Sensitive Generalized Parsing" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Tillmann Rendel" link: "https://researchr.org/alias/tillmann-rendel" - name: "Christian Kästner" link: "https://researchr.org/alias/christian-k%C3%A4stner" - name: "Klaus Ostermann" link: "https://researchr.org/alias/klaus-ostermann" year: "2012" doi: "http://dx.doi.org/10.1007/978-3-642-36089-3_14" links: doi: "http://dx.doi.org/10.1007/978-3-642-36089-3_14" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/ErdwegRKO12" researchr: "https://researchr.org/publication/ErdwegRKO12" cites: 0 citedby: 0 pages: "244-263" booktitle: "SLE" kind: "inproceedings" key: "ErdwegRKO12" - title: "Safety and Completeness of Disambiguation corresponds to Termination and Confluence of Reordering" author: - name: "Luí­s Eduardo Amorim de Souza" link: "https://researchr.org/alias/lu%C3%AD%C2%ADs-eduardo-amorim-de-souza" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" month: "June" abstract: "Associativity and priority are well known techniques to disambiguate expression grammars. In recent work we develop a direct semantics for disambiguation by associativity and priority rules and prove that a safe and complete disambiguation relation produces a safe and complete disambiguation. The proof approach relies on a correspondence between disambiguation and term rewriting such that safety of disambiguation corresponds to termination of the rewrite system and completeness of disambiguation correspond to confluence of the rewrite system. In this extended abstract we illustrate that approach using diagrams." researchr: "https://researchr.org/publication/AmorimV20-IWC" cites: 0 citedby: 0 kind: "misc" key: "AmorimV20-IWC" - title: "The semantics of name resolution in grace" author: - name: "Vlad A. Vergu" link: "https://researchr.org/alias/vlad-a.-vergu" - name: "Michiel Haisma" link: "https://researchr.org/alias/michiel-haisma" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "https://doi.org/10.1145/3133841.3133847" abstract: "Grace is a dynamic object oriented programming language designed to aid programming education. We present a formal model of and give an operational semantics for its object model and name resolution algorithm. Our main contributions are a systematic model of Grace’s name resolution using scope graphs, relating linguistic features to other languages, and an operationalization of this model in the form of an operational semantics which is readable and executable. The semantics are extensively tested against a reference Grace implementation. " links: doi: "https://doi.org/10.1145/3133841.3133847" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/dls/VerguHV17" technicalreport: "https://researchr.org/publication/TUD-SERG-2017-011" researchr: "https://researchr.org/publication/VerguHV17" cites: 0 citedby: 0 pages: "63-74" booktitle: "DLS" kind: "inproceedings" key: "VerguHV17" - title: "IceDust Calculation Strategy Composition Performance in Web Applications" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" researchr: "https://researchr.org/publication/HarkesV17-IC" cites: 0 citedby: 0 kind: "misc" key: "HarkesV17-IC" - title: "A Case Study in Optimizing Parsing Schemata by Disambiguation Filters" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "September" abstract: "Disambiguation methods for context-free grammars enable concise specification of programming languages by ambiguous grammars. A disambiguation filter is a function that selects a subset from a set of parse trees---the possible parse trees for an ambiguous sentence. The framework of filters provides a declarative description of disambiguation methods independent of parsing. Although filters can be implemented straightforwardly as functions that prune the parse forest produced by some generalized, this can be too inefficient for practical applications. In this paper the optimization of parsing schemata, a framework for high-level description of parsing algorithms, by disambiguation filters is considered in order to find efficient parsing algorithms for declaratively specified disambiguation methods. As a case study the optimization of the parsing schema of Earley's parsing algorithm by two filters is investigated. The main result is a technique for generation of efficient LR-like parsers for ambiguous grammars modulo priorities." tags: - "parsing algorithm" - "programming languages" - "optimization" - "application framework" - "case study" - "XML" - "XML Schema" - "disambiguation" - "context-aware" - "program optimization" - "parsing" - "grammar" researchr: "https://researchr.org/publication/Visser97-IWPT" cites: 0 citedby: 0 pages: "210-224" booktitle: "International Workshop on Parsing Technology (IWPT 1997)" kind: "inproceedings" key: "Visser97-IWPT" - title: "Mobl: the new language of the mobile web" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2048147.2048159" abstract: "Mobl is a new language designed to declaratively construct mobile web applications. Mobl integrates languages for user interface design, styling, data modeling, querying and application logic into a single, unified language that is flexible, expressive, enables early detection of errors, and has good IDE support." links: doi: "http://doi.acm.org/10.1145/2048147.2048159" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/HemelV11a" researchr: "https://researchr.org/publication/HemelV11a" cites: 0 citedby: 0 pages: "23-24" booktitle: "OOPSLA" kind: "inproceedings" key: "HemelV11a" - title: "Fast and Safe Linguistic Abstraction for the Masses" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" month: "July" doi: "http://eelcovisser.org/blog/2019/09/29/fast-and-safe-linguistic-abstraction-for-the-masses/" abstract: "Language workbenches support the high-level definition of (domain-specific) programming languages and the automatic derivation of implementations from such definitions. The mission of language workbench research is to increase the level of abstraction of language definitions and expand the range of tools that can be generated automatically from language definitions. In this note, I give an overview of research into language workbenches at TU Delft and the perspective of future research." links: doi: "http://eelcovisser.org/blog/2019/09/29/fast-and-safe-linguistic-abstraction-for-the-masses/" researchr: "https://researchr.org/publication/Visser19-0" cites: 0 citedby: 0 pages: "10-11" booktitle: "A Research Agenda for Formal Methods in the Netherlands" organization: "Department of Information and Computing Sciences, Utrecht University, Utrecht, The Netherlands" kind: "incollection" key: "Visser19-0" - title: "Integration of data validation and user interface concerns in a DSL for web applications" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2013" doi: "http://dx.doi.org/10.1007/s10270-010-0173-9" abstract: "Data validation rules constitute the constraints that data input and processing must adhere to in addition to the structural constraints imposed by a data model. Web modeling tools do not make all types of data validation explicit in their models, hampering full code generation and model expressivity. Web application frameworks do not offer a consistent interface for data validation. In this paper, we present a solution for the integration of declarative data validation rules with user interface models in the domain of web applications, unifying syntax, mechanisms for error handling, and semantics of validation checks, and covering value well-formedness, data invariants, input assertions, and action assertions. We have implemented the approach in WebDSL, a domain-specific language for the definition of web applications." links: doi: "http://dx.doi.org/10.1007/s10270-010-0173-9" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/sosym/GroenewegenV13" tags: - "WebDSL" researchr: "https://researchr.org/publication/GroenewegenV13" cites: 0 citedby: 0 journal: "SoSyM" volume: "12" number: "1" pages: "35-52" kind: "article" key: "GroenewegenV13" - title: "Specification of Rewriting Strategies" author: - name: "Bas Luttik" link: "http://www.win.tue.nl/~luttik/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "November" abstract: "User-definable strategies for the application of rewrite rules provide a means to construct transformation systems that apply rewrite rules in a controlled way. This paper describes a strategy language and its interpretation. The language is used to control the rewriting of terms using labeled rewrite rules. Rule labels are atomic strategies. Compound strategies are formed by means of sequential composition, nondeterministic choice, left choice, fixed point recursion, and two primitives for expressing term traversal. Several complex strategies such as bottom-up and top-down applica- tion and (parallel) innermost and (parallel) outermost reduction can be defined in terms of these primitives. The paper contains two case studies of the application of strategies. " links: "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/LV97.ps" tags: - "control systems" - "rule-based" - "case study" - "SDF" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "composition" - "traversal combinators" - "graph-rewriting" - "rules" - "transformation system" - "rewriting" - "rewriting strategies" - "ASF+SDF" - "transformation" - "Stratego" researchr: "https://researchr.org/publication/LuttikV97" cites: 0 citedby: 0 booktitle: "ASF+SDF" kind: "inproceedings" key: "LuttikV97" - title: "Stratego/XT 0.16: components for transformation systems" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://doi.acm.org/10.1145/1111542.1111558" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, as well as declarative languages for deriving new components. Complete program transformation systems are composed from these components. In this paper we give an overview of Stratego/XT 0.16. " links: doi: "http://doi.acm.org/10.1145/1111542.1111558" successor: "https://researchr.org/publication/BravenboerKVV08" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV06" cites: 0 citedby: 0 pages: "95-99" booktitle: "PEPM" kind: "inproceedings" key: "BravenboerKVV06" - title: "Retrofitting the AutoBayes Program Synthesis System with Concrete Syntax" author: - name: "Bernd Fischer" link: "http://www.ecs.soton.ac.uk/people/bf" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1007/978-3-540-25935-0_14" abstract: "AUTOBAYES is a fully automatic, schema-based program synthesis system for statistical data analysis applications. Its core component is a schema library, i.e., a collection of generic code templates with associated applicability constraints which are instantiated in a problem-specific way during synthesis. Currently, AUTOBAYE S is implemented in Prolog; the schemas thus use abstract syntax (i.e., Prolog terms) to formulate the templates. However, the conceptual distance between this abstract representation and the concrete syntax of the generated programs makes the schemas hard to create and maintain. In this paper we describe how AUTOBAYE S is retrofitted with concrete syn- tax. We show how it is integrated into Prolog and describe how the seamless interaction of concrete syntax fragments with AUTOBAYE S’s remaining “legacy” meta-programming kernel based on abstract syntax is achieved. We apply the approach to gradually migrate individual schemas without forcing a disruptive migration of the entire system to a different meta-programming language. First experiences show that a smooth migration can be achieved. Moreover, it can re- sult in a considerable reduction of the code size and improved readability of the code. In particular, abstracting out fresh-variable generation and second-order term construction allows the formulation of larger continuous fragments." links: doi: "https://doi.org/10.1007/978-3-540-25935-0_14" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2004-012.html" tags: - "programming languages" - "object-oriented programming" - "concrete object syntax" - "Prolog" - "rule-based" - "program analysis" - "meta programming" - "data-flow language" - "generic programming" - "program synthesis" - "AutoBayes" - "SDF" - "meta-model" - "XML" - "abstract syntax" - "XML Schema" - "Stratego/XT" - "analysis" - "constraints" - "data-flow programming" - "data-flow" - "migration" - "code generation" - "language embedding" - "programming" - "subject-oriented programming" - "Meta-Environment" - "data-flow analysis" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "Stratego" researchr: "https://researchr.org/publication/FischerV04-dagstuhl" cites: 0 citedby: 0 pages: "239-253" booktitle: "Dagstuhl" kind: "inproceedings" key: "FischerV04-dagstuhl" - title: "Software development environments on the web: a research agenda" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Richard Vogelij" link: "http://www.linkedin.com/pub/richard-vogelij/10/554/719" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "http://doi.acm.org/10.1145/2384592.2384603" abstract: "Software is rapidly moving from the desktop to the Web. The Web provides a generic user interface that allows ubiquitous access, instant collaboration, integration with other online services, and avoids installation and configuration on desktop computers. For software development, the Web presents a shift away from developer workstations as a silo, and has the promise of closer collaboration and improved feedback through innovations in Web-based interactive development environments (IDEs). Moving IDEs to the Web is not just a matter of porting desktop IDEs; a fundamental reconsideration of the IDE architecture is necessary in order to realize the full potential that the combination of modern IDEs and the Web can offer. This paper discusses research challenges and opportunities in this area, guided by a pilot study of a web IDE implementation." links: doi: "http://doi.acm.org/10.1145/2384592.2384603" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/KatsVKV12" technicalreport: "https://researchr.org/publication/preprint-KatsVKV12" researchr: "https://researchr.org/publication/KatsVKV12" cites: 0 citedby: 0 pages: "99-116" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsVKV12" - title: "Migrating custom DSL implementations to a language workbench (tool demo)" author: - name: "Jasper Denkers" link: "https://jasperdenkers.com" - name: "Louis van Gool" link: "https://researchr.org/alias/louis-van-gool" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3276604.3276608" abstract: "We present a tool architecture that supports migrating custom domain-specific language (DSL) implementations to a language workbench. We demonstrate an implementation of this architecture for models in the domains of defining component interfaces (IDL) and modeling system behavior (OIL) which are developed and used at a digital printer manufacturing company. Increasing complexity and the lack of DSL syntax and IDE support for existing implementations in Python based on XML syntax hindered their evolution and adoption. A reimplementation in Spoofax using modular language definition enables composition between IDL and OIL and introduces more concise DSL syntax and IDE support. The presented tool supports migrating to new implementations while being backward compatible with existing syntax and related tooling." links: doi: "https://doi.org/10.1145/3276604.3276608" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/DenkersGV18" researchr: "https://researchr.org/publication/DenkersGV18" cites: 0 citedby: 0 pages: "205-209" booktitle: "SLE" kind: "inproceedings" key: "DenkersGV18" - title: "Finding bugs in program generators by dynamic analysis of syntactic language constraints" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Mira Mezini" link: "https://researchr.org/alias/mira-mezini" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://doi.acm.org/10.1145/2584469.2584474" abstract: "Program generators and transformations are hard to implement correctly, because the implementation needs to generically describe how to construct programs, for example, using templates or rewrite rules. We apply dynamic analysis to program generators in order to support developers in finding bugs and identifying the source of the bug. Our analysis focuses on syntactic language constraints and checks that generated programs are syntactically well-formed. To retain a language's grammar as the unique specification of the language's syntax, we devised mechanisms to derive the analysis from the grammar. Moreover, we designed a run-time system to support the modular activation/deactivation of the analysis, so that generators do not require adaption. We have implemented the analysis for the Stratego term-rewriting language and applied it in case studies based on Spoofax and SugarJ." links: doi: "http://doi.acm.org/10.1145/2584469.2584474" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/aosd/ErdwegVMV14" researchr: "https://researchr.org/publication/ErdwegVMV14-demo" cites: 0 citedby: 0 pages: "17-20" booktitle: "AOSD" kind: "inproceedings" key: "ErdwegVMV14-demo" - title: "The State of the Art in Language Workbenches - Conclusions from the Language Workbench Challenge" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Tijs van der Storm" link: "http://homepages.cwi.nl/~storm/" - name: "Markus Völter" link: "http://www.voelter.de/" - name: " Meinte Boersma" link: "https://researchr.org/alias/meinte-boersma" - name: "Remi Bosman" link: "https://researchr.org/alias/remi-bosman" - name: "William R. Cook" link: "http://www.cs.utexas.edu/~wcook/" - name: "Albert Gerritsen" link: "https://researchr.org/alias/albert-gerritsen" - name: "Angelo Hulshout" link: "https://researchr.org/alias/angelo-hulshout" - name: "Steven Kelly" link: "https://researchr.org/alias/steven-kelly" - name: "Alex Loh" link: "https://researchr.org/alias/alex-loh" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Pedro J. Molina" link: "https://researchr.org/alias/pedro-j.-molina" - name: "Martin Palatnik" link: "https://researchr.org/alias/martin-palatnik" - name: "Risto Pohjonen" link: "https://researchr.org/alias/risto-pohjonen" - name: "Eugen Schindler" link: "https://researchr.org/alias/eugen-schindler" - name: "Klemens Schindler" link: "https://researchr.org/alias/klemens-schindler" - name: "Riccardo Solmi" link: "https://researchr.org/alias/riccardo-solmi" - name: "Vlad A. Vergu" link: "https://researchr.org/alias/vlad-a.-vergu" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Kevin van der Vlist" link: "https://researchr.org/alias/kevin-van-der-vlist" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Jimi van der Woning" link: "https://researchr.org/alias/jimi-van-der-woning" year: "2013" doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_11" abstract: "Language workbenches are tools that provide high-level mechanisms for the implementation of (domain-specific) languages. Language workbenches are an active area of research that also receives many contributions from industry. To compare and discuss existing language workbenches, the annual Language Workbench Challenge was launched in 2011. Each year, participants are challenged to realize a given domain-specific language with their workbenches as a basis for discussion and comparison. In this paper, we describe the state of the art of language workbenches as observed in the previous editions of the Language Workbench Challenge. In particular, we capture the design space of language workbenches in a feature model and show where in this design space the participants of the 2013 Language Workbench Challenge reside. We compare these workbenches based on a DSL for questionnaires that was realized in all workbenches." links: doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_11" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/ErdwegSVBBCGHKLKMPPSSSVVVWW13" researchr: "https://researchr.org/publication/ErdwegSV13" cites: 0 citedby: 0 pages: "197-217" booktitle: "SLE" kind: "inproceedings" key: "ErdwegSV13" - title: "Generalized Type-Based Disambiguation of Meta Programs with Concrete Object Syntax" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Jurgen J. Vinju" link: "http://homepages.cwi.nl/~jurgenv/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://dx.doi.org/10.1007/11561347_12" abstract: "In meta programming with concrete object syntax, object-level programs are composed from fragments written in concrete syntax. The use of small program fragments in such quotations and the use of meta-level expressions within these fragments (anti-quotation) often leads to ambiguities. This problem is usually solved through explicit disambiguation, resulting in considerable syntactic overhead. A few systems manage to reduce this overhead by using type information during parsing. Since this is hard to achieve with traditional parsing technology, these systems provide specific combinations of meta and object languages, and their implementations are difficult to reuse. In this paper, we generalize these approaches and present a language independent method for introducing concrete object syntax without explicit disambiguation. The method uses scannerless generalized-LR parsing to parse meta programs with embedded object-level fragments, which produces a forest of all possible parses. This forest is reduced to a tree by a disambiguating type checker for the meta language. To validate our method we have developed embeddings of several object languages in Java, including AspectJ and Java itself. " links: doi: "http://dx.doi.org/10.1007/11561347_12" tags: - "programming languages" - "AspectJ" - "object-oriented programming" - "concrete object syntax" - "rule-based" - "Java" - "syntax definition" - "meta programming" - "SDF" - "meta-model" - "disambiguation" - "type system" - "reuse" - "programming" - "subject-oriented programming" - "Meta-Environment" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerVVV05" cites: 0 citedby: 2 pages: "157-172" booktitle: "GPCE" kind: "inproceedings" key: "BravenboerVVV05" - title: "FlowSpec: A Declarative Specification Language for Intra-Procedural Flow-Sensitive Data-Flow Analysis" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1016/j.cola.2019.100924" abstract: "Data-flow analysis is the static analysis of programs to estimate their approximate run-time behavior or approximate intermediate run-time values. It is an integral part of modern language specifications and compilers. In the specification of static semantics of programming languages, the concept of data-flow allows the description of well-formedness such as definite assignment of a local variable before its first use. In the implementation of compiler back-ends, data-flow analyses inform optimizations. Data-flow analysis has an established theoretical foundation. What lags behind is implementations of data-flow analysis in compilers, which are usually ad-hoc. This makes such implementations difficult to extend and maintain. In previous work researchers have proposed higher-level formalisms suitable for whole-program analysis in a separate tool, incremental analysis within editors, or bound to a specific intermediate representation. In this paper, we present FlowSpec, an executable formalism for specification of data-flow analysis. FlowSpec is a domain-specific language that enables direct and concise specification of data-flow analysis for programming languages, designed to express flow-sensitive, intra-procedural analyses. We define the formal semantics of FlowSpec in terms of monotone frameworks. We describe the design of FlowSpec using examples of standard analyses. We also include a description of our implementation of FlowSpec. In a case study we evaluate FlowSpec with the static analyses for Green-Marl, a domain-specific programming language for graph analytics." links: doi: "https://doi.org/10.1016/j.cola.2019.100924" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/vlc/SmitsWV20" researchr: "https://researchr.org/publication/SmitsWV20" cites: 0 citedby: 0 journal: "JCL (JVLC)" volume: "57" pages: "100924" kind: "article" key: "SmitsWV20" - title: "Building Interpreters with Rewriting Strategies" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1016/S1571-0661(04)80427-4" abstract: "Programming language semantics based on pure rewrite rules suffers from the gap between the rewriting strategy implemented in rewriting engines and the intended evaluation strategy. This paper shows how programmable rewriting strategies can be used to implement interpreters for programming languages based on rewrite rules. The advantage of this approach is that reduction rules are first class entities that can be reused in different strategies, even in other kinds of program transfor- mations such as optimizers. The approach is illustrated with several interpreters for the lambda calculus based on implicit and explicit (parallel) substitution, different strategies including normalization, eager evaluation, lazy evaluation, and lazy eval- uation with updates. An extension with pattern matching and choice shows that such interpreters can easily be extended." links: doi: "https://doi.org/10.1016/S1571-0661(04)80427-4" tags: - "laziness" - "programming languages" - "optimization" - "semantics" - "rule-based" - "pattern language" - "dynamic rewrite rules" - "interpreter" - "Stratego/XT" - "dynamic rules" - "parallel programming" - "reuse" - "graph-rewriting" - "rules" - "pattern matching" - "programming" - "program optimization" - "rewriting" - "systematic-approach" - "rewriting strategies" - "interpreters" - "Stratego" researchr: "https://researchr.org/publication/DolstraV02" cites: 0 citedby: 0 journal: "ENTCS" volume: "65" number: "3" pages: "57-76" kind: "article" key: "DolstraV02" - title: "IceDust 2: Derived Bidirectional Relations and Calculation Strategy Composition" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2017.14" abstract: "Derived values are values calculated from base values. They can be expressed with views in relational databases, or with expressions in incremental or reactive programming. However, relational views do not provide multiplicity bounds, and incremental and reactive programming require significant boilerplate code in order to encode bidirectional derived values. Moreover, the composition of various strategies for calculating derived values is either disallowed, or not checked for producing derived values which will be consistent with the derived values they depend upon. In this paper we present IceDust2, an extension of the declarative data modeling language IceDust with derived bidirectional relations with multiplicity bounds and support for statically checked composition of calculation strategies. Derived bidirectional relations, multiplicity bounds, and calculation strategies all influence runtime behavior of changes to data, leading to hundreds of possible behavior definitions. IceDust2 uses a product-line based code generator to avoid explicitly defining all possible combinations, making it easier to reason about correctness. The type system allows only sound composition of strategies and guarantees multiplicity bounds. Finally, our case studies validate the usability of IceDust2 in applications. " links: doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2017.14" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/HarkesV17" researchr: "https://researchr.org/publication/HarkesV17" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "HarkesV17" - title: "Language Design with the Spoofax Language Workbench" author: - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://dx.doi.org/10.1109/MS.2014.100" abstract: "IDEs are essential for programming language developers, and state-of-the-art IDE support is mandatory for programming languages to be successful. Although IDE features for mainstream programming languages are typically implemented manually, this often isn't feasible for programming languages that must be developed with significantly fewer resources. The Spoofax language workbench is a platform for developing textual programming languages with state-of-the-art IDE support. Spoofax is a comprehensive environment that integrates syntax definition, name binding, type analysis, program transformation, code generation, and declarative specification of IDE components. It also provides high-level languages for each of these aspects. These languages are highly declarative, abstracting over the implementation of IDE features and letting engineers focus on language design." links: doi: "http://dx.doi.org/10.1109/MS.2014.100" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/software/WachsmuthKV14" researchr: "https://researchr.org/publication/WachsmuthKV14" cites: 0 citedby: 0 journal: "IEEE Software" volume: "31" number: "5" pages: "35-43" kind: "article" key: "WachsmuthKV14" - title: "Using Filters for the Disambiguation of Context-free Grammars" author: - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1994" month: "October" abstract: "An ambiguous context-free grammar defines a language in which some sentences have multiple interpretations. For conciseness, ambiguous context-free grammars are frequently used to define even completely unambiguous languages and numerous disambiguation methods exist for specifying which interpretation is the intended one for each sentence. The existing methods can be divided in `parser specific' methods that describe how some parsing technique deals with ambiguous sentences and `logical' methods that describe the intended interpretation without reference to a specific parsing technique. We propose a framework of \\em filters\\/ to describe and compare a wide range of disambiguation problems in a parser-independent way. A filter is a function that selects from a set of parse trees (the canonical representation of the interpretations of a sentence) the intended trees. The framework enables us to define several general properties of disambiguation methods. The expressive power of filters is illustrated by several case studies. Finally, a start is made with the study of efficient implementation techniques for filters by exploiting the commutativity of parsing steps and filter steps for certain classes of filters." links: technicalreport: "https://researchr.org/publication/KlintV94-P9426" tags: - "case study" - "disambiguation" - "context-aware" - "parsing" - "grammar" - "domain-specific language" researchr: "https://researchr.org/publication/KlintV94" cites: 0 citedby: 0 booktitle: "Proceedings of the ASMICS Workshop on Parsing Theory" kind: "inproceedings" key: "KlintV94" - title: "Multi-purpose Syntax Definition with SDF3" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1007/978-3-030-58768-0_1" abstract: "SDF3 is a syntax definition formalism that extends plain context-free grammars with features such as constructor declarations, declarative disambiguation rules, character-level grammars, permissive syntax, layout constraints, formatting templates, placeholder syntax, and modular composition. These features support the multi-purpose interpretation of syntax definitions, including derivation of type schemas for abstract syntax tree representations, scannerless generalized parsing of the full class of context-free grammars, error recovery, layout-sensitive parsing, parenthesization and formatting, and syntactic completion. This paper gives a high level overview of SDF3 by means of examples and provides a guide to the literature for further details." links: doi: "https://doi.org/10.1007/978-3-030-58768-0_1" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sefm/AmorimV20" researchr: "https://researchr.org/publication/AmorimV20" cites: 0 citedby: 0 pages: "1-23" booktitle: "SEFM" kind: "inproceedings" key: "AmorimV20" - title: "Intrinsically-typed definitional interpreters for imperative languages" author: - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Arjen Rouvoet" link: "https://www.linkedin.com/in/arjen-rouvoet-760347a5/" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Robbert Krebbers" link: "https://robbertkrebbers.nl" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "http://doi.acm.org/10.1145/3158104" abstract: " A definitional interpreter defines the semantics of an object language in terms of the (well-known) semantics of a host language, enabling understanding and validation of the semantics through execution. Combining a definitional interpreter with a separate type system requires a separate type safety proof. An alternative approach, at least for pure object languages, is to use a dependently-typed language to encode the object language type system in the definition of the abstract syntax. Using such intrinsically-typed abstract syntax definitions allows the host language type checker to verify automatically that the interpreter satisfies type safety. Does this approach scale to larger and more realistic object languages, and in particular to languages with mutable state and objects? In this paper, we describe and demonstrate techniques and libraries in Agda that successfully scale up intrinsically-typed definitional interpreters to handle rich object languages with non-trivial binding structures and mutable state. While the resulting interpreters are certainly more complex than the simply-typed λ-calculus interpreter we start with, we claim that they still meet the goals of being concise, comprehensible, and executable, while guaranteeing type safety for more elaborate object languages. We make the following contributions: (1) A dependent-passing style technique for hiding the weakening of indexed values as they propagate through monadic code. (2) An Agda library for programming with scope graphs and frames, which provides a uniform approach to dealing with name binding in intrinsically-typed interpreters. (3) Case studies of intrinsically-typed definitional interpreters for the simply-typed λ-calculus with references (STLC+Ref) and for a large subset of Middleweight Java (MJ). " links: doi: "http://doi.acm.org/10.1145/3158104" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/pacmpl/PoulsenRTKV18" technicalreport: "https://researchr.org/publication/preprint-PoulsenRTKV18" tags: - "Intrinsic-Verification" researchr: "https://researchr.org/publication/PoulsenRTKV18" cites: 0 citedby: 0 journal: "PACMPL" volume: "2" number: "POPL" kind: "article" key: "PoulsenRTKV18" - title: "Gradually Typing Strategies - Artifact" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" month: "September" doi: "10.5281/zenodo.4032445" abstract: "This is the artifact for the paper Gradually Typing Strategies, accepted at International Conference on Software Language Engineering." links: successor: "https://researchr.org/publication/SmitsV20" "url": "https://doi.org/10.5281/zenodo.4032445" researchr: "https://researchr.org/publication/SmitsV20-Artifact" cites: 0 citedby: 0 howpublished: "Zenodo" kind: "misc" key: "SmitsV20-Artifact" - title: "Syntax Definition for Language Prototyping" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "September" abstract: "Language prototyping is the activity of designing and testing definitions of new or existing computer languages. An important aspect of a language definition is the definition of its syntax. The subject of this thesis are new formalisms and techniques that support the development and prototyping of syntax definitions. There are four main subjects: (1) Techniques for parsing and disambiguation of context-free languages. (2) Design and implementation of a new syntax definition formalism. (3) Design of a multi-level algebraic specification formalism. (4) Study of polymorphic syntax definition. " tags: - "syntax definition" - "SDF" - "syntax definition formalism" - "disambiguation" - "testing" - "language design" - "graph-rewriting" - "algebraic specification" - " algebra" - "context-aware" - "rewriting" - "parsing" - "design" - "scannerless parsing" - "ASF+SDF" - "SGLR" researchr: "https://researchr.org/publication/Visser97" cites: 0 citedby: 6 school: "University of Amsterdam" advisor: - name: "Paul Klint" link: "http://homepages.cwi.nl/~paulk/" kind: "phdthesis" key: "Visser97" - title: "Declarative Access Control for WebDSL: Combining Language Integration and Separation of Concerns" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1109/ICWE.2008.15" abstract: "In this paper, we present the extension of WebDSL, a domain-specific language for web application development, with abstractions for declarative definition of access control. The extension supports the definition of a wide range of access control policies concisely and transparently as a separate concern. In addition to regulating the access to pages and actions, access control rules are used to infer navigation options not accessible to the current user, preventing the presentation of inaccessible links. The extension is an illustration of a general approach to the design of domain-specific languages for different technical domains to support separation of concerns in application development, while preserving linguistic integration. This approach is realized by means of a transformational semantics that weaves separately defined aspects into an integrated implementation. " links: doi: "http://dx.doi.org/10.1109/ICWE.2008.15" "webdsl": "http://webdsl.org" tags: - "WebDSL" - "semantics" - "rule-based" - "separation of concerns" - "transformation language" - " action semantics" - "language design" - "weaving" - "rules" - "web applications" - "DSL" - "abstraction" - "access control policies" - "access control" - "aspect weaving" - "design" - "role-based access control" - "systematic-approach" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/GroenewegenV08" cites: 26 citedby: 7 pages: "175-188" booktitle: "ICWE" kind: "inproceedings" key: "GroenewegenV08" - title: "Domain-Specific Languages for Composable Editor Plugins" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://dx.doi.org/10.1016/j.entcs.2010.08.038" abstract: "Modern IDEs increase developer productivity by incorporating many different kinds of editor services. These can be purely syntactic, such as syntax highlighting, code folding, and an outline for navigation; or they can be based on the language semantics, such as in-line type error reporting and resolving identifier declarations. Building all these services from scratch requires both the extensive knowledge of the sometimes complicated and highly interdependent APIs and extension mechanisms of an IDE framework, and an in-depth understanding of the structure and semantics of the targeted language. This paper describes Spoofax/IMP, a meta-tooling suite that provides high-level domain-specific languages for describing editor services, relieving editor developers from much of the framework-specific programming. Editor services are defined as composable modules of rules coupled to a modular SDF grammar. The composability provided by the SGLR parser and the declaratively defined services allows embedded languages and language extensions to be easily formulated as additional rules extending an existing language definition. The service definitions are used to generate Eclipse editor plugins. We discuss two examples: an editor plugin for WebDSL, a domain-specific language for web applications, and the embedding of WebDSL in Stratego, used for expressing the (static) semantic rules of WebDSL." links: doi: "http://dx.doi.org/10.1016/j.entcs.2010.08.038" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/entcs/KatsKV10" tags: - "C++" - "domain-specific language" researchr: "https://researchr.org/publication/KatsKV10" cites: 0 citedby: 0 journal: "ENTCS" volume: "253" number: "7" pages: "149-163" kind: "article" key: "KatsKV10" - title: "Declarative Name Binding and Scope Rules" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "http://dx.doi.org/10.1007/978-3-642-36089-3_18" abstract: "In textual software languages, names are used to reference elements like variables, methods, classes, etc. Name resolution analyses these names in order to establish references between definition and use sites of elements. In this paper, we identify recurring patterns for name bindings in programming languages and introduce a declarative metalanguage for the specification of name bindings in terms of namespaces, definition sites, use sites, and scopes. Based on such declarative name binding specifications, we provide a language-parametric algorithm for static name resolution during compile-time. We discuss the integration of the algorithm into the Spoofax Language Workbench and show how its results can be employed in semantic editor services like reference resolution, constraint checking, and content completion." links: doi: "http://dx.doi.org/10.1007/978-3-642-36089-3_18" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/KonatKWV12" researchr: "https://researchr.org/publication/KonatKWV12" cites: 0 citedby: 0 pages: "311-331" booktitle: "SLE" kind: "inproceedings" key: "KonatKWV12" - title: "When Frameworks Let You Down. Platform-Imposed Constraints on the Design and Evolution of Domain-Specific Languages" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Zef Hemel" link: "http://zef.me" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" month: "October" abstract: "Application frameworks encapsulate domain knowledge in a reusable library, providing abstractions for a particular domain. As such, they can form the basis for domain-specific languages, which may offer notational constructs, static analysis, and optimizations specific for the domain. Additional abstractions can be incrementally added on top of a domain-specific, following an inductive approach towards its design, evolving the language as new domain insights are acquired. A problem arises when such additions do not align well with the underlying framework. In this paper, we provide different examples of this problem and describe scenarios of dealing with it." links: "technical report": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-039.pdf" tags: - "framework" - "optimization" - "WebDSL" - "application framework" - "domain analysis" - "analysis" - "language design" - "static analysis" - "constraints" - "reuse" - "software evolution" - "C++" - "DSL" - "abstraction" - "incremental" - "design" - "systematic-approach" - "domain-specific language" researchr: "https://researchr.org/publication/GroenewegenHKV08-DSM" cites: 0 citedby: 2 booktitle: "DSM" kind: "inproceedings" key: "GroenewegenHKV08-DSM" - title: "Program Transformation with Scoped Dynamic Rewrite Rules" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Arthur van Dam" link: "https://researchr.org/profile/arthurvandam/publications" - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" abstract: "The applicability of term rewriting to program transformation is limited by the lack of control over rule application and by the context-free nature of rewrite rules. The first problem is addressed by languages supporting user-definable rewriting strategies. The second problem is addressed by the extension of rewriting strategies with scoped dynamic rewrite rules. Dynamic rules are defined at run-time and can access variables available from their definition context. Rules defined within a rule scope are automatically retracted at the end of that scope. In this paper, we explore the design space of dynamic rules, and their application to transformation problems. The technique is formally defined by extending the operational semantics underlying the program transformation language Stratego, and illustrated by means of several program transformations in Stratego, including constant propagation, bound variable renaming, dead code elimination, function inlining, and function specialization. " links: doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2005-005.html" tags: - "programming languages" - "semantics" - "rule-based" - "formal semantics" - "graph transformation" - "dynamic rewrite rules" - "Stratego/XT" - "transformation language" - "term rewriting" - "language design" - "graph-rewriting" - "rules" - "operational semantics" - "context-aware" - "access control" - "rewriting" - "design" - "role-based access control" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerDOV06" cites: 0 citedby: 4 journal: "FUIN" volume: "69" number: "1-2" pages: "123-178" kind: "article" key: "BravenboerDOV06" - title: "Migrating business logic to an incremental computing DSL: a case study" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Elmer van Chastelet" link: "https://researchr.org/profile/elmervanchastelet/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3276604.3276617" abstract: " To provide empirical evidence to what extent migration of business logic to an incremental computing language (ICL) is useful, we report on a case study on a learning management system. Our contribution is to analyze a real-life project, how migrating business logic to an ICL affects information system validatability, performance, and development effort. We find that the migrated code has better validatability; it is straightforward to establish that a program ‘does the right thing’. Moreover, the performance is better than the previous hand-written incremental computing solution. The effort spent on modeling business logic is reduced, but integrating that logic in the application and tuning performance takes considerable effort. Thus, the ICL separates the concerns of business logic and performance, but does not reduce effort. " links: doi: "https://doi.org/10.1145/3276604.3276617" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/HarkesCV18" researchr: "https://researchr.org/publication/HarkesCV18" cites: 0 citedby: 0 pages: "83-96" booktitle: "SLE" kind: "inproceedings" key: "HarkesCV18" - title: "Parse Table Composition" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2009" doi: "http://dx.doi.org/10.1007/978-3-642-00434-6_6" abstract: "Module systems, separate compilation, deployment of binary components, and dynamic linking have enjoyed wide acceptance in programming languages and systems. In contrast, the syntax of languages is usually defined in a non-modular way, cannot be compiled separately, cannot easily be combined with the syntax of other languages, and cannot be deployed as a component for later composition. Grammar formalisms that do support modules use whole program compilation. Current extensible compilers focus on source-level extensibility, which requires users to compile the compiler with a specific configuration of extensions. A compound parser needs to be generated for every combination of extensions. The generation of parse tables is expensive, which is a particular problem when the composition configuration is not fixed to enable users to choose language extensions. In this paper we introduce an algorithm for parse table composition to support separate compilation of grammars to parse table components. Parse table components can be composed (linked) efficiently at runtime, i.e. just before parsing. While the worst-case time complexity of parse table composition is exponential (like the complexity of parse table generation itself), for realistic language combination scenarios involving grammars for real languages, our parse table composition algorithm is an order of magnitude faster than computation of the parse table for the combined grammars. " links: doi: "http://dx.doi.org/10.1007/978-3-642-00434-6_6" tags: - "parsing algorithm" - "programming languages" - "deployment" - "syntax definition" - "SDF" - "composition" - "source-to-source" - "parse table composition" - "compiler" - "programming" - "language composition" - "parsing" - "extensible language" - "ASF+SDF" - "open-source" - "grammar" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV08" cites: 0 citedby: 0 pages: "74-94" booktitle: "SLE" kind: "inproceedings" key: "BravenboerV08" - title: "Scopes Describe Frames: A Uniform Model for Memory Layout in Dynamic Semantics" author: - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "10.4230/LIPIcs.ECOOP.2016.20" abstract: "Semantic specifications do not make a systematic connection between the names and scopes in the static structure of a program and memory layout, and access during its execution. In this paper, we introduce a systematic approach to the alignment of names in static semantics and memory in dynamic semantics, building on the scope graph framework for name resolution. We develop a uniform memory model consisting of frames that instantiate the scopes in the scope graph of a program. This provides a language-independent correspondence between static scopes and run-time memory layout, and between static resolution paths and run-time memory access paths. The approach scales to a range of binding features, supports straightforward type soundness proofs, and provides the basis for a language-independent specification of sound reachability-based garbage collection. " links: dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/PoulsenNTV16" technicalreport: "https://researchr.org/publication/TUD-SERG-2016-010" "pdf": "http://drops.dagstuhl.de/opus/volltexte/2016/6114/pdf/LIPIcs-ECOOP-2016-20.pdf" researchr: "https://researchr.org/publication/PoulsenNTV16" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "PoulsenNTV16" - title: "Transformations for Abstractions" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" month: "October" doi: "http://dx.doi.org/10.1109/SCAM.2005.26" abstract: "The transformation language Stratego provides high-level abstractions for implementation of a wide range of transformations. Our aim is to integrate transformation in the software development process and make it available to programmers. This requires the transformations provided by the programming environment to be extensible. This paper presents a case study in the implementation of extensible programming environments using Stratego, by developing a small collection of language extensions and several typical transformations for these languages." links: doi: "http://dx.doi.org/10.1109/SCAM.2005.26" "pdf": "http://www.cs.uu.nl/research/techreps/repo/CS-2005/2005-034.pdf" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2005-034.html" "doi": "http://dx.doi.org/10.1109/SCAM.2005.26" tags: - "programming languages" - "meta programming" - "case study" - "Stratego/XT" - "transformation language" - "extensible languages" - "programming" - "abstraction" - "Meta-Environment" - "extensible language" - "interpreters" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser05-SCAM" cites: 0 citedby: 1 booktitle: "SCAM" kind: "inproceedings" key: "Visser05-SCAM" - title: "Stratego/XT Reference Manual" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://releases.strategoxt.org/strategoxt-manual/strategoxt-manual-0.17pre18721-8c3vml4h/manual/" links: doi: "http://releases.strategoxt.org/strategoxt-manual/strategoxt-manual-0.17pre18721-8c3vml4h/manual/" "html": "http://releases.strategoxt.org/strategoxt-manual/strategoxt-manual-0.17pre18721-8c3vml4h/manual/" researchr: "https://researchr.org/publication/StrategoXTReferenceManual" cites: 0 citedby: 0 kind: "manual" key: "StrategoXTReferenceManual" - title: "Modular specification and dynamic enforcement of syntactic language constraints when generating code" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Mira Mezini" link: "https://researchr.org/alias/mira-mezini" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://doi.acm.org/10.1145/2577080.2577089" abstract: "A key problem in metaprogramming and specifically in generative programming is to guarantee that generated code is well-formed with respect to the context-free and context-sensitive constraints of the target language. We propose typesmart constructors as a dynamic approach to enforcing the well-formedness of generated code. A typesmart constructor is a function that is used in place of a regular constructor to create values, but it may reject the creation of values if the given data violates some language-specific constraint. While typesmart constructors can be implemented individually, we demonstrate how to derive them automatically from a grammar, so that the grammar remains the sole specification of a language's syntax and is not duplicated. We have integrated support for typesmart constructors into the run-time system of Stratego to enforce usage of typesmart constructors implicitly whenever a regular constructor is called. We evaluate the applicability, performance, and usefulness of typesmart constructors for syntactic constraints in a compiler for MiniJava developed with Spoofax and in various language extensions of Java and Haskell implemented with SugarJ and SugarHaskell." links: doi: "http://doi.acm.org/10.1145/2577080.2577089" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/aosd/ErdwegVMV14a" researchr: "https://researchr.org/publication/ErdwegVMV14" cites: 0 citedby: 0 pages: "241-252" booktitle: "AOSD" kind: "inproceedings" key: "ErdwegVMV14" - title: "Scopes as types" author: - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Arjen Rouvoet" link: "https://www.linkedin.com/in/arjen-rouvoet-760347a5/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3276484" abstract: "Scope graphs are a promising generic framework to model the binding structures of programming languages, bridging formalization and implementation, supporting the definition of type checkers and the automation of type safety proofs. However, previous work on scope graphs has been limited to simple, nominal type systems. In this paper, we show that viewing scopes as types enables us to model the internal structure of types in a range of non-simple type systems (including structural records and generic classes) using the generic representation of scopes. Further, we show that relations between such types can be expressed in terms of generalized scope graph queries. We extend scope graphs with scoped relations and queries. We introduce Statix, a new domain-specific meta-language for the specification of static semantics, based on scope graphs and constraints. We evaluate the scopes as types approach and the Statix design in case studies of the simply-typed lambda calculus with records, System F, and Featherweight Generic Java." links: doi: "https://doi.org/10.1145/3276484" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/pacmpl/AntwerpenPRV18" researchr: "https://researchr.org/publication/AntwerpenPRV18" cites: 0 citedby: 0 journal: "PACMPL" volume: "2" number: "OOPSLA" kind: "article" key: "AntwerpenPRV18" - title: "Scalable incremental building with dynamic task dependencies" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3238147.3238196" abstract: "Incremental build systems are essential for fast, reproducible software builds. Incremental build systems enable short feedback cycles when they capture dependencies precisely and selectively execute build tasks efficiently. A much overlooked feature of build systems is the expressiveness of the scripting language, which directly influences the maintainability of build scripts. In this paper, we present a new incremental build algorithm that allows build engineers to use a full-fledged programming language with explicit task invocation, value and file inspection facilities, and conditional and iterative language constructs. In contrast to prior work on incrementality for such programmable builds, our algorithm scales with the number of tasks affected by a change and is independent of the size of the software project being built. Specifically, our algorithm accepts a set of changed files, transitively detects and re-executes affected build tasks, but also accounts for new task dependencies discovered during building. We have evaluated the performance of our algorithm in a real-world case study and confirm its scalability." links: doi: "https://doi.org/10.1145/3238147.3238196" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/kbse/KonatEV18" researchr: "https://researchr.org/publication/KonatEV18" cites: 0 citedby: 0 pages: "76-86" booktitle: "ASE" kind: "inproceedings" key: "KonatEV18" - title: "PixieDust: Declarative Incremental User Interface Rendering Through Static Dependency Tracking" author: - name: "Nick ten Veen" link: "https://www.linkedin.com/in/nicktenveen/" - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "http://doi.acm.org/10.1145/3184558.3185978" abstract: " Modern web applications are interactive. Reactive programming languages and libraries are the state-of-the-art approach for declara- tively specifying these interactive applications. However, programs written with these approaches contain error-prone boilerplate code for e ciency reasons. In this paper we present PixieDust, a declarative user-interface language for browser-based applications. PixieDust uses static de- pendency analysis to incrementally update a browser-DOM at run- time, without boilerplate code. We demonstrate that applications in PixieDust contain less boilerplate code than state-of-the-art ap- proaches, while achieving on-par performance. " links: doi: "http://doi.acm.org/10.1145/3184558.3185978" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/www/VeenHV18" researchr: "https://researchr.org/publication/VeenHV18" cites: 0 citedby: 0 pages: "721-729" booktitle: "WWW" kind: "inproceedings" key: "VeenHV18" - title: "Declaratively defining domain-specific language debuggers" author: - name: "Ricky T. Lindeman" link: "http://swerl.tudelft.nl/bin/view/Main/WebHome" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2047862.2047885" abstract: "Tool support is vital to the effectiveness of domain-specific languages. With language workbenches, domain-specific languages and their tool support can be generated from a combined, high-level specification. This paper shows how such a specification can be extended to describe a debugger for a language. To realize this, we introduce a meta-language for coordinating the debugger that abstracts over the complexity of writing a debugger by hand. We describe the implementation of a language-parametric infrastructure for debuggers that can be instantiated based on this specification. The approach is implemented in the Spoofax language workbench and validated through realistic case studies with the Stratego transformation language and the WebDSL web programming language." links: doi: "http://doi.acm.org/10.1145/2047862.2047885" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/gpce/LindemanKV11" researchr: "https://researchr.org/publication/LindemanKV11" cites: 0 citedby: 0 pages: "127-136" booktitle: "GPCE" kind: "inproceedings" key: "LindemanKV11" - title: "Evaluating and comparing language workbenches: Existing results and benchmarks for the future" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Tijs van der Storm" link: "http://homepages.cwi.nl/~storm/" - name: "Markus Völter" link: "http://www.voelter.de/" - name: "Laurence Tratt" link: "https://researchr.org/alias/laurence-tratt" - name: "Remi Bosman" link: "https://researchr.org/alias/remi-bosman" - name: "William R. Cook" link: "http://www.cs.utexas.edu/~wcook/" - name: "Albert Gerritsen" link: "https://researchr.org/alias/albert-gerritsen" - name: "Angelo Hulshout" link: "https://researchr.org/alias/angelo-hulshout" - name: "Steven Kelly" link: "http://www.metacase.com/stevek.html" - name: "Alex Loh" link: "https://researchr.org/alias/alex-loh" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Pedro J. Molina" link: "https://researchr.org/alias/pedro-j.-molina" - name: "Martin Palatnik" link: "https://researchr.org/alias/martin-palatnik" - name: "Risto Pohjonen" link: "https://researchr.org/alias/risto-pohjonen" - name: "Eugen Schindler" link: "https://researchr.org/alias/eugen-schindler" - name: "Klemens Schindler" link: "https://researchr.org/alias/klemens-schindler" - name: "Riccardo Solmi" link: "https://researchr.org/alias/riccardo-solmi" - name: "Vlad A. Vergu" link: "https://researchr.org/alias/vlad-a.-vergu" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Kevin van der Vlist" link: "https://researchr.org/alias/kevin-van-der-vlist" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Jimi van der Woning" link: "https://researchr.org/alias/jimi-van-der-woning" year: "2015" doi: "http://dx.doi.org/10.1016/j.cl.2015.08.007" abstract: "Language workbenches are environments for simplifying the creation and use of computer languages. The annual Language Workbench Challenge (LWC) was launched in 2011 to allow the many academic and industrial researchers in this area an opportunity to quantitatively and qualitatively compare their approaches. We first describe all four LWCs to date, before focussing on the approaches used, and results generated, during the third LWC. We give various empirical data for ten approaches from the third LWC. We present a generic feature model within which the approaches can be understood and contrasted. Finally, based on our experiences of the existing LWCs, we propose a number of benchmark problems for future LWCs." links: doi: "http://dx.doi.org/10.1016/j.cl.2015.08.007" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/cl/ErdwegSVTBCGH0L15" researchr: "https://researchr.org/publication/ErdwegSVTBCGH0L15" cites: 0 citedby: 0 journal: "Comp. Lang., Syst. \\& Struct." volume: "44" pages: "24-47" kind: "article" key: "ErdwegSVTBCGH0L15" - title: "Stratego/XT 0.17. A language and toolset for program transformation" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, and tools for generating such components from declarative specifications. Complete program transformation systems are composed from these components." links: doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-011.pdf" "stratego/xt": "http://strategoxt.org" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "DSL" - "programming" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV08" cites: 0 citedby: 7 journal: "SCP" volume: "72" number: "1-2" pages: "52-70" kind: "article" key: "BravenboerKVV08" - title: "Scopes and Frames Improve Meta-Interpreter Specialization" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.4" abstract: "DynSem is a domain-specific language for concise specification of the dynamic semantics of programming languages, aimed at rapid experimentation and evolution of language designs. To maintain a short definition-to-execution cycle, DynSem specifications are meta-interpreted. Meta-interpretation introduces runtime overhead that is difficult to remove by using interpreter optimization frameworks such as the Truffle/Graal Java tools; previous work has shown order-of-magnitude improvements from applying Truffle/Graal to a meta-interpreter, but this is still far slower than what can be achieved with a language-specific interpreter. In this paper, we show how specifying the meta-interpreter using scope graphs, which encapsulate static name binding and resolution information, produces much better optimization results from Truffle/Graal. Furthermore, we identify that JIT compilation is hindered by large numbers of calls between small polymorphic rules and we introduce rule cloning to derive larger monomorphic rules at run time as a countermeasure. Our contributions improve the performance of DynSem-derived interpreters to within an order of magnitude of a handwritten language-specific interpreter." links: doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.4" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/VerguTV19" researchr: "https://researchr.org/publication/VerguTV19" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "VerguTV19" - title: "Stratego: A Language for Program Transformation Based on Rewriting Strategies" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2001" doi: "https://doi.org/10.1007/3-540-45127-7_27" abstract: "Program transformation is used in many areas of software engineering. Examples include compilation, optimization, synthesis, refactoring, migration, normalization and improvement [15]. Rewrite rules are a natural formalism for expressing single program transformations. However, using a standard strategy for normalizing a program with a set of rewrite rules is not adequate for implementing program transformation systems. It may be necessary to apply a rule only in some phase of a transformation, to apply rules in some order, or to apply a rule only to part of a program. These restrictions may be necessary to avoid non-termination or to choose a specific path in a non-con uent rewrite system. Stratego is a language for the specification of program transformation systems based on the paradigm of rewriting strategies. It supports the separation of strategies from transformation rules, thus allowing careful control over the application of these rules. As a result of this separation, transformation rules are reusable in multiple difierent transformations and generic strategies capturing patterns of control can be described independently of the transformation rules they apply. Such strategies can even be formulated independently of the object language by means of the generic term traversal capabilities of Stratego. In this short paper I give a description of version 0.5 of the Stratego system, discussing the features of the language (Section 2), the library (Section 3), the compiler (Section 4) and some of the applications that have been built (Section 5). Stratego is available as free software under the GNU General Public License from http://www.stratego-language.org. " links: doi: "https://doi.org/10.1007/3-540-45127-7_27" successor: "https://researchr.org/publication/BravenboerKVV06" tags: - "control systems" - "programming languages" - "optimization" - "object-oriented programming" - "rule-based" - "transformation engineering" - "pattern language" - "generic programming" - "graph transformation" - "Stratego/XT" - "traversal" - "refactoring" - "language engineering" - "transformation language" - "software language engineering" - "term rewriting" - "reuse" - "termination" - "graph-rewriting" - "software engineering" - "rules" - "programming paradigms" - "migration" - "transformation system" - "rule-based refactoring" - "compiler" - "subject-oriented programming" - "program optimization" - "higher-order transformations" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/Visser01" cites: 0 citedby: 1 pages: "357-362" booktitle: "RTA" kind: "inproceedings" key: "Visser01" - title: "Evolution of the WebDSL runtime: reliability engineering of the WebDSL web programming language" author: - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Elmer van Chastelet" link: "https://researchr.org/profile/elmervanchastelet/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1145/3397537.3397553" abstract: "Web applications are ideal for implementing information systems; they can organize and persist the data in a database, do not require installation on client machines, and can be instantly updated everywhere. However, web programming is complex due to its heterogeneous nature, causing web frameworks to suffer from insufficient or leaky abstraction, weak static consistency checking, and security features that are not enforced. We developed the WebDSL web programming language, which supports direct expression of intent, strong static consistency checking, linguistic abstractions for web programming concerns, and automatically enforces security features for web applications. We have used WebDSL for over 10 years to create information systems for academic workflows with thousands of users. Based on our experiences with these applications, we improved the WebDSL compiler and runtime to increase robustness, performance, and security of applications. In this experience report, we reflect on the lessons learned and improvements made to the language runtime." links: doi: "https://doi.org/10.1145/3397537.3397553" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/programming/GroenewegenCV20" tags: - "WebDSL" researchr: "https://researchr.org/publication/GroenewegenCV20" cites: 0 citedby: 0 pages: "77-83" booktitle: "Programming" kind: "inproceedings" key: "GroenewegenCV20" - title: "A core language for rewriting" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Zine-El-Abidine Benaissa" link: "http://web.archive.org/web/20010515202744/www.cse.ogi.edu/~benaissa/" year: "1998" doi: "http://dx.doi.org/10.1016/S1571-0661(05)80027-1" abstract: "System S is a calculus providing the basic abstractions of term rewriting: matching and building terms, term traversal, combining computations and handling failure. The calculus forms a core language for implementation of a wide variety of rewriting languages, or more generally, languages for specifying tree transformations. In this paper we show how a conventional rewriting language based on conditional term rewriting can be implemented straightforwardly in System S. Subsequently we show how this implementation can be extended with features such as matching conditions, negative conditions, default rules, non-strictness annotations and alternative evaluation strategies." links: doi: "http://dx.doi.org/10.1016/S1571-0661(05)80027-1" tags: - "rule-based" - "SDF" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "graph-rewriting" - "rules" - "transformation system" - "abstraction" - "rewriting" - "rewriting strategies" - "ASF+SDF" - "transformation" researchr: "https://researchr.org/publication/VisserB98" cites: 0 citedby: 1 journal: "ENTCS" volume: "15" pages: "422-441" kind: "article" key: "VisserB98" - title: "Software that Meets Its Intent" author: - name: "Marieke Huisman" link: "https://researchr.org/alias/marieke-huisman" - name: "Herbert Bos" link: "https://researchr.org/alias/herbert-bos" - name: "Sjaak Brinkkemper" link: "https://researchr.org/alias/sjaak-brinkkemper" - name: "Arie van Deursen" link: "https://researchr.org/alias/arie-van-deursen" - name: "Jan Friso Groote" link: "http://www.win.tue.nl/~jfg/" - name: "Patricia Lago" link: "https://researchr.org/alias/patricia-lago" - name: "Jaco van de Pol" link: "https://researchr.org/alias/jaco-van-de-pol" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "http://dx.doi.org/10.1007/978-3-319-47169-3_47" abstract: "Software is widely used, and society increasingly depends on its reliability. However, software has become so complex and it evolves so quickly that we fail to keep it under control. Therefore, we propose intents: fundamental laws that capture a software systems’ intended behavior (resilient, secure, safe, sustainable, etc.). The realization of this idea requires novel theories, algorithms, tools, and techniques to discover, express, verify, and evolve software intents. Thus, future software systems will be able to verify themselves that they meet their intents. Moreover, they will be able to respond to deviations from intents through self-correction. In this article we propose a research agenda, outlining which novel theories, algorithms and tools are required." links: doi: "http://dx.doi.org/10.1007/978-3-319-47169-3_47" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/isola/HuismanBBDGLPV16" "techreport (pdf)": "https://pure.tudelft.nl/portal/files/8041146/TUD_SERG_2016_021.pdf" researchr: "https://researchr.org/publication/HuismanBBDGLPV16" cites: 0 citedby: 0 pages: "609-625" booktitle: "ISoLA" kind: "inproceedings" key: "HuismanBBDGLPV16" - title: "Precise, Efficient, and Expressive Incremental Build Scripts with PIE" author: - name: "Gabriël Konat" link: "https://researchr.org/alias/gabrie%CC%88l-konat" - name: " Roelof Sol" link: "https://researchr.org/alias/roelof-sol" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" abstract: "PIE is precise, as dependencies of build tasks are exactly tracked using dynamic dependencies, enabling correct and minimal incremental builds. PIE is efficient, only checking and executing tasks that have been affected by a change. Finally, PIE is expressive, as build engineers write their build scripts in a full-fledged programming language, without having to resort to workarounds or complicated design patterns." researchr: "https://researchr.org/publication/KonatSEV19" cites: 0 citedby: 0 booktitle: "Second Workshop on Incremental Computing (IC 2019)" kind: "inproceedings" key: "KonatSEV19" - title: "Integrated language definition testing: enabling test-driven language development" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2048066.2048080" abstract: "The reliability of compilers, interpreters, and development environments for programming languages is essential for effective software development and maintenance. They are often tested only as an afterthought. Languages with a smaller scope, such as domain-specific languages, often remain untested. General-purpose testing techniques and test case generation methods fall short in providing a low-threshold solution for test-driven language development. In this paper we introduce the notion of a language-parametric testing language (LPTL) that provides a reusable, generic basis for declaratively specifying language definition tests. We integrate the syntax, semantics, and editor services of a language under test into the LPTL for writing test inputs. This paper describes the design of an LPTL and the tool support provided for it, shows use cases using examples, and describes our implementation in the form of the Spoofax testing language." links: doi: "http://doi.acm.org/10.1145/2048066.2048080" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/KatsVV11" researchr: "https://researchr.org/publication/KatsVV11" cites: 0 citedby: 0 pages: "139-154" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsVV11" - title: "Towards Zero-Overhead Disambiguation of Deep Priority Conflicts" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Michael J. Steindorfer" link: "http://michael.steindorfer.name" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.22152/programming-journal.org/2018/2/13" abstract: "Context Context-free grammars are widely used for language prototyping and implementation. They allow formalizing the syntax of domain-specific or general-purpose programming languages concisely and declaratively. However, the natural and concise way of writing a context-free grammar is often ambiguous. Therefore, grammar formalisms support extensions in the form of declarative disambiguation rules to specify operator precedence and associativity, solving ambiguities that are caused by the subset of the grammar that corresponds to expressions. Inquiry Implementing support for declarative disambiguation within a parser typically comes with one or more of the following limitations in practice: a lack of parsing performance, or a lack of modularity (i.e., disallowing the composition of grammar fragments of potentially different languages). The latter subject is generally addressed by scannerless generalized parsers. We aim to equip scannerless generalized parsers with novel disambiguation methods that are inherently performant, without compromising the concerns of modularity and language composition. Approach In this paper, we present a novel low-overhead implementation technique for disambiguating deep associativity and priority conflicts in scannerless generalized parsers with lightweight data-dependency. Knowledge Ambiguities with respect to operator precedence and associativity arise from combining the various operators of a language. While shallow conflicts can be resolved efficiently by one-level tree patterns, deep conflicts require more elaborate techniques, because they can occur arbitrarily nested in a tree. Current state-of-the-art approaches to solving deep priority conflicts come with a severe performance overhead. Grounding We evaluated our new approach against state-of-the-art declarative disambiguation mechanisms. By parsing a corpus of popular open-source repositories written in Java and OCaml, we found that our approach yields speedups of up to 1.73x over a grammar rewriting technique when parsing programs with deep priority conflicts—with a modest overhead of 1–2 % when parsing programs without deep conflicts. Importance A recent empirical study shows that deep priority conflicts are indeed wide-spread in real-world programs. The study shows that in a corpus of popular OCaml projects on Github, up to 17 % of the source files contain deep priority conflicts. However, there is no solution in the literature that addresses efficient disambiguation of deep priority conflicts, with support for modular and composable syntax definitions." links: doi: "https://doi.org/10.22152/programming-journal.org/2018/2/13" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/programming/AmorimSV18" "pdf": "https://arxiv.org/pdf/1803.10215v1" researchr: "https://researchr.org/publication/AmorimSV18" cites: 0 citedby: 0 journal: "Programming" volume: "2" number: "3" pages: "13" kind: "article" key: "AmorimSV18" - title: "Mixing source and bytecode: a case for compilation by normalization" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://doi.acm.org/10.1145/1449764.1449772" abstract: "Language extensions increase programmer productivity by providing concise, often domain-specific syntax, and support for static verification of correctness, security, and style constraints. Language extensions can often be realized through translation to the base language, supported by preprocessors and extensible compilers. However, various kinds of extensions require further adaptation of a base compiler's internal stages and components, for example to support separate compilation or to make use of low-level primitives of the platform (e.g., jump instructions or unbalanced synchronization). To allow for a more loosely coupled approach, we propose an open compiler model based on normalization steps from a high-level language to a subset of it, the core language. We developed such a compiler for a mixed Java and (core) bytecode language, and evaluate its effectiveness for composition mechanisms such as traits, as well as statement-level and expression-level language extensions. " links: doi: "http://doi.acm.org/10.1145/1449764.1449772" "technical report (pdf)": "http://www.lclnet.nl/publications/TUD-SERG-2008-030.pdf" "project home page": "http://www.strategoxt.org/Stratego/TheDryadCompiler" tags: - "compilation by normalization" - "rule-based" - "Java" - "synchronization" - "translation" - "meta-model" - "modeling language" - "Stratego/XT" - "language modeling" - "composition" - "constraints" - "source-to-source" - "C++" - "Dryad" - "security" - "compiler" - "Meta-Environment" - "extensible language" - "systematic-approach" - "open-source" - "Stratego" - "JavaFront" - "domain-specific language" researchr: "https://researchr.org/publication/KatsBV08" cites: 44 citedby: 3 pages: "91-108" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsBV08" - title: "A Family of Syntax Definition Formalisms" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1995" month: "May" abstract: "In this paper we design a syntax definition formalism as a family of formalisms. Starting with a small kernel, several features for syntax definition are designed orthogonally to each other. This provides a framework for constructing new formalisms by adapting and extending old ones. The formalism is developed with the algebraic specification formalism ASF+SDF. It provides the following features: lexical and context-free syntax, variables, disambiguation by priorities, regular expressions, character classes and modular definitions. New are the uniform treatment of lexical syntax, context-free syntax and variables, the treatment of regular expressions by normalization yielding abstract syntax without auxiliary sorts, regular expressions as result of productions and modules with hidden imports and renamings." links: successor: "https://researchr.org/publication/Visser97-SDF" "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/P9504-7.ps" tags: - "syntax definition" - "SDF" - "lexical syntax" - "syntax definition formalism" - "abstract syntax" - "disambiguation" - "algebraic specification" - " algebra" - "context-aware" - "parsing" - "design" - "ASF+SDF" researchr: "https://researchr.org/publication/Visser95" cites: 0 citedby: 0 booktitle: "ASF+SDF" kind: "inproceedings" key: "Visser95" - title: "Building Program Optimizers with Rewriting Strategies" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Zine-El-Abidine Benaissa" link: "http://web.archive.org/web/20010515202744/www.cse.ogi.edu/~benaissa/" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" year: "1998" doi: "http://doi.acm.org/10.1145/289423.289425" abstract: "We describe a language for defining term rewriting strategies, and its application to the production of program optimizers. Valid transformations on program terms can be described by a set of rewrite rules; rewriting strategies are used to describe when and how the various rules should be applied in order to obtain the desired optimization effects. Separating rules from strategies in this fashion makes it easier to reason about the behavior of the optimizer as a whole, compared to traditional monolithic optimizer implementations. We illustrate the expressiveness of our language by using it to describe a simple optimizer for an ML-like intermediate representation.The basic strategy language uses operators such as sequential composition, choice, and recursion to build transformers from a set of labeled unconditional rewrite rules. We also define an extended language in which the side-conditions and contextual rules that arise in realistic optimizer specifications can themselves be expressed as strategy-driven rewrites. We show that the features of the basic and extended languages can be expressed by breaking down the rewrite rules into their primitive building blocks, namely matching and building terms in variable binding environments. This gives us a low-level core language which has a clear semantics, can be implemented straightforwardly and can itself be optimized. The current implementation generates C code from a strategy specification. " links: doi: "http://doi.acm.org/10.1145/289423.289425" "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/VBT98.ps" tags: - "programming languages" - "optimization" - "semantics" - "rule-based" - "meta programming" - "graph transformation" - "variable binding" - "Stratego/XT" - "transformation language" - "term rewriting" - "composition" - "graph-rewriting" - "rules" - "C++" - "program optimization" - "Meta-Environment" - "higher-order transformations" - "rewriting" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/VisserBT98" cites: 0 citedby: 5 pages: "13-26" booktitle: "ICFP" kind: "inproceedings" key: "VisserBT98" - title: "Declarative specification of template-based textual editors" author: - name: "Tobi Vollebregt" link: "http://www.tobivollebregt.nl/" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "http://doi.acm.org/10.1145/2427048.2427056" abstract: "Syntax discoverability has been a crucial advantage of structure editors for new users of a language. Despite this advantage, structure editors have not been widely adopted. Based on immediate parsing and analyses, modern textual code editors are also increasingly syntax-aware: structure and textual editors are converging into a new editing paradigm that combines text and templates. Current text-based language workbenches require redundant specification of the ingredients for a template-based editor, which is detrimental to the quality of syntactic completion, as consistency and completeness of the definition cannot be guaranteed. In this paper we describe the design and implementation of a specification language for syntax definition based on templates. It unifies the specification of parsers, unparsers and template-based editors. We evaluate the template language by application to two domain-specific languages used for tax benefits and mobile applications. " links: doi: "http://doi.acm.org/10.1145/2427048.2427056" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ldta/VollebregtKV12" researchr: "https://researchr.org/publication/VollebregtKV12" cites: 0 citedby: 0 pages: "1-7" booktitle: "LDTA" kind: "inproceedings" key: "VollebregtKV12" - title: "Meta-programming with Concrete Object Syntax" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1007/3-540-45821-2_19" abstract: "Meta programs manipulate structured representations, i.e., abstract syntax trees, of programs. The conceptual distance between the concrete syntax meta-programmers use to reason about programs and the notation for abstract syntax manipulation provided by general purpose (meta-) programming languages is too great for many applications. In this paper it is shown how the syntax definition formalism SDF can be employed to fit any meta-programming language with concrete syntax notation for composing and analyzing object programs. As a case study, the addition of concrete syntax to the program transformation language Stratego is presented. The approach is then generalized to arbitrary meta-languages. " links: doi: "https://doi.org/10.1007/3-540-45821-2_19" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "concrete object syntax" - "syntax definition" - "meta programming" - "case study" - "SDF" - "meta-model" - "abstract syntax" - "Stratego/XT" - "transformation language" - "source-to-source" - "model transformation" - "programming" - "subject-oriented programming" - "Meta-Environment" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser02" cites: 23 citedby: 6 pages: "299-315" booktitle: "GPCE" kind: "inproceedings" key: "Visser02" - title: "Code Generation by Model Transformation" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1007/978-3-540-69927-9_13" abstract: "The realization of model-driven software development requires effective techniques for implementing code generators. In this paper, we present a case study of code generation by model transformation with Stratego, a high-level transformation language based on the paradigm of rewrite rules with programmable strategies that integrates model-to-model, model-to-code, and code-to-code transformations. The use of concrete object syntax guarantees syntactic correctness of code patterns, and enables the subsequent transformation of generated code. The composability of strategies supports two dimensions of transformation modularity. Vertical modularity is achieved by designing a generator as a pipeline of model-to-model transformations that gradually transforms a high-level input model to an implementation. Horizontal modularity is achieved by supporting the definition of plugins which implement all aspects of a language feature. We discuss the application of these techniques in the implementation of WebDSL, a domain-specific language for dynamic web applications with a rich data model. " links: doi: "http://dx.doi.org/10.1007/978-3-540-69927-9_13" successor: "https://researchr.org/publication/HemelKGV10" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-012.pdf" tags: - "programming languages" - "model-to-model transformation" - "object-oriented programming" - "WebDSL" - "concrete object syntax" - "rule-based" - "transformation engineering" - "syntax definition" - "meta programming" - "data-flow language" - "pattern language" - "case study" - "graph transformation" - "meta-model" - "modeling language" - "modeling" - "language engineering" - "transformation language" - "software language engineering" - "language modeling" - "web engineering" - "data-flow programming" - "model-driven development" - "data-flow" - "source-to-source" - "graph-rewriting" - "software engineering" - "rules" - "model-driven engineering" - "C++" - "programming paradigms" - "code generation" - "object-role modeling" - "aspect oriented programming" - "model transformation" - "web applications" - "DSL" - "subject-oriented programming" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "open-source" - "meta-objects" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/HemelKV08" cites: 0 citedby: 3 pages: "183-198" booktitle: "ICMT" kind: "inproceedings" key: "HemelKV08" - title: "Pure and declarative syntax definition: paradise lost and regained" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2010" doi: "http://doi.acm.org/10.1145/1869459.1869535" abstract: "Syntax definitions are pervasive in modern software systems, and serve as the basis for language processing tools like parsers and compilers. Mainstream parser generators pose restrictions on syntax definitions that follow from their implementation algorithm. They hamper evolution, maintainability, and compositionality of syntax definitions. The pureness and declarativity of syntax definitions is lost. We analyze how these problems arise for different aspects of syntax definitions, discuss their consequences for language engineers, and show how the pure and declarative nature of syntax definitions can be regained." links: doi: "http://doi.acm.org/10.1145/1869459.1869535" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/KatsVW10" "pdf (tech report)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2010-019.pdf" tags: - "parsing algorithm" - "syntax definition" - "composition" - "software evolution" - "C++" - "compiler" - "parsing" researchr: "https://researchr.org/publication/KatsVW10" cites: 0 citedby: 1 pages: "918-932" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsVW10" - title: "A constraint language for static semantic analysis based on scope graphs" author: - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2016" doi: "http://doi.acm.org/10.1145/2847538.2847543" abstract: "In previous work, we introduced scope graphs as a formalism for describing program binding structure and performing name resolution in an AST-independent way. In this paper, we show how to use scope graphs to build static semantic analyzers. We use constraints extracted from the AST to specify facts about binding, typing, and initialization. We treat name and type resolution as separate building blocks, but our approach can handle language constructs -- such as record field access -- for which binding and typing are mutually dependent. We also refine and extend our previous scope graph theory to address practical concerns including ambiguity checking and support for a wider range of scope relationships. We describe the details of constraint generation for a model language that illustrates many of the interesting static analysis issues associated with modules and records. " links: doi: "http://doi.acm.org/10.1145/2847538.2847543" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/pepm/AntwerpenNTVW16" researchr: "https://researchr.org/publication/AntwerpenNTVW16" cites: 0 citedby: 0 pages: "49-60" booktitle: "PEPM" kind: "inproceedings" key: "AntwerpenNTVW16" - title: "A Constraint Language for Static Semantic Analysis based on Scope Graphs with Proofs" author: - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2015" month: "September" abstract: "In previous work, we introduced scope graphs as a formalism for describing program binding structure and performing name resolution in an AST-independent way. In this paper, we show how to use scope graphs to build static semantic analyzers. We use constraints extracted from the AST to specify facts about binding, typing, and initialization. We treat name and type resolution as separate building blocks, but our approach can handle language constructs—such as record field access—for which binding and typing are mutually dependent. We also refine and extend our previous scope graph theory to address practical concerns including ambiguity checking and support for a wider range of scope relationships. We describe the details of constraint generation for a model language that illustrates many of the interesting static analysis issues associated with modules and records." links: "pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2015-009.pdf" researchr: "https://researchr.org/publication/TUD-SERG-2015-009" cites: 0 citedby: 0 institution: "Software Engineering Research Group, Delft University of Technology" number: "TUD-SERG-2015-009" kind: "techreport" key: "TUD-SERG-2015-009" - title: "Program Transformation with Stratego/XT: Rules, Strategies, Tools, and Systems in Stratego/XT 0.9" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2003" doi: "https://doi.org/10.1007/978-3-540-25935-0_13" abstract: "Stratego/XT is a framework for the development of transformation systems aiming to support a wide range of program transformations. The framework consists of the transformation language Stratego and the XT collection of transformation tools. Stratego is based on the paradigm of rewriting under the control of programmable rewriting strategies. The XT tools provide facilities for the infrastructure of transformation systems including parsing and pretty-printing. The framework addresses the entire range of the development process; from the specification of transformations to their composition into transformation systems. This chapter gives an overview of the main ingredients involved in the composition of transformation systems with Stratego/XT, where we distinguish the abstraction levels of rules, strategies, tools, and systems." links: doi: "https://doi.org/10.1007/978-3-540-25935-0_13" successor: "https://researchr.org/publication/BravenboerKVV06" "springer": "http://www.springerlink.com/content/my9we5tj86u2f59n/" tags: - "control systems" - "programming languages" - "rule-based" - "graph transformation" - "Stratego/XT" - "transformation language" - "composition" - "graph-rewriting" - "rules" - "programming paradigms" - "transformation system" - "abstraction" - "rewriting" - "parsing" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/Visser03" cites: 0 citedby: 4 pages: "216-238" booktitle: "Dagstuhl" kind: "inproceedings" key: "Visser03" - title: "XT: a bundle of program transformation tools" author: - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Joost Visser" link: "http://www.di.uminho.pt/~joost.visser/" year: "2001" doi: "http://dx.doi.org/10.1016/S1571-0661(04)80921-6" abstract: "XT bundles existing and newly developed program transformation libraries and tools into an open framework that supports component-based development of program transformations. We discuss the roles of XT's constituents in the development process of program transformation tools, as well as some experiences with building program transformation systems with XT. " links: doi: "http://dx.doi.org/10.1016/S1571-0661(04)80921-6" successor: "https://researchr.org/publication/BravenboerKVV06" tags: - "model-to-model transformation" - "rule-based" - "Stratego/XT" - "model-driven development" - "source-to-source" - "transformation system" - "model transformation" - "programming" - "open-source" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/JongeVV01" cites: 0 citedby: 0 journal: "ENTCS" volume: "44" number: "2" pages: "79-86" kind: "article" key: "JongeVV01" - title: "A survey of strategies in rule-based program transformation systems" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://dx.doi.org/10.1016/j.jsc.2004.12.011" abstract: "Program transformation is the mechanical manipulation of a program in order to improve it relative to some cost function and is understood broadly as the domain of computation where programs are the data. The natural basic building blocks of the domain of program transformation are transformation rules expressing a ?one-step? transformation on a fragment of a program. The ultimate perspective of research in this area is a high-level, language parametric, rule-based program transformation system, which supports a wide range of transformations, admitting efficient implementations that scale to large programs. This situation has not yet been reached, as trade-offs between different goals need to be made. This survey gives an overview of issues in rule-based program transformation systems, focusing on the expressivity of rule-based program transformation systems and in particular on transformation strategies available in various approaches. The survey covers term rewriting, extensions of basic term rewriting, tree parsing strategies, systems with programmable strategies, traversal strategies, and context-sensitive rules." links: doi: "http://dx.doi.org/10.1016/j.jsc.2004.12.011" tags: - "programming languages" - "transformation strategy" - "tree parsing" - "rule-based" - "attribute grammars" - "tree traversal" - "data-flow language" - "pattern language" - "generic programming" - "congruence operators" - "transformation strategies" - "graph transformation" - "traversal" - "transformation language" - "term rewriting" - "generic traversal strategies" - "tree pattern matching" - "data-flow programming" - "program transformation system" - "data-flow" - "graph-rewriting" - "survey" - "rules" - "pattern matching" - "strategy annotations" - "strategy combinators" - "transformation system" - "program representation" - "programming" - "context-aware" - "rule-based program transformation" - "context-sensitive transformation" - "higher-order transformations" - "rewriting" - "parsing" - "systematic-approach" - "rewriting strategies" - "transformation" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/Visser05" cites: 1 citedby: 1 journal: "JSC" volume: "40" number: "1" pages: "831-873" kind: "article" key: "Visser05" - title: "Interactive Disambiguation of Meta Programs with Concrete Object Syntax" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://dx.doi.org/10.1007/978-3-642-19440-5_22" abstract: "In meta-programming with concrete object syntax, meta programs can be written using the concrete syntax of manipulated programs. Quotations of concrete syntax fragments and anti-quotations for meta-level expressions and variables are used to manipulate the abstract representation of programs. These small, isolated fragments are often ambiguous and must be explicitly disambiguated with quotation tags or types, using names from the non-terminals of the object language syntax. Discoverability of these names has been an open issue, as they depend on the (grammar) implementation and are not part of the concrete syntax of a language. Based on advances in interactive development environments, we introduce interactive disambiguation to address this issue, providing real-time feedback and proposing quick fixes in case of ambiguities. " links: doi: "http://dx.doi.org/10.1007/978-3-642-19440-5_22" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/KatsKV10" tags: - "programming languages" - "object-oriented programming" - "concrete object syntax" - "rule-based" - "meta programming" - "meta-model" - "abstract syntax" - "tagging" - "disambiguation" - "model-driven development" - "source-to-source" - "C++" - "programming" - "subject-oriented programming" - "Meta-Environment" - "feature-oriented programming" - "concrete syntax" - "open-source" - "meta-objects" - "grammar" researchr: "https://researchr.org/publication/KatsKV10-SLE" cites: 0 citedby: 0 pages: "327-336" booktitle: "SLE" kind: "inproceedings" key: "KatsKV10-SLE" - title: "Declarative specification of indentation rules: a tooling perspective on parsing and pretty-printing layout-sensitive languages" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Michael J. Steindorfer" link: "http://michael.steindorfer.name" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3276604.3276607" abstract: " In layout-sensitive languages, the indentation of an expression or statement can influence how a program is parsed. While some of these languages (e.g., Haskell and Python) have been widely adopted, there is little support for software language engineers in building tools for layout-sensitive languages. As a result, parsers, pretty-printers, program analyses, and refactoring tools often need to be handwritten, which decreases the maintainability and extensibility of these tools. Even state-of-the-art language workbenches have little support for layout-sensitive languages, restricting the development and prototyping of such languages. In this paper, we introduce a novel approach to declarative specification of layout-sensitive languages using layout declarations. Layout declarations are high-level specifications of indentation rules that abstract from low-level technicalities. We show how to derive an efficient layout-sensitive generalized parser and a corresponding pretty-printer automatically from a language specification with layout declarations. We validate our approach in a case-study using a syntax definition for the Haskell programming language, investigating the performance of the generated parser and the correctness of the generated pretty-printer against 22191 Haskell files. " links: doi: "https://doi.org/10.1145/3276604.3276607" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/AmorimSEV18" researchr: "https://researchr.org/publication/AmorimSEV18" cites: 0 citedby: 0 pages: "3-15" booktitle: "SLE" kind: "inproceedings" key: "AmorimSEV18" - title: "Concrete syntax for objects: domain-specific language embedding and assimilation without restrictions" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2004" doi: "http://doi.acm.org/10.1145/1028976.1029007" abstract: "Application programmer's interfaces give access to domain knowledge encapsulated in class libraries without providing the appropriate notation for expressing domain composition. Since object-oriented languages are designed for extensibility and reuse, the language constructs are often sufficient for expressing domain abstractions at the semantic level. However, they do not provide the right abstractions at the syntactic level. In this paper we describe MetaBorg, a method for providing concrete syntax for domain abstractions to application programmers. The method consists of embedding domain-specific languages in a general purpose host language and assimilating the embedded domain code into the surrounding host code. Instead of extending the implementation of the host language, the assimilation phase implements domain abstractions in terms of existing APIs leaving the host language undisturbed. Indeed, MetaBorg can be considered a method for promoting APIs to the language level. The method is supported by proven and available technology, i.e. the syntax definition formalism SDF and the program transformation language and toolset Stratego/XT. We illustrate the method with applications in three domains: code generation, XML generation, and user-interface construction." links: doi: "http://doi.acm.org/10.1145/1028976.1029007" tags: - "programming languages" - "object-oriented programming" - "concrete object syntax" - "syntax definition" - "meta programming" - "assimilation" - "SDF" - "XML" - "XML Schema" - "Stratego/XT" - "transformation language" - "composition" - "MetaBorg" - "language design" - "reuse" - "code generation" - "subject-oriented programming" - "abstraction" - "Meta-Environment" - "extensible language" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV04" cites: 51 citedby: 8 pages: "365-383" booktitle: "OOPSLA" kind: "inproceedings" key: "BravenboerV04" - title: "PIE: A Domain-Specific Language for Interactive Software Development Pipelines" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Michael J. Steindorfer" link: "http://michael.steindorfer.name" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.22152/programming-journal.org/2018/2/9" abstract: "Context. Software development pipelines are used for automating essential parts of software engineering processes, such as build automation and continuous integration testing. In particular, interactive pipelines, which process events in a live environment such as an IDE, require timely results for low-latency feedback, and persistence to retain low-latency feedback between restarts. Inquiry. Developing an incrementalized and persistent version of a pipeline is one way to reduce feedback latency, but requires implementation of dependency tracking, cache invalidation, and other complicated and error-prone techniques. Therefore, interactivity complicates pipeline development if timeliness and persistence become responsibilities of the pipeline programmer, rather than being supported by the underlying system. Systems for programming incremental and persistent pipelines exist, but do not focus on ease of development, requiring a high degree of boilerplate, increasing development and maintenance effort. Approach. We develop Pipelines for Interactive Environments (PIE), a Domain-Specific Language (DSL), API, and runtime for developing interactive software development pipelines, where ease of development is a focus. The PIE DSL is a statically typed and lexically scoped language. PIE programs are compiled to programs implementing the API, which the PIE runtime executes in an incremental and persistent way. Knowledge. PIE provides a straightforward programming model that enables direct and concise expression of pipelines without boilerplate, reducing the development and maintenance effort of pipelines. Compiled pipeline programs can be embedded into interactive environments such as code editors and IDEs, enabling timely feedback at a low cost. Grounding. Compared to the state of the art, PIE reduces the code required to express an interactive pipeline by a factor of 6 in a case study on syntax-aware editors. Furthermore, we evaluate PIE in two case studies of complex interactive software development scenarios, demonstrating that PIE can handle complex interactive pipelines in a straightforward and concise way. Importance. Interactive pipelines are complicated software artifacts that power many important systems such as continuous feedback cycles in IDEs and code editors, and live language development in language workbenches. New pipelines, and evolution of existing pipelines, is frequently necessary. Therefore, a system for easily developing and maintaining interactive pipelines, such as PIE, is important." links: doi: "https://doi.org/10.22152/programming-journal.org/2018/2/9" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/programming/KonatSEV18" researchr: "https://researchr.org/publication/KonatSEV18" cites: 0 citedby: 0 journal: "Programming" volume: "2" number: "3" pages: "9" kind: "article" key: "KonatSEV18" - title: "IceDust 2: Derived Bidirectional Relations and Calculation Strategy Composition (Artifact)" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "https://doi.org/10.4230/DARTS.3.2.1" abstract: " This artifact is based on IceDust2, a data modeling language with derived values. The provided package is designed to support the claims of the companion paper: in particular, it allows users to compile and run IceDust2 specifications. Instructions for building the IceDust2 compiler from source in Spoofax are also provided. " links: doi: "https://doi.org/10.4230/DARTS.3.2.1" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/darts/HarkesV17" researchr: "https://researchr.org/publication/HarkesV17-ART" cites: 0 citedby: 0 journal: "darts" volume: "3" number: "2" kind: "article" key: "HarkesV17-ART" - title: "Growing a language environment with editor libraries" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Tillmann Rendel" link: "http://www.informatik.uni-marburg.de/~rendel/" - name: "Christian Kästner" link: "http://wwwiti.cs.uni-magdeburg.de/~ckaestne/" - name: "Klaus Ostermann" link: "http://www.informatik.uni-marburg.de/~kos/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2047862.2047891" abstract: "Large software projects consist of code written in a multitude of different (possibly domain-specific) languages, which are often deeply interspersed even in single files. While many proposals exist on how to integrate languages semantically and syntactically, the question of how to support this scenario in integrated development environments (IDEs) remains open: How can standard IDE services, such as syntax highlighting, outlining, or reference resolving, be provided in an extensible and compositional way, such that an open mix of languages is supported in a single file? Based on our library-based syntactic extension language for Java, SugarJ, we propose to make IDEs extensible by organizing editor services in editor libraries. Editor libraries are libraries written in the object language, SugarJ, and hence activated and composed through regular import statements on a file-by-file basis. We have implemented an IDE for editor libraries on top of SugarJ and the Eclipse-based Spoofax language workbench. We have validated editor libraries by evolving this IDE into a fully-fledged and schema-aware XML editor as well as an extensible Latex editor, which we used for writing this paper. " links: doi: "http://doi.acm.org/10.1145/2047862.2047891" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/gpce/ErdwegKRKOV11" researchr: "https://researchr.org/publication/ErdwegKRKOV11gpce" cites: 0 citedby: 0 pages: "167-176" booktitle: "GPCE" kind: "inproceedings" key: "ErdwegKRKOV11gpce" - title: "Strategies for Source-to-Source Constant Progagation" author: - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2002" doi: "https://doi.org/10.1016/S1571-0661(04)80605-4" abstract: "Data-flow optimizations are usually implemented on low-level intermediate repre- sentations. This is not appropriate for source-to-source optimizations, which re- construct a source level program after transformation. In this paper we show how constant propagation, a well known data-flow optimization problem, can be imple- mented on abstract syntax trees in Stratego, a rewriting system extended with programmable rewriting strategies for the control over the application of rules and dynamic rewrite rules for the propagation of information. " links: doi: "https://doi.org/10.1016/S1571-0661(04)80605-4" tags: - "control systems" - "model-to-model transformation" - "optimization" - "rule-based" - "graph transformation" - "dynamic rewrite rules" - "abstract syntax" - "Stratego/XT" - "data-flow programming" - "data-flow" - "source-to-source" - "graph-rewriting" - "rules" - "transformation system" - "model transformation" - "program optimization" - "rewriting" - "constant propagation" - "rewriting strategies" - "open-source" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/OlmosV02" cites: 0 citedby: 0 journal: "ENTCS" volume: "70" number: "6" pages: "156-175" kind: "article" key: "OlmosV02" - title: "Toward a Language-Parametric Code Completion Editor Service" author: - name: "Daniel A. A. Pelsmaeker" link: "https://researchr.org/alias/daniel-a.-a.-pelsmaeker" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" abstract: "Code completion is an editor service that suggests keywords and identifiers that are relevant at the caret location in the editor, from which the user can choose to either insert one or continue typing. This reduces coding errors and aids in discovering the possibilities in a language or API. Providing a code completion editor service for a new programming language requires development effort in addition to the effort required for defining the language. The goal of this work is to automatically produce an intelligent editor-agnostic code completion editor service that is parameterized only by the declarative specification of the language. We implement our approach in the Spoofax language workbench, which enables language developers to provide a declarative specification of their new programming language. We will use the declarative specification to produce a platform-agnostic code completion editor service for Spoofax languages automatically" researchr: "https://researchr.org/publication/PelsmaekerV18" cites: 0 citedby: 0 howpublished: "Poster at SPLASH" kind: "misc" key: "PelsmaekerV18" - title: "Bootstrapping, Default Formatting, and Skeleton Editing in the Spoofax Language Workbench" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" abstract: "Language workbenches are tools that help language designers to design and implement (domain-specific) programming languages, aiming to produce a full featured programming environment from a high-level language description. A recent paper, resulting from a series of language workbench challenge workshops, describes a collection of benchmark problems for language workbench research [5]. In this paper, we describe solutions to two of these benchmark problems in the Spoofax Language Workbench [6], i.e. default formatting in Section 3 and skeleton editing in Section 4. In addition, we introduce a new benchmark problem — bootstrapping of meta-languages in a workbench — and describe the support for bootstrapping we developed for Spoofax in Section 2." researchr: "https://researchr.org/publication/KonatAEV16" cites: 0 citedby: 0 howpublished: "Language Workbench Challenge (LWC@SLE)" kind: "misc" key: "KonatAEV16" - title: "Grace in Spoofax: Readable Specification and Implementation in One" author: - name: "Michiel Haisma" link: "https://www.linkedin.com/in/michiel-haisma-b0357149" - name: "Vlad Vergu" link: "http://www.bitbang.nl" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" researchr: "https://researchr.org/publication/HaismaVV17" cites: 0 citedby: 0 howpublished: "Presented at GRACE 2016" kind: "misc" key: "HaismaVV17" - title: "DSL Engineering - Designing, Implementing and Using Domain-Specific Languages" author: - name: "Markus Völter" link: "http://www.voelter.de/" - name: "Sebastian Benz" link: "http://" - name: "Christian Dietrich" link: "https://researchr.org/alias/christian-dietrich" - name: "Birgit Engelmann" link: "https://researchr.org/alias/birgit-engelmann" - name: "Mats Helander" link: "https://researchr.org/alias/mats-helander" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" year: "2013" doi: "http://www.dslbook.org" abstract: "This book covers DSL Design, Implementation and Use of DSL in detail. It consists of four parts. Part 1 introduces DSLs in general and discusses their advantages and drawbacks. It also defines important terms and concepts and introduces the case studies used in the most of the re-mainder of the book. Part 2 discusses the design of DSLs – independent of implementation techniques. It discusses seven design dimensions, explains a number of reusable language paradigms and points out a number of process-related issues. Part 3 provides details about the implementation of DSLs with lots of code. It uses three state-of-the-art but quite different language workbenches: Jet-Brains MPS, Eclipse Xtext and TU Delft’s Spoofax. Part 4 discusses the use of DSLs for requirements, architecture, implementation and product line engineering, as well as their roles as a developer utility and for implementing business logic." links: doi: "http://www.dslbook.org" dblp: "http://dblp.uni-trier.de/rec/bibtex/books/daglib/0030751" researchr: "https://researchr.org/publication/DslEngineering2013" cites: 0 citedby: 0 publisher: "dslbook.org" isbn: "978-1-4812-1858-0" kind: "book" key: "DslEngineering2013" - title: "The Spoofax Name Binding Language" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "https://doi.org/10.1145/2384716.2384748" abstract: "In textual software languages, names are used to identify program elements such as variables, methods, and classes. Name analysis algorithms resolve names in order to establish references between definitions and uses of names. In this poster, we present the Spoofax Name Binding Language (NBL), a declarative meta-language for the specification of name binding and scope rules, which departs from the programmatic encodings of name binding provided by regular approaches. NBL aspires to become the universal language for name binding, which can be used next to BNF definitions in reference manuals, as well as serve the generation of implementations." links: doi: "https://doi.org/10.1145/2384716.2384748" "url": "https://doi.org/10.1145/2384716.2384748" tags: - "C++" - "Spoofax" researchr: "https://researchr.org/publication/KonatVKWV2012" cites: 0 citedby: 0 booktitle: "Companion to the 27th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2011, part of SPLASH 2012, Tucson, AR, USA, October 19 - 26, 2012" kind: "inproceedings" key: "KonatVKWV2012" - title: "The Spoofax language workbench: rules for declarative specification of languages and IDEs" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "https://doi.org/10.1145/1869459.1869497" abstract: "Spoofax is a language workbench for efficient, agile development of textual domain-specific languages with state-of-the-art IDE support. Spoofax integrates language processing techniques for parser generation, meta-programming, and IDE development into a single environment. It uses concise, declarative specifications for languages and IDE services. In this paper we describe the architecture of Spoofax and introduce idioms for high-level specifications of language semantics using rewrite rules, showing how analyses can be reused for transformations, code generation, and editor services such as error marking, reference resolving, and content completion. The implementation of these services is supported by language-parametric editor service classes that can be dynamically loaded by the Eclipse IDE, allowing new languages to be developed and used side-by-side in the same Eclipse environment." links: doi: "https://doi.org/10.1145/1869459.1869497" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/KatsV10" "acm dl": "https://doi.org/10.1145/1932682.1869497" tags: - "programming languages" - "model-to-model transformation" - "workbench" - "semantics" - "rule-based" - "Eclipse" - "meta programming" - "model editor" - "graph transformation" - "meta-model" - "transformation language" - "architecture" - "reuse" - "model-driven development" - "graph-rewriting" - "rules" - "C++" - "code completion" - "code generation" - "model transformation" - "programming" - "language workbench" - "Spoofax" - "Meta-Environment" - "rewriting" - "parsing" - "meta-objects" - "transformation" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/KatsV10" cites: 0 citedby: 2 pages: "444-463" booktitle: "OOPSLA" kind: "inproceedings" key: "KatsV10" - title: "A Language Independent Task Engine for Incremental Name and Type Analysis" author: - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2013" doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_15" abstract: "IDEs depend on incremental name and type analysis for responsive feedback for large projects. In this paper, we present a language-independent approach for incremental name and type analysis. Analysis consists of two phases. The first phase analyzes lexical scopes and binding instances and creates deferred analysis tasks. A task captures a single name resolution or type analysis step. Tasks might depend on other tasks and are evaluated in the second phase. Incrementality is supported on file and task level. When a file changes, only this file is recollected and only those tasks are reevaluated, which are affected by the changes in the collected data. The analysis does neither re-parse nor re-traverse unchanged files, even if they are affected by changes in other files. We implemented the approach as part of the Spoofax Language Workbench and evaluated it for the WebDSL web programming language. " links: doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_15" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/WachsmuthKVGV13" technicalreport: "https://researchr.org/publication/TUD-SERG-2013-018" researchr: "https://researchr.org/publication/WachsmuthKVGV13" cites: 0 citedby: 0 pages: "260-280" booktitle: "SLE" kind: "inproceedings" key: "WachsmuthKVGV13" - title: "Deep priority conflicts in the wild: a pilot study" author: - name: "Luis Eduardo de Souza Amorim" link: "https://www.linkedin.com/profile/view?id=136481548" - name: "Michael J. Steindorfer" link: "http://michael.steindorfer.name" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "http://doi.acm.org/10.1145/3136014.3136020" abstract: " Context-free grammars are suitable for formalizing the syntax of programming languages concisely and declaratively. Thus, such grammars are often found in reference manuals of programming languages, and used in language workbenches for language prototyping. However, the natural and concise way of writing a context-free grammar is often ambiguous. Safe and complete declarative disambiguation of operator precedence and associativity conflicts guarantees that all ambiguities arising from combining the operators of the language are resolved. Ambiguities can occur due to shallow conflicts, which can be captured by one-level tree patterns, and deep conflicts, which require more elaborate techniques. Approaches to solve deep priority conflicts include grammar transformations, which may result in large unambiguous grammars, or may require adapted parser technologies to include data-dependency tracking at parse time. In this paper we study deep priority conflicts \"in the wild\". We investigate the efficiency of grammar transformations to solve deep priority conflicts by using a lazy parse table generation technique. On top of lazily-generated parse tables, we define metrics, aiming to answer how often deep priority conflicts occur in real-world programs and to what extent programmers explicitly disambiguate programs themselves. By applying our metrics to a small corpus of popular open-source repositories we found that in OCaml, up to 17% of the source files contain deep priority conflicts. " links: doi: "http://doi.acm.org/10.1145/3136014.3136020" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/AmorimSV17" researchr: "https://researchr.org/publication/AmorimSV17" cites: 0 citedby: 0 pages: "55-66" booktitle: "SLE" kind: "inproceedings" key: "AmorimSV17" - title: "Designing Syntax Embeddings and Assimilations for Language Libraries" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" abstract: "Language libraries extend regular libraries with domain-specific notation. More precisely, a language library is a combination of a domain-specific language embedded in the general-purpose host language, a regular library implementing the underlying functionality, and an assimilation transformation that maps embedded DSL fragments to host language code. While the basic architecture for realizing language libraries is the same for all applications, there are many design choices to be made in the design of a particular combination of library, guest language syntax, host language, and assimilation. In this paper, we give an overview of the design space for syntax embeddings and assimilations for the realization of language libraries. " links: doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" technicalreport: "https://researchr.org/publication/TUD-SERG-2008-042" tags: - "syntax embedding" - "syntax definition" - "assimilation" - "transformation language" - "architecture" - "language design" - "DSL" - "language libraries" - "design" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV07" cites: 24 citedby: 1 pages: "34-46" booktitle: "MoDELS" kind: "inproceedings" key: "BravenboerV07" - title: "Knowing When to Ask: Sound scheduling of name resolution in type checkers derived from declarative specifications (Extended Version)" author: - name: "Arjen Rouvoet" link: "https://www.linkedin.com/in/arjen-rouvoet-760347a5/" - name: "Hendrik van Antwerpen" link: "https://nl.linkedin.com/in/hendrikvanantwerpen" - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Robbert Krebbers" link: "https://robbertkrebbers.nl" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" month: "Oct" doi: "http://doi.org/10.5281/zenodo.4091445" abstract: "There is a large gap between the specification of type systems and the implementation of their type checkers, which impedes reasoning about the soundness of the type checker with respect to the specification. A vision to close this gap is to automatically obtain type checkers from declarative programming language specifications. This moves the burden of proving correctness from a case-by-case basis for concrete languages to a single correctness proof for the specification language. This vision is obstructed by an aspect common to all programming languages: name resolution. Naming and scoping are pervasive and complex aspects of the static semantics of programming languages. Implementations of type checkers for languages with name binding features such as modules, imports, classes, and inheritance interleave collection of binding information (i.e., declarations, scoping structure, and imports) and querying that information. This requires scheduling those two aspects in such a way that query answers are stable---i.e., they are computed only after all relevant binding structure has been collected. Type checkers for concrete languages accomplish stability using language-specific knowledge about the type system. In this paper we give a language-independent characterization of necessary and sufficient conditions to guarantee stability of name and type queries during type checking in terms of critical edges in an incomplete scope graph. We use critical edges to give a formal small-step operational semantics to a declarative specification language for type systems, that achieves soundness by delaying queries that may depend on missing information. This yields type checkers for the specified languages that are sound by construction---i.e., they schedule queries so that the answers are stable, and only accept programs that are name- and type-correct according to the declarative language specification. We implement this approach, and evaluate it against specifications of a small module and record language, as well as subsets of Java and Scala." links: doi: "http://doi.org/10.5281/zenodo.4091445" successor: "https://researchr.org/publication/RouvoetAPKV20" researchr: "https://researchr.org/publication/RouvoetAPKV20-ext" cites: 0 citedby: 0 publisher: "Zenodo" kind: "inbook" key: "RouvoetAPKV20-ext" - title: "Knowing when to ask: sound scheduling of name resolution in type checkers derived from declarative specifications" author: - name: "Arjen Rouvoet" link: "https://www.linkedin.com/in/arjen-rouvoet-760347a5/" - name: "Hendrik van Antwerpen" link: "https://researchr.org/alias/hendrik-van-antwerpen" - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Robbert Krebbers" link: "https://researchr.org/alias/robbert-krebbers" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1145/3428248" abstract: "There is a large gap between the specification of type systems and the implementation of their type checkers, which impedes reasoning about the soundness of the type checker with respect to the specification. A vision to close this gap is to automatically obtain type checkers from declarative programming language specifications. This moves the burden of proving correctness from a case-by-case basis for concrete languages to a single correctness proof for the specification language. This vision is obstructed by an aspect common to all programming languages: name resolution. Naming and scoping are pervasive and complex aspects of the static semantics of programming languages. Implementations of type checkers for languages with name binding features such as modules, imports, classes, and inheritance interleave collection of binding information (i.e., declarations, scoping structure, and imports) and querying that information. This requires scheduling those two aspects in such a way that query answers are stable—i.e., they are computed only after all relevant binding structure has been collected. Type checkers for concrete languages accomplish stability using language-specific knowledge about the type system. In this paper we give a language-independent characterization of necessary and sufficient conditions to guarantee stability of name and type queries during type checking in terms of critical edges in an incomplete scope graph. We use critical edges to give a formal small-step operational semantics to a declarative specification language for type systems, that achieves soundness by delaying queries that may depend on missing information. This yields type checkers for the specified languages that are sound by construction—i.e., they schedule queries so that the answers are stable, and only accept programs that are name- and type-correct according to the declarative language specification. We implement this approach, and evaluate it against specifications of a small module and record language, as well as subsets of Java and Scala." links: doi: "https://doi.org/10.1145/3428248" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/pacmpl/RouvoetAPKV20" researchr: "https://researchr.org/publication/RouvoetAPKV20" cites: 0 citedby: 0 journal: "PACMPL" volume: "4" number: "OOPSLA" kind: "article" key: "RouvoetAPKV20" - title: "Gradually typing strategies" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1145/3426425.3426928" abstract: "The Stratego language supports program transformation by means of term rewriting with programmable rewriting strategies. Stratego's traversal primitives support concise definition of generic tree traversals. Stratego is a dynamically typed language because its features cannot be captured fully by a static type system. While dynamic typing makes for a flexible programming model, it also leads to unintended type errors, code that is harder to maintain, and missed opportunities for optimization. In this paper, we introduce a gradual type system for Stratego that combines the flexibility of dynamically typed generic programming, where needed, with the safety of statically declared and enforced types, where possible. To make sure that statically typed code cannot go wrong, all access to statically typed code from dynamically typed code is protected by dynamic type checks (casts). The type system is backwards compatible such that types can be introduced incrementally to existing Stratego programs. We formally define a type system for Core Gradual Stratego, discuss its implementation in a new type checker for Stratego, and present an evaluation of its impact on Stratego programs." links: doi: "https://doi.org/10.1145/3426425.3426928" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/SmitsV20" researchr: "https://researchr.org/publication/SmitsV20" cites: 0 citedby: 0 pages: "1-15" booktitle: "SLE" kind: "inproceedings" key: "SmitsV20" - title: "Unifying and Generalizing Relations in Role-Based Data Modeling and Navigation" author: - name: "Daco Harkes" link: "http://nl.linkedin.com/in/dcharkes" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://dx.doi.org/10.1007/978-3-319-11245-9_14" abstract: "Object-oriented programming languages support concise navigation of relations represented by references. However, relations are not first-class citizens and bidirectional navigation is not supported. The relational paradigm provides first-class relations, but with bidirectional navigation through verbose queries. We present a systematic analysis of approaches to modeling and navigating relations. By unifying and generalizing the features of these approaches, we developed the design of a data modeling language that features first-class relations, n-ary relations, native multiplicities, bidirectional relations and concise navigation." links: doi: "http://dx.doi.org/10.1007/978-3-319-11245-9_14" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/HarkesV14" "pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2014-023.pdf" researchr: "https://researchr.org/publication/HarkesV14" cites: 0 citedby: 0 pages: "241-260" booktitle: "SLE" kind: "inproceedings" key: "HarkesV14" - title: "Preventing injection attacks with syntax embeddings" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2010" doi: "http://dx.doi.org/10.1016/j.scico.2009.05.004" 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 context-free host and guest languages." links: doi: "http://dx.doi.org/10.1016/j.scico.2009.05.004" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/scp/BravenboerDV10" technicalreport: "https://researchr.org/publication/preprint-BravenboerDV-SCP-2009" tags: - "injection attack" researchr: "https://researchr.org/publication/BravenboerDV10" cites: 0 citedby: 0 journal: "SCP" volume: "75" number: "7" pages: "473-495" kind: "article" key: "BravenboerDV10" - title: "Declaratively programming the mobile web with Mobl" author: - name: "Zef Hemel" link: "http://zef.me" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2011" doi: "http://doi.acm.org/10.1145/2048066.2048121" abstract: "A new generation of mobile touch devices, such as the iPhone, iPad and Android devices, are equipped with powerful, modern browsers. However, regular websites are not optimized for the specific features and constraints of these devices, such as limited screen estate, unreliable Internet access, touch-based interaction patterns, and features such as GPS. While recent advances in web technology enable web developers to build web applications that take advantage of the unique properties of mobile devices, developing such applications exposes a number of problems, specifically: developers are required to use many loosely coupled languages with limited tool support and application code is often verbose and imperative. We introduce mobl, a new language designed to declaratively construct mobile web applications. Mobl integrates languages for user interface design, styling, data modeling, querying and application logic into a single, unified language that is flexible, expressive, enables early detection of errors, and has good IDE support." links: doi: "http://doi.acm.org/10.1145/2048066.2048121" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/HemelV11" technicalreport: "https://researchr.org/publication/HemelVisser2011-TUD-SERG-2011-024" researchr: "https://researchr.org/publication/HemelV11" cites: 0 citedby: 0 pages: "695-712" booktitle: "OOPSLA" kind: "inproceedings" key: "HemelV11" - title: "Scopes Describe Frames: A Uniform Model for Memory Layout in Dynamic Semantics (Artifact)" author: - name: "Casper Bach Poulsen" link: "http://www.casperbp.net" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2016" doi: "http://dx.doi.org/10.4230/DARTS.2.1.10" abstract: "Our paper introduces a systematic approach to the alignment of names in the static structure of a program, and memory layout and access during its execution. We develop a uniform memory model consisting of frames that instantiate the scopes in the scope graph of a program. This provides a language-independent correspondence between static scopes and run-time memory layout, and between static resolution paths and run-time memory access paths. The approach scales to a range of binding features, supports straightforward type soundness proofs, and provides the basis for a language-independent specification of sound reachability-based garbage collection. This Coq artifact showcases how our uniform model for memory layout in dynamic semantics provides structure to type soundness proofs. The artifact contains type soundness proofs mechanized in Coq for (supersets of) all languages in the paper. The type soundness proofs rely on a language-independent framework formalizing scope graphs and frame heaps." links: doi: "http://dx.doi.org/10.4230/DARTS.2.1.10" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/darts/PoulsenNTV16" researchr: "https://researchr.org/publication/PoulsenNTV16Artifact" cites: 0 citedby: 0 journal: "darts" volume: "2" number: "1" kind: "article" key: "PoulsenNTV16Artifact" - title: "Scannerless Generalized-LR Parsing" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "July" abstract: "Current deterministic parsing techniques have a number of problems. These include the limitations of parser generators for deterministic languages and the complex interface between scanner and parser. Scannerless parsing is a parsing technique in which lexical and context-free syntax are integrated into one grammar and are all handled by a single context-free analysis phase. This approach has a number of advantages including discarding of the scanner and lexical disambiguation by means of the context in which a lexical token occurs, Scannerless parsing generates a number of interesting problems as well. Integrated grammars do not fit the requirements of the conventional deterministic parsing techniques. A plain context-free grammar formalism leads to unwieldy grammars. if all lexical information is included. Lexical disambiguation needs to be reformulated for use in context-free parsing. The scannerless generalized-LR parsing approach presented in this paper solves these problems. Grammar normalization is used to support an expressive grammar formalism without complicating the underlying machinery. Follow restrictions are used to express longest match lexical disambiguation. Reject productions are used to express the prefer keywords rule for lexical disambiguation. The SLR parser generation algorithm is adapted to implement disambiguation by general priority and associativity declarations and to interpret follow restrictions. Generalized-LR parsing is used to provide dynamic lookahead and to support parsing of arbitrary context-free grammars including ambiguous ones. An adaptation of the GLR algorithm supports the interpretation of grammars with reject productions. " tags: - "parsing algorithm" - "GLR parsing" - "rule-based" - "SDF" - "lexical syntax" - "disambiguation" - "GLR" - "analysis" - "rules" - "context-aware" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "SGLR" - "grammar" researchr: "https://researchr.org/publication/Visser97-SGLR" cites: 0 citedby: 6 institution: "Programming Research Group, University of Amsterdam" number: "P9707" kind: "techreport" key: "Visser97-SGLR" - title: "Automated evaluation of syntax error recovery" author: - name: "Maartje de Jonge" link: "https://researchr.org/profile/maartjedejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "http://doi.acm.org/10.1145/2351676.2351736" abstract: "Evaluation of parse error recovery techniques is an open problem. The community lacks objective standards and methods to measure the quality of recovery results. This paper proposes an automated technique for recovery evaluation that offers a solution for two main problems in this area. First, a representative testset is generated by a mutation based fuzzing technique that applies knowledge about common syntax errors. Secondly, the quality of the recovery results is automatically measured using an oracle-based evaluation technique. We evaluate the validity of our approach by comparing results obtained by automated evaluation with results obtained by manual inspection. The evaluation shows a clear correspondence between our quality metric and human judgement. " links: doi: "http://doi.acm.org/10.1145/2351676.2351736" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/kbse/JongeV12" technicalreport: "https://researchr.org/publication/DeJongeVisser2012-TR" researchr: "https://researchr.org/publication/JongeV12" cites: 0 citedby: 0 pages: "322-325" booktitle: "ASE" kind: "inproceedings" key: "JongeV12" - title: "A Family of Syntax Definition Formalisms" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "1997" month: "August" abstract: "In the next chapters we present the design and specification of a family of syntax definition formalisms. The kernel of this family of formalisms is formed by context-free grammars. A number of orthogonal extensions to the kernel is defined. Many of these extensions are defined in terms of the primitives of the kernel by means of normalization functions. This provides a framework for constructing new formalisms by adapting and extending previous ones. Included in the family are the following extensions of context-free grammars, uniform definition of lexical and context-free syntax, variables, disambiguation by priorities, follow restrictions and reject productions, a rich set of regular expressions defined in terms of context-free productions, character classes, aliases, parameterized modules with hidden imports and renamings. The accumulation of these extensions is the syntax definition formalism SDF. This chapter provides an introduction to SDF and gives an overview of the design and specification of the family of formalisms." links: "postscript": "http://www.st.ewi.tudelft.nl/~eelco/papers/P9706.ps" tags: - "syntax definition" - "SDF" - "lexical syntax" - "scannerless" - "disambiguation" - "context-aware" - "parsing" - "design" - "scannerless parsing" - "ASF+SDF" - "grammar" researchr: "https://researchr.org/publication/Visser97-SDF" cites: 0 citedby: 2 institution: "Programming Research Group, University of Amsterdam" number: "P9706" kind: "techreport" key: "Visser97-SDF" - title: "Understanding software through linguistic abstraction" author: - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2015" doi: "http://dx.doi.org/10.1016/j.scico.2013.12.001" abstract: "In this essay, I argue that linguistic abstraction should be used systematically as a tool to capture our emerging understanding of domains of computation. Moreover, to enable that systematic application, we need to capture our understanding of the domain of linguistic abstraction itself in higher-level meta languages. The argument is illustrated with examples from the SDF, Stratego, Spoofax, and WebDSL projects in which I explore these ideas." links: doi: "http://dx.doi.org/10.1016/j.scico.2013.12.001" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/scp/Visser15" technicalreport: "https://researchr.org/publication/TUD-SERG-2013-017" "tech report pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2013-017.pdf" researchr: "https://researchr.org/publication/Visser15" cites: 0 citedby: 0 journal: "SCP" volume: "97" pages: "11-16" kind: "article" key: "Visser15" - title: "MetaBorg in Action: Examples of Domain-Specific Language Embedding and Assimilation Using Stratego/XT" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "René de Groot" link: "http://strategoxt.org/Main/ReneDeGroot" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://dx.doi.org/10.1007/11877028_10" abstract: "General-purpose programming languages provide limited facilities for expressing domain-specific concepts in a natural manner. All domain concepts need to be captured using the same generic syntactic and semantic constructs. Generative programming methods and program transformation techniques can be used to overcome this lack of abstraction in general-purpose languages. In this tutorial we describe the MetaBorg method for embedding domain-specific languages, tailored syntactically and semantically to the application domain at hand, in a general-purpose language. MetaBorg is based on Stratego/XT, a language and toolset for the implementation of program transformation systems, which is used for the definition of syntactic embeddings and assimilation of the embedded constructs into the surrounding code. We illustrate MetaBorg with three examples. JavaSwul is a custom designed language for implementing graphical user-interfaces, which provides high-level abstractions for component composition and event-handling. JavaRegex is a new embedding of regular expression matching and string rewriting. JavaJava is an embedding of Java in Java for generating Java code. For these cases we show how Java programs in these domains become dramatically more readable, and we give an impression of the implementation of the language embeddings. " links: doi: "http://dx.doi.org/10.1007/11877028_10" tags: - "generative programming" - "programming languages" - "rule-based" - "transformation engineering" - "Java" - "generic programming" - "assimilation" - "graph transformation" - "Stratego/XT" - "language engineering" - "domain-specific language embedding" - "transformation language" - "composition" - "MetaBorg" - "language design" - "graph-rewriting" - "transformation system" - "language embedding" - "DSL" - "programming" - "abstraction" - "language composition" - "rewriting" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerGV06" cites: 0 citedby: 3 pages: "297-311" booktitle: "GTTSE" kind: "inproceedings" key: "BravenboerGV06" - title: "Preventing injection attacks with syntax embeddings" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://doi.acm.org/10.1145/1289971.1289975" abstract: "Software written in one language often needs to construct sentences in another language, such as SQL queries, XML output, or shell command invocations. This is almost always done using unhygienic string manipulation, the concatenation of constants and client-supplied strings. A client can then supply specially crafted input that causes the constructed sentence to be interpreted in an unintended way, leading to an injection attack. We describe a more natural style of programming that yields code that is impervious to injections by construction. Our approach embeds the grammars of the guest languages (e.g., SQL) into that of the host language (e.g., Java) and automatically generates code that maps the embedded language to constructs in the host language that reconstruct the embedded sentences, adding escaping functions where appropriate. This approach is generic, meaning that it can be applied with relative ease to any combination of host and guest languages." links: doi: "http://doi.acm.org/10.1145/1289971.1289975" successor: "https://researchr.org/publication/BravenboerDV10" tags: - "programming languages" - "syntax embedding" - "Java" - "preventing injection attacks" - "generic programming" - "injection attack" - "SDF" - "XML" - "embedded software" - "XML Schema" - "SQL" - "security" - "language embedding" - "DSL" - "programming" - "systematic-approach" - "ASF+SDF" - "grammar" - "query language" researchr: "https://researchr.org/publication/BravenboerDV07" cites: 0 citedby: 4 pages: "3-12" booktitle: "GPCE" kind: "inproceedings" key: "BravenboerDV07"