TU Delft
Education Type
Education print this page print this page     
2017/2018 Electrical Engineering, Mathematics and Computer Science Master Computer Science
Language Engineering Project
Responsible Instructor
Name E-mail
Prof.dr. E. Visser    E.Visser@tudelft.nl
Contact Hours / Week x/x/x/x
Education Period
Start Education
Exam Period
Course Language
Expected prior knowledge
Students are expected to have completed (the lab of) the compiler construction course IN4303.
Course Contents
"Software systems are the engines of modern information society. Our ability to cope with the increasing complexity of software systems is limited by the programming languages we use to build them. Bridging the gap between domain concepts and the implementation of these concepts in a programming language is one of the core challenges of software engineering. Modern programming languages have considerably reduced this gap, but often still require low-level programmatic encodings of domain concepts. Or as Alan Perlis formulated it in one of his famous epigrams: 'A programming language is low level when its programs require attention to the irrelevant'. A fixed set of (Turing Complete) programming constructs is sufficient to express all possible computations, but at the expense of considerable encoding that obfuscates the concepts under consideration. Linguistic abstraction can be used as a tool to capture our emerging understanding of domains of computation." (Visser, SCP 2014)

In the precursor compiler construction course (IN4303), students learn the basics of language engineering and build a complete definition for a small programming language. In this course, students learn to apply language engineering principles and tools to a real (domain-specific) programming language in a new project, i.e. without following a path set out in detail by the instructor. Thus, they will experience that the design of a real programming languages requires trade-offs and compromises. Typically, students implement a previously existing language. But designing a new language is also an option provided there is a good plan that is discussed _before_ the course starts.
Study Goals
Learn to apply language engineering principles and tools to a real (domain-specific) programming language. Explore the definition of all aspects of a programming language: syntax, name binding, type analysis, transformations, code generation.
Education Method
This is a project course. Students deepen their language engineering skills and insights by building a complete language definition. Students work in teams of two on the definition of a (domain-specific) programming language using the Spoofax Language Workbench. Assistance and feedback is provided during weekly lab hours. The project should span the full life cycle of language implementation including a test suite, IDE, code generator, and distribution of the result as an Eclipse plugin.
Literature and Study Materials
- Documentation of the design and implementation of a specific language
- Papers about language definition techniques
See Literature and Study Materials
The work is assessed based on a code review of the language definition, a written report about the project, and a presentation in the final project workshop.

The course has no resit.
Permitted Materials during Tests
not applicable
The final grade is based on the following components:

- github repository with language project (40%)
- written report about the project (30%)
- presentation (slides) (30%)