1
Languages and Compilers(SProg og Oversættere)
Structure of the compiler
2
Structure of the compiler
• Describe the phases of the compiler and give an overall description of what the purpose of each phase is and how the phases interface
3
The “Phases” of a Compiler
Syntax Analysis
Contextual Analysis
Code Generation
Source Program
Abstract Syntax Tree
Decorated Abstract Syntax Tree
Object Code
Error Reports
Error Reports
4
Single Pass Compiler
Compiler Driver
Syntactic Analyzer
calls
calls
Contextual Analyzer Code Generator
calls
Dependency diagram of a typical Single Pass Compiler:
A single pass compiler makes a single pass over the source text, parsing, analyzing and generating code all at once.
5
Multi Pass Compiler
Compiler Driver
Syntactic Analyzer
callscalls
Contextual Analyzer Code Generator
calls
Dependency diagram of a typical Multi Pass Compiler:
A multi pass compiler makes several passes over the program. The output of a preceding phase is stored in a data structure and used by subsequent phases.
input
Source Text
output
AST
input output
Decorated AST
input output
Object Code
6
1) Syntax Analysis -> AST
Program
LetCommand
SequentialDeclaration
n Integer c Char c ‘&’ n n + 1
Ident Ident Ident Ident Ident Ident Ident OpChar.Lit Int.Lit
SimpleT
VarDecl
SimpleT
VarDecl
SimpleV
Char.Expr
SimpleV
VNameExp Int.Expr
AssignCommand BinaryExpr
SequentialCommand
AssignCommand
7
2) Contextual Analysis -> Decorated AST
Contextual Analysis
Decorated Abstract Syntax Tree
Error Reports
Abstract Syntax Tree
Contextual analysis:
• Scope checking: verify that all applied occurrences of identifiers are declared
• Type checking: verify that all operations in the program are used according to their type rules.
Annotate AST:• Applied identifier occurrences => declaration• Expressions => Type
8
2) Contextual Analysis -> Decorated AST
Program
LetCommand
SequentialDeclaration
n
Ident Ident Ident Ident
SimpleT
VarDecl
SimpleT
VarDecl
Integer c Char c ‘&’ n n + 1
Ident Ident Ident OpChar.Lit Int.Lit
SimpleV
Char.Expr
SimpleV
VNameExp Int.Expr
AssignCommand BinaryExpr
SequentialCommand
AssignCommand
:char
:char
:int
:int
:int :int
9
Contextual Analysis
Finds scope and type errors.
AssignCommand
:char
Example 1:
:int
***TYPE ERROR (incompatible types in assigncommand)
Example 2:
foo
Ident
SimpleV
foo not found
***SCOPE ERROR: undeclared variable foo
10
3) Code Generation
• Assumes that program has been thoroughly checked and is well formed (scope & type rules)
• Takes into account semantics of the source language as well as the target language.
• Transforms source program into target code.
Code Generation
Decorated Abstract Syntax Tree
Object Code
11
3) Code Generation
let var n: integer; var c: charin begin c := ‘&’; n := n+1end
PUSH 2LOADL 38STORE 1[SB]LOAD 0LOADL 1CALL addSTORE 0[SB]POP 2HALT
n
Ident Ident
SimpleT
VarDecl
Integer
address = 0[SB]
12
A somewhat more complex compiler