Declarative Language Definition
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. The Spoofax Language Workbench aims to support generation of all aspects of a language implementation, including IDEs and interpreters from a single source. The key to achieving this goal is to provide high-level, declarative meta-languages specialized to specific aspects of language definition. In this lecture I discuss the concepts underlying and the design of the three key meta-languages of Spoofax:
- SDF3: a language for declarative syntax definition, which integrates lexical and context-free syntax and separates disambiguation from syntactic structure
- NaBL2: supports the definition of name and type analysis based on the scope graph paradigm for name resolution
- DynSem: supports the definition of the dynamic semantics definition based on implicitly modular operational semantics
Eelco Visser is Antoni van Leeuwenhoek Professor of Computer Science at Delft University of Technology. He received a master’s and doctorate in computer science from the University of Amsterdam in 1993 and 1997, respectively. Previously he served as postdoc at the Oregon Graduate Institute, as Assistant Professor at Utrecht University, and as Associate Professor at TU Delft.
His research interests include programming languages, software language engineering, domain-specific programming languages, program transformation, software security, and interaction design. With his students he has designed and implemented the Spoofax language workbench, as well as many domain-specific languages, including DSLs for syntax definition (SDF2, SDF3), program transformation (Stratego), name binding (NaBL), dynamic semantics (DynSem), software deployment (Nix), web application development (WebDSL), and mobile phone applications (mobl). In the language designer’s workbench project he is pursuing high-level declarative language definition that serves for language implementation and verification.