These credits are meant to build upon the students' basic understanding
of computer science. They should be compulsory to students taking
the computer science stream, and will be directly built upon by advanced
formal methods and theoretical computer science credits.
-
Title: Formal Languages and Automata (as part of Core Computer Science II)
Code: CSA 2080 (Module 1)
Credits: 3 ECTS
Lectures: 21
Tutorials: 4
Semesters: Second semester
Lecturer: Gordon Pace
Examination: 30% assignments, 70% exam in June. The resit
will be in the form of one exam covering 100% of the final mark.
Syllabus:
This module deals with the formal treatment of languages and
automata (or machines) to recognise languages. The aims are not
only at instilling the basic notions of languages, grammars and
automata using formal mathematical notation but also provides a
practical perspective, by applying the mathematical results to
design parsers.
The theory explored in the course will also be presented from a practical
perspective, formalising automata and language recognisers using Haskell. The
constructions used in the proofs covered in the course will also be expressed
as programs, introducing the concept of provably correct algorithms.
- Formal languages and grammars.
- Regular languages: regular grammars, finite-state automata,
regular expressions.
- Context-free languages: context-free grammars, pushdown
automata.
- Closure properties of regular and context-free languages.
- Normal forms for grammars.
- Recognition algorithms for grammars.
Textbooks and recommended reading list:
- Gordon Pace, Formal Languages and Automata, Lecture Notes, 2003.
- Peter Linz, An Introduction to Formal Languages and Automata (third edition),
Jones and Barlett Publishers, ISBN 0-7637-1422-4, 2001.
-
Title: Compiler Theory
Code: CSI 2010
Credits: 4 ECTS
Lectures: 20
Tutorials: 4
Semesters: First semester
Lecturer: Sandro Spina
Examination: Assessment in a form of assignments contributing to 30%
of the final mark and 70% in a written exam. Note that a pass in both assignments
and the exam is required for a final pass.
Syllabus:
Compilers translate code from a source to a target language, the latter usually being a lower
level language. The main aim of this course is to equip students with the necessary knowledge
required to understand how modern compilers work. Moreover on a more practical note (as part
of the assignment) students will be building a compiler for a small imperative programming
language. The materials provided will be based on the Java programming language, however
students can opt to work with other programming languages such as C or Haskell. The course
will cover compilation both to JVM bytecode and native code. Apart from the usual topics
associated with compiling theory the course will also offer introductions to the areas of
compiler correctness and hardware compilers.
Topics Covered (in no particular order)
- grammars
- lexers
- parsers
- abstract syntax
- type systems (checking, derivations, type inference, etc)
- syntax-directed translation
- code generation and analysis (JVM, native)
- register allocation
- optimisation
- compiler correctness
- hardware compilers
- Others that might be of interest to students
Textbooks and recommended reading list:
- Aho, Sethi, Ullman. /Compilers: Principles, Techniques, and Tools.
- Andrew S. Appel, Modern Compiler Implementation in Java, Cambridge University Press, 1998. ISBN 0-521-60764-7
-
Title: Advanced Functional Programming
Code: CSI XXXX
Credits: 2 ECTS
Lectures: 14
Tutorials: 10 sessions in groups of 25-30 students
Semesters: Second semester
Lecturer: Joseph Cordina
Examination:
Assessment in a form of assignments contributing to 70% of the final mark and 30%
in a written exam. Note that a pass in both assignments and the exam is required
for a final pass. The resit will be in the form of one oral exam covering 100% of
the final mark.
Syllabus:
In this course more advanced topics of functional programming will be presented.
It will be assumed that students have attended and completely successfully the first year
Functional Programming course. The course will start with a quick recap of the important
points in functional programming. Then the course will proceed to show advanced topics in
functional programming that allow this paradigm to be useful in any problem domain. While
introducing new topics, the students will be directed to the relevant literature on the
subjects that might not be covered within the recommended text books. For each topic,
efficiency improvements will be discussed together with advantages that a functional
programming language gives over other programming paradigms. The last assignment will be
chosen by the students themselves and discussed with the lecturer before writing the assignment.
Topics Covered (in Alphabetical Order)
- Concurrent Haskell
- Equational Reasoning (structural induction)
- Embedded of Languages and Examples
- FFI
- Graphics in Haskell
- Lava as HDL
- Monads
- Monadic Parsers
- QuickCheck
- Others that might be of interest to students
Aims of the Course
Show Haskell as a viable programming language that can be applied to all problem domains.
In addition, the students will appreciate the necessity of functional languages within industry today.
Textbooks and recommended reading list:
- Simon Thompson, The Craft of Functional Programming, Addison-Wesley, ISBN 0-201-34275-8, 1999.
- Paul Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia,
Cambridge University Press, ISBN 0-521-64408-9, 2000.
- Jeremy Gibbons and Oege de Moor, Editors, The Fun of Programming, Palgrave Macmillan, ISBN 0-333-99-2857
|