Undergraduate study

Undergraduate 

Software Engineering (faster route) BSc/MSci

Programming Languages (H) COMPSCI4016

  • Academic Session: 2026-27
  • School: School of Computing Science
  • Credits: 10
  • Level: Level 4 (SCQF level 10)
  • Typically Offered: Semester 2
  • Available to Visiting Students: Yes
  • Collaborative Online International Learning: No
  • Curriculum For Life: No

Short Description

This course covers the design and implementation of programming languages, introducing techniques for formally specifying the design of programming languages (BNF grammars, typing rules, and operational semantics), metatheory (type soundness), and techniques for implementing typecheckers, interpreters, and code generators for a representative set of core programming languages.

Timetable

In-person delivery. Two one-hour lectures and a one-hour lab each week.

Excluded Courses

None

Co-requisites

None

Assessment

Examination 70%, programming assignment 25%, weekly quizzes 5%. 

Main Assessment In: April/May

Course Aims

This course aims to introduce students to the concepts behind the design of programming languages in a variety of different paradigms (e.g., functional, object-oriented, and imperative), and to equip students with the tools needed to design and implement a programming language. Students will learn how to read and write formal descriptions of programming languages, including rigorous treatments of functions, variable binding, scoping, and variable substitution. Based on the formal descriptions, students will learn how to implement a typechecker, interpreter, and code generator for various representative core programming languages, and understand how the property of type soundness ensures that a program will not produce errors when it is run.

 

After completing the course, students should be prepared to undertake project work in programming language design and implementation.

Intended Learning Outcomes of Course

By the end of the course students will be able to:

1. Formalise a programming language design using formal notation such as BNF grammars, typing rules, and operational semantics.

2. Implement a typechecker, interpreter, and code generator from a formal specification of a programming language.

3. Critique the design of a programming language with respect to properties such as type soundness and expressiveness.

Minimum Requirement for Award of Credits

No exceptions