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 a 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.