Introductory description
A compiler is a program that can read a program in one language  the source language 
and translate it into an equivalent program in another language  the target language
Module aims
The module will provide a through introduction to the principles of compiler design, with an emphasis on general solutions to common problems as well as techniques for putting the extensive theory into practice.
Outline syllabus
This is an indicative module outline only to give an indication of the sort of topics that may be covered. Actual sessions held may differ.
 Languages and Grammars: regular expressions, contextfree grammars, BNF.
 Parsing: topdown and bottomup techniques.
 Semantic Analysis: attribute grammars, translation schemes, type inference, symbol tables. Code Generation: runtime environment, intermediate code, register allocation, optimization. Programming Paradigms: issues in the compilation of imperative, functional, and objectoriented languages
Learning outcomes
By the end of the module, students should be able to:
 A successful student will have acquired the skills to understand, develop, and analyse recognizers for programming languages. The student will also be able to deploy efficient and methodical techniques for integrating semantic analysis into the aforementioned recognizers, and generate lowlevel code for most constructs that characterise imperative and functional programming languages.
Indicative reading list
(a) Appell, Modern Compiler Implementation in Java, Cambridge University Press, 2003
(b) Watt and Brown, Programming Language Processors in Java, Prentice Hall, 2000
(c) Grune, Bal, Jacobs, and Langendoen, Modern Compiler Design, Wiley, 2000.
(d) Aho, Sethi and Ullman, Compilers Principles, Techniques and Tools, AddisonWesley.
Subject specific skills
Develop an endtoend compiler. Use of modern and industrialgrade compiler development software, techniques and tools.
Transferable skills
Technical  Programming. Following online tutorials. Version control and software development. Software testing and debugging.
Creativity  Designing tangible and strategic solutions (compilers).
Multitasking  Time management, organisation skills and meeting deadlines.
Critical thinking  Problemsolving, analysis of possible solutions.
Communication  Listening, writing, technical communication skills
Study time
Type 
Required 
Lectures 
30 sessions of 1 hour (20%)

Seminars 
4 sessions of 1 hour (3%)

Practical classes 
6 sessions of 1 hour (4%)

Private study 
110 hours (73%)

Total 
150 hours 
Private study description
Revision of lecture notes
Private study of online tutorials and coursework
Background reading  reading recommended textbook sections
Attempting/doing past exam paper questions
Costs
No further costs have been identified for this module.
You do not need to pass all assessment components to pass the module.
Students can register for this module without taking any assessment.
Assessment group D3

Weighting 
Study time 
Unsupervised practical assignments

40%


Unsupervised practical assignments. This assignment is worth more than 3 CATS and is not, therefore, eligible for selfcertification.

Inperson Examination

60%


CS325 Exam
 Answerbook Pink (12 page)

Assessment group R2

Weighting 
Study time 
Inperson Examination  Resit

100%


CS325 resit examination.
 Answerbook Pink (12 page)

Feedback on assessment
Written feedback on coursework.
Past exam papers for CS325
Prerequisites
Students must have studied the material in CS126 or CS259 or equivalent subject material.
Courses
This module is Optional for:

UCSAG4G1 Undergraduate Discrete Mathematics

Year 3 of
G4G1 Discrete Mathematics

Year 3 of
G4G1 Discrete Mathematics

Year 3 of
UCSAG4G3 Undergraduate Discrete Mathematics

Year 4 of
UCSAG4G4 Undergraduate Discrete Mathematics (with Intercalated Year)

Year 4 of
UCSAG4G2 Undergraduate Discrete Mathematics with Intercalated Year

Year 4 of
UMAAG105 Undergraduate Master of Mathematics (with Intercalated Year)
This module is Option list A for:

Year 4 of
UCSAG504 MEng Computer Science (with intercalated year)

UCSAG500 Undergraduate Computer Science

Year 3 of
G500 Computer Science

Year 3 of
G500 Computer Science

UCSAG502 Undergraduate Computer Science (with Intercalated Year)

Year 4 of
G502 Computer Science with Intercalated Year

Year 4 of
G502 Computer Science with Intercalated Year

UCSAG503 Undergraduate Computer Science MEng

Year 3 of
G500 Computer Science

Year 3 of
G503 Computer Science MEng

Year 3 of
G503 Computer Science MEng

Year 3 of
UCSAG406 Undergraduate Computer Systems Engineering

Year 3 of
UCSAG408 Undergraduate Computer Systems Engineering

Year 4 of
UCSAG407 Undergraduate Computer Systems Engineering (with Intercalated Year)

Year 4 of
UCSAG409 Undergraduate Computer Systems Engineering (with Intercalated Year)
This module is Option list B for:

UMAAG105 Undergraduate Master of Mathematics (with Intercalated Year)

Year 4 of
G105 Mathematics (MMath) with Intercalated Year

Year 5 of
G105 Mathematics (MMath) with Intercalated Year

UMAAG100 Undergraduate Mathematics (BSc)

Year 3 of
G100 Mathematics

Year 3 of
G100 Mathematics

Year 3 of
G100 Mathematics

UMAAG103 Undergraduate Mathematics (MMath)

Year 3 of
G100 Mathematics

Year 3 of
G103 Mathematics (MMath)

Year 3 of
G103 Mathematics (MMath)

Year 4 of
G103 Mathematics (MMath)

Year 4 of
G103 Mathematics (MMath)

UMAAG106 Undergraduate Mathematics (MMath) with Study in Europe

Year 3 of
G106 Mathematics (MMath) with Study in Europe

Year 4 of
G106 Mathematics (MMath) with Study in Europe

Year 4 of
UMAAG101 Undergraduate Mathematics with Intercalated Year
This module is Option list C for:

USTAG302 Undergraduate Data Science

Year 3 of
G302 Data Science

Year 3 of
G302 Data Science

Year 3 of
USTAG304 Undergraduate Data Science (MSci)

Year 4 of
USTAG303 Undergraduate Data Science (with Intercalated Year)