TU Delft
Education Type
Education print this page print this page     
2015/2016 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
Name E-mail
Dr. G.H. Wachsmuth    G.H.Wachsmuth@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 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 small teams 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.
The work is assessed based on a code review of the language definition and a written report about the project. The work needs to be submitted in four intermediate stages with a deadline and a grade. The final grade is the weighted average of these intermediate grades.