Concrete Syntax Metapatterns
To keep large legacy codebases maintainable, software engineers should be able to develop large-scale refactorings. A key aspect of developing restructurings is matching and transforming abstract syntax trees (ASTs). Matching on ASTs is typically done through patterns, which are defined as AST terms with holes. These patterns can be extended to become metapatterns, which increase expressivity. Metapattern examples include disjunctions, descendant patterns, and patches where we inline transformations into the pattern itself.
Despite their expressivity, abstract syntax (meta)patterns can become verbose and require restructuring engineers to be intimately familiar with the data types that define the AST. A better approach is to use concrete syntax patterns, which allows us to denote our patterns in the syntax of the object language. Previous work has shown that we can use external black-box parsers of the object language to compile concrete syntax patterns.
In this paper, we scale this compilation method to include metapatterns. We evaluate this method through an implementation written in Kotlin, and compare existing restructurings without the use of metapatterns to ones written with metapatterns, demonstrating a reduction in code complexity.
Sun 20 OctDisplayed time zone: Pacific Time (US & Canada) change
14:00 - 15:30 | Software Language Design and Implementation ISLE at IBR East Chair(s): L. Thomas van Binsbergen University of Amsterdam | ||
14:00 30mTalk | Concrete Syntax Metapatterns SLE Luka Miljak Delft University of Technology, Casper Bach Poulsen Delft University of Technology, Rosilde Corvino TNO-ESI DOI | ||
14:30 30mTalk | Efficient Demand Evaluation of Fixed-Point Attributes Using Static Analysis SLE Idriss Riouak Department of Computer Science, Lund University, Sweden, Niklas Fors Lund University, Jesper Öqvist Cognibotics, Görel Hedin Lund University, Christoph Reichenbach Lund University DOI Pre-print | ||
15:00 30mTalk | The Design of a Self-Compiling C Transpiler Targeting POSIX Shell SLE Laurent Huberdeau Université de Montréal, Cassandre Hamel Université de Montréal, Stefan Monnier Université de Montréal, Marc Feeley Université de Montréal DOI |