TU Delft
Druk deze pagina af Druk deze pagina af     
2016/2017 Elektrotechniek, Wiskunde en Informatica Master Computer Science
Language Engineering Project
Verantwoordelijk Docent
Naam E-mail
Prof.dr. E. Visser    E.Visser@tudelft.nl
Contacturen / week x/x/x/x
Start onderwijs
Students are expected to have completed (the lab of) the compiler construction course IN4303.
"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.
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.
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.
Literatuur en studiemateriaal
- Documentation of the design and implementation of a specific language
- Papers about language definition techniques
Wijze van toetsen
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.
The final grade is based on the following components:

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