Bootstrapping Domain-Specific Meta-Languages in Language Workbenches

Research output: Chapter in Book/Conference proceedings/Edited volumeConference contributionScientificpeer-review

163 Downloads (Pure)


It is common practice to bootstrap compilers of programming languages. By using the compiled language to implement the compiler, compiler developers can code in their own high-level language and gain a large-scale test case. In this paper, we investigate bootstrapping of compiler-compilers as they occur in language workbenches. Language workbenches support the development of compilers through the application of multiple collaborating domain-specific meta-languages for defining a language’s syntax, analysis, code generation, and editor support. We analyze the bootstrapping problem of language workbenches in detail, propose a method for sound bootstrapping based on fixpoint compilation, and show how to conduct breaking meta-language changes in a bootstrapped language workbench. We have applied sound bootstrapping to the Spoofax language workbench and report on our experience.
Original languageEnglish
Title of host publicationProceedings of the 2016 ACM SIGPLAN International Conference on Generative Programming
Subtitle of host publicationConcepts and Experiences
EditorsI. Schaefer, B. Fischer
Place of PublicationNew York, NY
PublisherAssociation for Computing Machinery (ACM)
Number of pages12
ISBN (Print)978-145034446-3
Publication statusPublished - 2016
Event15th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experience - Mövenpick Hotel Amsterdam City Centre, Amsterdam, Netherlands
Duration: 31 Oct 20161 Nov 2016
Conference number: 15


Conference15th ACM SIGPLAN International Conference on Generative Programming
Abbreviated titleGPCE 2016
Internet address


  • Bootstrapping
  • Domain-specific
  • Language workbench
  • Meta-language


Dive into the research topics of 'Bootstrapping Domain-Specific Meta-Languages in Language Workbenches'. Together they form a unique fingerprint.

Cite this