Chapter 1

Compilers

 

A compiler is a program that reads a program in one language, the source language and translates into an equivalent program in another language, the target language.

The translation process should also report the presence of errors in the source program.

Source Program  Compiler Target Program
   

 
   
    Error Messages    

There are two parts of compilation.

The analysis part breaks up the source program into constant piece and creates an intermediate representation of the source program.

The synthesis part constructs the desired target program from the intermediate representation.

Phases of Compiler

The compiler has a number of phases plus symbol table manager and an error handler.
 

    Input Source Program    
       
    Lexical Analyzer    
       
    Syntax Analyzer    
       
Symbol Table Manager   Semantic Analyzer    Error Handler
       
    Intermediate Code Generator    
       
    Code Optimizer    
       
    Code Generator    
       
    Out Target Program    

The cousins of the compiler are

  1. Preprocessor.
  2. Assembler.
  3. Loader and Link-editor.

Front End vs Back End of a Compilers. The phases of a compiler are collected into front end and back end.

The front end includes all analysis phases end the intermediate code generator.

The back end includes the code optimization phase and final code generation phase.

The front end analyzes the source program and produces intermediate code while the back end synthesizes the target program from the intermediate code.

A naive approach (front force) to that front end might run the phases serially.

  1. Lexical analyzer takes the source program as an input and produces a long string of tokens.
  2. Syntax Analyzer takes an out of lexical analyzer and produces a large tree.
  3. Semantic analyzer takes the output of syntax analyzer and produces another tree.
  4. Similarly, intermediate code generator takes a tree as an input produced by semantic analyzer and produces  intermediate code.

Minus Points

Remedy

Parser Generators:
The specification of input based on regular expression. The organization is based on finite automation.
Scanner Generator:
The specification of input based on regular expression. The organization is based on finite automation.
Syntax-Directed Translation:
It walks the parse tee and as a result generate intermediate code.
Automatic Code Generators:
Translates intermediate rampage  into machine language.
Data-Flow Engines:
It does code optimization using data-flow analysis.