Executing Declarative Language Definitions
The Spoofax language workbench is a programming environment for the development of programming languages. That is, using Spoofax one defines a language using several meta-language for language definition, and obtains an implementation of the language, including a programming environment.
One of the design principles (aspirations) of Spoofax is to make language definition as declarative as possible such that the definition of (an aspect of) a language can be used for multiple purposes, i.e. executed in many different ways. For example, from a syntax definition we obtain a parser, but also a pretty-printer, parenthesizer, abstract syntax tree schema, and a syntactic completion procedure. And from a static semantics definition we get a type checker, but also a semantic completion procedure.
In this talk, I will show language definition in Spoofax by example, outline the implementation strategies for Spoofax meta-languages, and discuss the requirements and restrictions on the design of meta-language to achieve this.
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, syntax definition, and parsing. 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), static semantics (NaBL, Statix), 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.