Lightweight Multi-Language Syntax Transformation with Parser Parser Combinators Rijnard van Tonder Claire Le Goues School of Computer Science School of Computer Science Carnegie Mellon University Carnegie Mellon University USA USA
[email protected] [email protected] Abstract CCS Concepts • Software and its engineering → Syn- Automatically transforming programs is hard, yet critical tax; Translator writing systems and compiler genera- for automated program refactoring, rewriting, and repair. tors; Parsers; General programming languages; Domain spe- Multi-language syntax transformation is especially hard due cific languages. to heterogeneous representations in syntax, parse trees, and Keywords syntax, transformation, parsers, rewriting abstract syntax trees (ASTs). Our insight is that the prob- lem can be decomposed such that (1) a common grammar ACM Reference Format: expresses the central context-free language (CFL) proper- Rijnard van Tonder and Claire Le Goues. 2019. Lightweight Multi- Language Syntax Transformation with Parser Parser Combinators. ties shared by many contemporary languages and (2) open In Proceedings of the 40th ACM SIGPLAN Conference on Programming extension points in the grammar allow customizing syntax Language Design and Implementation (PLDI ’19), June 22–26, 2019, (e.g., for balanced delimiters) and hooks in smaller parsers Phoenix, AZ, USA. ACM, New York, NY, USA, 16 pages. https://doi. to handle language-specific syntax (e.g., for comments). Our org/10.1145/3314221.3314589 key contribution operationalizes this decomposition using a Parser Parser combinator (PPC), a mechanism that gen- 1 Introduction erates parsers for matching syntactic fragments in source Automatically transforming programs is hard, yet critical for code by parsing declarative user-supplied templates.