Principles of Software Language Design for Model-Driven Software Engineering
The book describes the necessary theory and the pragmatics of using and developing high-level software languages (Domain-Specific Languages, or DSLs) for the effective production of quality software. This includes methods, design patterns, guidelines, and testing practices for defining concrete syntax, abstract syntax, and semantics of languages. The book attempts to be close to technology, while covering multiple paradigms and solutions – to avoid being limited to a particular technical silo.
We are creating a classic academic textbook, providing a theoretical and conceptual foundation derived from research, and a sound pedagogy built around many focused problem-solving exercises, concrete take-home lessons, and examples from diverse domains. The pedagogy is a key reason to write this book. None of the existing books on this topic follows a standard textbook approach, with focused problem-solving exercises and solid grounding in research.
After reading this book, the reader will be able to:
- Perform domain analysis of a problem domain and obtain a meta-model.
- Engineer external and internal DSLs (note that we focus mostly on external DSLs).
- Design and improve the concrete syntax of DSLs.
- Implement DSL semantics using declarative and imperative transformations, code generators and interpreters, in various scenarios such as from text to models, from models to text, involving XML, database, etc.
- Implement declarative constraints and type rules for DSLs.
- Test implementations of DSLs.
- Characterize, classify, and compare languages along various properties.
This repository contains additional resources and the source code for all examples used in the book.
Early Access Material
We provide some material for early dissemination, for receiving feedback, and for supporting courses. The PDFs are available via a dedicated website. You will need to contact us, as instructed on the website to get access.