Course "Software Language Engineering" WS 2012/13



Software Language Engineering (SLE) is a particular view on Software Engineering (SE), which pays specific attention to the many software languages that are used in software development. These are not just programming languages, but also modeling languages, query and transformation languages, schema languages, and domain-specific languages. Thus, SLE is concerned with design, implementation, testing, deployment, and evolution of software languages as well as language-based software components.

The lecture focuses on fundamental subjects of software language engineering including foundations of related technologies. The lab exercises some technologies and SLE problems in a more hands-on manner. Much emphasis is placed on the assignments as they are designed to equip attendees with operational intelligence in the field.


See also here for a description of concepts per lecture.

Date Topic Educational objective Slides
23.10.2012 Introduction Observe SLE in the computer science context (.pdf)
30.10.2012 Grammars and parsing Implement parsers (.pdf)
06.11.2012 Language processing Distinguish forms of processors (.pdf)
13.11.2012 Attribute grammars Implement semantic analysis (.pdf)
20.11.2012 Rewriting & strategies Implement software transformations (.pdf)
27.11.2012 Automated refactoring Discover challenges of refactoring (.pdf)
04.12.2012 Code generation Implement compiler-like code generators (.pdf)
11.12.2012 Templates and friends Discover challenges of generative metaprograms (.pdf)
18.12.2012 Grammar-based testing Testing language processors (.pdf)
08.01.2013 Magnolia: design and implementation Access to practical experiences (.pdf)
15.01.2013 Domain-specific languages Implement DSLs by embedding (.pdf)
22.01.2013 Language design and evolution Master a process for language design (.pdf)
29.01.2013 Linguistic architecture Transpose software architecture to SLE (.pdf)


See also here for a more detailed description of the labs.

Date Activity
08.11.2012 Implement parsers and interpreters with Rascal
15.11.2012 Implement semantic analyses with JastAdd
22.11.2012 Implement term-rewriting strategies with Rascal
29.11.2012 Transform code with Rascal
06.12.2012 Presentations Assignment No. 1
13.12.2012 Generate Java bytecode with ASM
10.01.2013 Presentations Assignment No. 2
17.01.2013 Implement embedded DSLs with SugarJ
24.01.2013 Test language processors with QuickCheck or randoop
31.01.2013 Implement a coupled transformation with Rascal
07.02.2013 Presentations Assignment No. 3 and Exam preparation


No. Topic Date of issue Deadline
1 Implement a program analysis 15.11.2012 05.12.2012
2 Implement a program transformation 06.12.2012 09.01.2012
3 Implement a DSL through embedding 15.01.2013 07.02.2013

Exam rules

  • Form of exam: oral
  • Window for exam: 20 Feb - 30 March 2012
  • Structure of exam (30min):
      • 7min: discussion of an abstract concept chosen by examiner for a lecture chosen by student
      • 7min: discussion of a language- or technology-specific concept chosen by examiner for another lecture chosen by student
      • 10min: Q&A for an assignment solution chosen by student without much overlap to the previous topics
      • 6min: discussion of an assignment improvement
      • See here for the abstract as well as language- and technology-specific concepts per lecture.
  • Admission to exam
      • Regular attendance of lecture and lab.
      • Assemble teams of 1-3 members, subject to approval.
      • Each team submits reasonable attempts to all assignments.
      • Assignments must be presented in the lab.