logo of the SSW institute ;)
Computer Science
System Software

Home

General
Staff
Contact
Partners
Alumni

Research
Areas
Projects
Papers
Books
Reports
Awards

Teaching
Lectures
Exams
B.Projects
M.Theses
PhD Theses
Go Abroad

Misc
Talks
Library
Gallery
Links
Search

Webmaster


Compiler Construction

A course at Oxford Brookes University, February 2017
H. Mössenböck

Goals

  • acquire the practical skills to write a simple compiler for an imperative programming language.
  • understand the concepts of scanning, parsing, name management in nested scopes, and code generation.
  • understand attributed grammars and their use for specifying languages and their translation
  • learn to transfer these skills also to general software engineering tasks (e.g. parsing of structured data files or argument lists)
  • learn how to use a compiler generator

Contents

The course goes through all phases of a compiler. It shows the theoretical concepts underlying each phase as well as how to implement them efficiently. The students will write a small compiler for a Java-like language. It will translate a source program into the code of virtual machine. The implementation language will be Java.

  • Overview: compilers and interpreters, structure of a compiler, single-pass vs. multi-pass compilers
  • Scanning: finite automata, scanner implementation
  • Parsing: recursive descent parsing, push down automata, terminal start symbols and successors, LL(1) conditions, implementation of a parser
  • Semantic analysis: syntax-directed translation, attributed grammars
  • Symbol table handling: objects, types, scopes
  • Code generation
  • Compiler generators

Handouts

Handouts
MicroJava Quick Reference

Slides

1. Overview
2. Scanning
3. Parsing
4. Semantic Processing
5. Symbol Table Handling
6. Code Generation
7. Building Compilers with Coco/R

Lab

JDK: Java Development Kit from Oracle

The following code templates are necessary for doing the lab described in the handouts.

Level 1: Scanning
Scanner.java (skeleton file)
Token.java
TestScanner.java
sample.mj: sample MicroJava program
Eratos.mj: sample MicroJava program
BuggyScannerInput.mj: buggy MicroJava program to be tested with TestScanner

Level 1: Parsing
Parser.java (skeleton file)
TestParser.java
BuggyParserInput.mj: buggy MicroJava program to be tested with TestParser

Level 2: Symbol table handling
Obj.java
Struct.java
Scope.java
Tab.java (skeleton file)

Level 3: Code generation
Code.java (skeleton file)
Operand.java
Decode.java
Compiler.java
Run.java
Decode.java
BuggySemanticInput.mj: buggy MicroJava program revealing semantic errors

Level 4: Compiler Generator Coco/R
Coco/R (download and documentation)
QueryForm example from the slides

Text Book

The text book N.Wirth: Compiler Construction. Addison-Wesley 1996 comes close to the contents of this course. Unfortunately, it is out of print, but it can be downloaded from here.