Compiler Design

Zero Lecture

The course of Compiler design has pre-requites: Data Structures, Algorithms, Computer Architecture, Discrete Mathematical structures, Operating systems, and Theory of Computation

Course Objectives

The objective the compiler course is to understand the basic principles of compiler design, its various constituent parts, algorithms and data structures required to be used in the compiler.

Yet, other objective is, to understand relations between computer architecture and how its understanding is useful in design of a compiler.

The other objective is, how to construct efficient algorithms for compilers.

Outcomes

The outcome of this course is to acquire basic skills for designing the compilers, as well as the knowledge of compiler design. After this course a student will know, in some depth, how a compiler works.

In particular, he/she should understand the structure of a compiler, and how the source and target languages influence various choices in its design.

It will give you a new appreciation for programming language features and the implementation challenges they pose, as well as for the actual hardware architecture and the run-time system in which your generated code executes.

Understanding the details of typical compilation models will also make you a more distinct programmer.

You will also understand some specific components of compiler technology, such as lexical analysis, grammars and parsing, type-checking, intermediate representations, static analysis,common optimizations, instruction selection, register allocation, code generation, and run-time organization.

Lexical Analysis

The Lexical analysis phase of compiler is concerned about generating tokens out of the source program, skipping the whitespaces and comments, and to point out the lexical errors.

For achieving its objectives lexical analyzer scans the source code from a buffer, constructs the finite automata from regular expressions, and assembles the source code in the form of tokens.

This phase also creates a symbol table where tokens and their attributes are entered, which used by the remaining phases of the compiler.

A lexical analyzer can be generated using a tool available, called Lex or Flex (for fast Lexical analyzer generator).

Syntax Analysis

The syntax analysis is compiler phase next to lexical analysis. It is concerned about the grammatical structure of the program and its statements.

The syntax analysis, also called Parsing, is hardware independent and its output, which is a Parse-tree for each HLL statement, is used for intermediate code generation for any machine.

The following lecture notes, presents LL(0), LL(1), LR(0),LR(1) techniques of parsing, their algorithms, and analysis of each technique in details.

In addition, there is exhaustive list of self-review questions for students, as well as list of exercises covering every topic of syntax analysis.

Syntax Directed Translation, storage allocation, intermediate code generation, code optimization, code generation

The syntax Directed Translation (SDT) makes use of syntax of the grammar to carry out the translation of statements of the corresponding language. SDT is carried out using L-attributed translations, which covers virtually all translations that can be performed during parsing. There is also a smaller class, called ``S-attributed translation.

The lecture notes also present Specification of a type checker, Intermediate code forms and three address code, Representing TAC using triples and of assignment statement. Boolean expression and control structures.