Official course description:

Full info last published 22/01-20
Course info
ECTS points:
Course code:
Participants max:
Offered to guest students:
Offered to exchange students:
Offered as a single subject:
Price for EU/EEA citizens (Single Subject):
10625 DKK
MSc. Master
MSc in Computer Science
Course manager
Assistant Professor
Course semester
Forår 2020
27 January 2020
31 August 2020
Exam type
ekstern censur
Grade Scale
Exam Language
The goal of this course is to give you a mindset of working with software in an abstract and semi-automated fashion, as in a production process (as opposed to a hand crafting process).

This is the first course of the Software Analysis specialization and it focuses on constructive skills: you learn to design, evaluate, and implement new languages that meet the needs of your projects. You use them to describe systems concisely and with less errors. 

The goals of this course are achieved by introducing modeling languages and models as first class artifacts that are designed, manipulated, transformed and translated to code in an automatic fashion. 

Subjects will include 

  • Domain-modeling, feature modeling, meta-modeling and design of domain specific languages
  • Concrete Syntax, and concrete syntax editors 
  • Parsing with parser combinators
  • Architecture modeling, product line architectures, variability modeling 
  • Structural constraints 
  • Model Transformation and code generation
  • Implementation of external domain-specific languages using generic tools
  • Implementation of internal domain-specific languages 

All programming is performed in Java, Xtend or Scala to enable common discussion, joint supervision and a shared learning process. However, the ideas can be realized in many programming languages.

Formal prerequisites
You are a confident software developer, knowledgeable in programming language paradigms and concepts, able to work with (moderately) complex development projects yourself. These abilities can normally be obtained by following a bachelor programme in software development. Concretely: - Object-oriented programming: classes, encapsulation, inheritance, polymorphism, interfaces, exceptions. - Functional programming: anonymous functions, higher order functions, generic types and higher kinded types. - Scala and Java - Basic data structures, lists, trees and graphs; basic complexity, algorithms, including dynamic programming - Programming language concepts, and implementation techniques: grammars, abstract and concrete syntax, parsing, interpretation and compilation (typically taught in a compiler course, for instance Programming Language Concepts and Implementation) - Software engineering processes, quality assurance, unit testing, property testing - Modeling and data: UML class diagrams, XML, the relational data model, SQL
Intended learning outcomes

After the course, the student should be able to:

  • Perform domain analysis of a problem domain, obtain a meta-model expressed as a class diagram or an algebraic data type.
  • Design and implement external domain specific languages
  • Design and implement internal domain specific languages
  • Define semantics of simple operational and structural languages
  • Describe and discuss the main techniques used for domain modeling and implementation (domain specific languages, modelling frameworks, transformation languages, code generators, concrete syntax and models, type checkers)
  • Manipulate abstract syntax representations programatically
  • Design and improve concrete textual syntax for modeling language, including writing and refactoring context free grammars, eliminating left-recursion, etc.
  • Implement declarative constraints and type rules for domain specific languages.
  • Implement 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.
  • Test implementations of modeling languages
  • Characterize, classify and compare programming and modeling languages along a host of properties.
Learning activities

A substantial part of course (ca.40%) consists of a project in which you build your own language. The project is submitted for the exam

Course literature

The course literature is published in the course page in LearnIT.

Ordinary exam
Exam type:
D: Submission of written work with following oral, external (7-trinsskala)
Exam variation:
D2G: Submission of written work for groups with following oral exam supplemented by the work submitted.
Exam submission description:
A substantial part of course (ca.40%) consists of a project in which you build your own language.
Group submission:
  • Group size: 3-4 students.
Exam duration per student for the oral exam:
30 minutes
Group exam form:
Mixed exam 2 : Joint student presentation followed by an individual dialogue. The group makes their presentations together and afterwards the students participate in the dialogue individually while the rest of the group is outside the room.

Time and date