0% found this document useful (0 votes)
88 views12 pages

Intermediate Code in Compilers

The document discusses intermediate code generation in compiler architecture. It defines intermediate code as language- and machine-neutral code generated between the front-end and back-end of a compiler. Intermediate code takes many forms, including graphical representations like abstract syntax trees and linear representations like three-address code. Attribute grammars can directly generate intermediate code as a side effect of parsing.

Uploaded by

liwase6772
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views12 pages

Intermediate Code in Compilers

The document discusses intermediate code generation in compiler architecture. It defines intermediate code as language- and machine-neutral code generated between the front-end and back-end of a compiler. Intermediate code takes many forms, including graphical representations like abstract syntax trees and linear representations like three-address code. Attribute grammars can directly generate intermediate code as a side effect of parsing.

Uploaded by

liwase6772
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Intermediate Code Generation

Compiler Architecture
Intermediate
Code
tokens Syntactic
Scanner Parser Semantic Code
Source structure Target
language
(lexical (syntax Analysis Generator
language
analysis) analysis) (IC generator)
Intermediate
Code
Intermediate
Code Code
Optimizer

Symbol
Table

2
Intermediate Code
• Similar terms: Intermediate representation,
intermediate language
• Intermediate code is the interface between
front end and back end in a compiler
• Language and Machine neutral
• Many forms
• Level depends on how being processed
• More than one intermediate language may
be used by a compiler
3
Intermediate Languages Types
• Graphical IRs: Abstract Syntax trees, Direct
Access Graph (DAGs), Control Flow
Graphs
• Linear IRs:
– Stack based (postfix)
– Three address code (quadruples)

4
Graphical IRs
• Abstract Syntax Trees (AST) – retain essential structure
of the parse tree, eliminating unneeded nodes.

• Directed Acyclic Graphs (DAG) – compacted AST to


avoid duplication – smaller footprint as well

• Control flow graphs (CFG) – explicitly model control


flow

5
ASTs and DAGs:
a := b *-c + b*-c
:= :=
a + a +

* * *
b - (uni) b - (uni) b - (uni)

c c c

6
More Example ASTs and DAGs
• Intermediate Forms of a Program:
– ASTs: Abstract Syntax Trees (below left)
– DAGs: Directed Acyclic Graphs (below right)
– What is the Expression?

assign assign

a + a +

* *
*

b uminus b uminus
b uminus
c c
DAG Example
• Example: a+a*(b-c)+(b-c)*d

+ *

*
d
a -

b c
Linearized IC
• Stack based (one • Three address (quadruples) –
address) – compact up to three operands, one
push 2 operator
push y t1 <- 2
multiply t2 <- y
push x t3 <- t1 * t2
subtract t4 <- x
t5 <- t4 – t1

9
Attribute Grammar
• Attribute Grammar for Generating an AST
as a side Effect of the Translation Process:
Representing Attribute Grammars
assign

• Two Different Forms: a +


– Linked Data Structure * *
– Multi-Dimensional Array
b uminus b uminus

c c
Objective
• Directly Generate Code From AST or DAG as a Side Effect of Parsing
Process (Attribute Grammar)
• Consider Code Below:

• Each is Referred to as “3 Address Coding (3AC)” since there are at


Most 3 Addresses per Statement
– One for Result and At Most 2 for Operands

You might also like