SlideShare a Scribd company logo
Chapter 6 
Intermediate Code Generation
Outline 
Variants of Syntax Trees 
Three-address code 
Types and declarations 
Translation of expressions 
Type checking 
Control flow 
Backpatching
Introduction 
Intermediate code is the interface between front end 
and back end in a compiler 
Ideally the details of source language are confined to 
the front end and the details of target machines to the 
back end (a m*n model) 
In this chapter we study intermediate 
representations, static type checking and 
intermediate code generation 
Parser Static 
Checker 
Intermediate 
Code Generator 
Code 
Generator 
Front end Back end
Variants of syntax trees 
It is sometimes beneficial to crate a DAG instead of 
tree for Expressions. 
This way we can easily show the common sub-expressions 
and then use that knowledge during code 
generation 
Example: a+a*(b-c)+(b-c)*d 
+ 
+ * 
* 
- 
b c 
a 
d
SDD for creating DAG’s 
Production Semantic Rules 
1) E -> E1+T 
2) E -> E1-T 
3) E -> T 
4) T -> (E) 
5) T -> id 
6) T -> num 
E.node= new Node(‘+’, E1.node,T.node) 
E.node= new Node(‘-’, E1.node,T.node) 
E.node = T.node 
T.node = E.node 
T.node = new Leaf(id, id.entry) 
T.node = new Leaf(num, num.val) 
Example: 
1)p1=Leaf(id, entry-a) 
2)P2=Leaf(id, entry-a)=p1 
3)p3=Leaf(id, entry-b) 
4)p4=Leaf(id, entry-c) 
5)p5=Node(‘-’,p3,p4) 
6)p6=Node(‘*’,p1,p5) 
7)p7=Node(‘+’,p1,p6) 
8) p8=Leaf(id,entry-b)=p3 
9) p9=Leaf(id,entry-c)=p4 
10) p10=Node(‘-’,p3,p4)=p5 
11) p11=Leaf(id,entry-d) 
12) p12=Node(‘*’,p5,p11) 
13) p13=Node(‘+’,p7,p12)
Value-number method for 
constructing DAG’s 
= 
+ 
i 10 
Algorithm 
Search the array for a node M with label op, left child l 
and right child r 
If there is such a node, return the value number M 
If not create in the array a new node N with label op, 
left child l, and right child r and return its value 
We may use a hash table 
id To entry for i 
num 10 
+ 1 2 
3 1 3
Three address code 
In a three address code there is at most one operator 
at the right side of an instruction 
Example: 
+ 
+ * 
* 
- 
b c 
a 
d 
t1 = b – c 
t2 = a * t1 
t3 = a + t2 
t4 = t1 * d 
t5 = t3 + t4
Forms of three address 
instructions 
x = y op z 
x = op y 
x = y 
goto L 
if x goto L and ifFalse x goto L 
if x relop y goto L 
Procedure calls using: 
 param x 
 call p,n 
 y = call p,n 
x = y[i] and x[i] = y 
x = &y and x = *y and *x =y
Example 
do i = i+1; while (a[i] < v); 
L: t1 = i + 1 
i = t1 
t2 = i * 8 
t3 = a[t2] 
if t3 < v goto L 
Symbolic labels 
100: t1 = i + 1 
101: i = t1 
102: t2 = i * 8 
103: t3 = a[t2] 
104: if t3 < v goto 100 
Position numbers
Data structures for three 
address codes 
Quadruples 
Has four fields: op, arg1, arg2 and result 
Triples 
Temporaries are not used and instead references to 
instructions are made 
Indirect triples 
In addition to triples we use a list of pointers to triples
Example 
b * minus c + b * minus c 
Three address code 
t1 = minus c 
t2 = b * t1 
t3 = minus c 
t4 = b * t3 
t5 = t2 + t4 
a = t5 
Quadruples 
op arg1 arg2 result 
minus 
* minus c t3 
* 
+ 
= 
c t1 
b t1 t2 
b t3 t4 
t2 t4 t5 
t5 a 
Triples 
op arg1 arg2 
minus 
* minus c 
* 
+ 
= 
c 
b (0) 
b (2) 
(1) (3) 
a 
(4) 
012 
345 
Indirect Triples 
op arg1 arg2 
minus 
* minus c 
* 
+ 
= 
c 
b (0) 
b (2) 
(1) (3) 
a 
(4) 
012 
345 
op 
(0) 
(1) 
(2) 
(3) 
(4) 
(5) 
35 
36 
37 
38 
39 
40
Type Expressions 
Example: int[2][3] 
array(2,array(3,integer)) 
 A basic type is a type expression 
 A type name is a type expression 
 A type expression can be formed by applying the array type 
constructor to a number and a type expression. 
 A record is a data structure with named field 
 A type expression can be formed by using the type constructor  for 
function types 
 If s and t are type expressions, then their Cartesian product s*t is a 
type expression 
 Type expressions may contain variables whose values are type 
expressions
Type Equivalence 
They are the same basic type. 
They are formed by applying the same constructor to 
structurally equivalent types. 
One is a type name that denotes the other.
Declarations
Storage Layout for Local Names 
Computing types and their widths
Storage Layout for Local Names 
Syntax-directed translation of array types
Sequences of Declarations 
 
Actions at the end: 

Fields in Records and Classes 
 

Translation of Expressions and 
Statements 
We discussed how to find the types and offset of 
variables 
We have therefore necessary preparations to discuss 
about translation to intermediate code 
We also discuss the type checking
Three-address code for expressions
Incremental Translation
Addressing Array Elements 
Layouts for a two-dimensional array:
Semantic actions for array reference
Translation of Array References 
Nonterminal L has three synthesized 
attributes: 
L.addr 
L.array 
L.type
Conversions between primitive 
types in Java
Introducing type conversions into 
expression evaluation
Abstract syntax tree for the 
function definition 
fun length(x) = 
if null(x) then 0 else length(tl(x)+1) 
This is a polymorphic function 
in ML language
Inferring a type for the function length
Algorithm for Unification
Unification algorithm 
boolean unify (Node m, Node n) { 
s = find(m); t = find(n); 
if ( s = t ) return true; 
else if ( nodes s and t represent the same basic type ) return true; 
else if (s is an op-node with children s1 and s2 and 
t is an op-node with children t1 and t2) { 
union(s , t) ; 
return unify(s1, t1) and unify(s2, t2); 
} 
else if s or t represents a variable { 
union(s, t) ; 
return true; 
} 
else return false; 
}
Control Flow 
boolean expressions are often used to: 
Alter the flow of control. 
Compute logical values.
Short-Circuit Code 
 

Flow-of-Control Statements
Syntax-directed definition
Generating three-address code for booleans
translation of a simple if-statement 
 

Backpatching 
Previous codes for Boolean expressions insert symbolic labels for 
jumps 
It therefore needs a separate pass to set them to appropriate addresses 
We can use a technique named backpatching to avoid this 
We assume we save instructions into an array and labels will be 
indices in the array 
For nonterminal B we use two attributes B.truelist and B.falselist 
together with following functions: 
makelist(i): create a new list containing only I, an index into the array 
of instructions 
Merge(p1,p2): concatenates the lists pointed by p1 and p2 and returns a 
pointer to the concatenated list 
Backpatch(p,i): inserts i as the target label for each of the instruction 
on the list pointed to by p
Backpatching for Boolean Expressions 
 

Backpatching for Boolean Expressions 
Annotated parse tree for x < 100 || x > 200 && x ! = y
Flow-of-Control Statements
Translation of a switch-statement
Readings 
Chapter 6 of the book

More Related Content

What's hot (20)

PDF
Syntax Directed Definition and its applications
ShivanandManjaragi2
 
PPTX
Lecture 14 run time environment
Iffat Anjum
 
PPTX
Lecture 12 intermediate code generation
Iffat Anjum
 
PPTX
Intermediate code generation1
Shashwat Shriparv
 
PPTX
Recognition-of-tokens
Dattatray Gandhmal
 
PPTX
Topological Sorting
ShahDhruv21
 
PPTX
Code generation
Aparna Nayak
 
PPTX
Parsing in Compiler Design
Akhil Kaushik
 
PPT
Context free grammars
Ronak Thakkar
 
PPT
Intermediate code generation (Compiler Design)
Tasif Tanzim
 
PDF
Algorithms Lecture 2: Analysis of Algorithms I
Mohamed Loey
 
PDF
COMPILER DESIGN- Syntax Directed Translation
Jyothishmathi Institute of Technology and Science Karimnagar
 
PPT
Graph coloring problem
V.V.Vanniaperumal College for Women
 
PPTX
Asymptotic Notation
Protap Mondal
 
PPTX
RECURSIVE DESCENT PARSING
Jothi Lakshmi
 
PPTX
Unit iv(simple code generator)
Kalaimathi Vijayakumar
 
PPTX
Lexical analysis - Compiler Design
Muhammed Afsal Villan
 
PDF
Query trees
Shefa Idrees
 
PPTX
Hashing Technique In Data Structures
SHAKOOR AB
 
Syntax Directed Definition and its applications
ShivanandManjaragi2
 
Lecture 14 run time environment
Iffat Anjum
 
Lecture 12 intermediate code generation
Iffat Anjum
 
Intermediate code generation1
Shashwat Shriparv
 
Recognition-of-tokens
Dattatray Gandhmal
 
Topological Sorting
ShahDhruv21
 
Code generation
Aparna Nayak
 
Parsing in Compiler Design
Akhil Kaushik
 
Context free grammars
Ronak Thakkar
 
Intermediate code generation (Compiler Design)
Tasif Tanzim
 
Algorithms Lecture 2: Analysis of Algorithms I
Mohamed Loey
 
COMPILER DESIGN- Syntax Directed Translation
Jyothishmathi Institute of Technology and Science Karimnagar
 
Graph coloring problem
V.V.Vanniaperumal College for Women
 
Asymptotic Notation
Protap Mondal
 
RECURSIVE DESCENT PARSING
Jothi Lakshmi
 
Unit iv(simple code generator)
Kalaimathi Vijayakumar
 
Lexical analysis - Compiler Design
Muhammed Afsal Villan
 
Query trees
Shefa Idrees
 
Hashing Technique In Data Structures
SHAKOOR AB
 

Similar to Chapter 6 intermediate code generation (20)

PPT
Chapter 6 Intermediate Code Generation
Radhakrishnan Chinnusamy
 
PPT
458237.-Compiler-Design-Intermediate-code-generation.ppt
PalaniSamyB3
 
PDF
Project presentation PPT.pdf this is help for student who doing this complier...
AmitSingh395981
 
PDF
INTERMEDIATE CODE GENERTION-CD UNIT-3.pdf
Ranjeet Reddy
 
PDF
Intermediate code generation
Akshaya Arunan
 
PDF
Chapter 11 - Intermediate Code Generation.pdf
RAnwarpasha
 
PPTX
UNIT - III Compiler.pptx power point presentation
KowsalyaG17
 
DOC
Compiler notes--unit-iii
Sumathi Gnanasekaran
 
PPTX
complier design unit 4 for helping students
aniketsugandhi1
 
PPTX
UNIT - III Compiler.pptx SYNTAX DIRECTED
KavithaNagendran1
 
PPTX
Unit 3 Compiler Design Regulation 2021.pptx
jeevitha404389
 
PPTX
Intermediate code representations
ahmed51236
 
PDF
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
venkatapranaykumarGa
 
PPTX
Compiler Design_Intermediate code generation new ppt.pptx
RushaliDeshmukh2
 
PPT
Compiler chapter six .ppt course material
gadisaAdamu
 
PPTX
Intermediate code
Vishal Agarwal
 
PPTX
Syntax directed definition and intermediate code generation
JananiRamannachetty1
 
PPT
Interm codegen
Anshul Sharma
 
PPTX
Three address code In Compiler Design
Shine Raj
 
PPT
Code Generations - 1 compiler design.ppt
SreepriyaPilla
 
Chapter 6 Intermediate Code Generation
Radhakrishnan Chinnusamy
 
458237.-Compiler-Design-Intermediate-code-generation.ppt
PalaniSamyB3
 
Project presentation PPT.pdf this is help for student who doing this complier...
AmitSingh395981
 
INTERMEDIATE CODE GENERTION-CD UNIT-3.pdf
Ranjeet Reddy
 
Intermediate code generation
Akshaya Arunan
 
Chapter 11 - Intermediate Code Generation.pdf
RAnwarpasha
 
UNIT - III Compiler.pptx power point presentation
KowsalyaG17
 
Compiler notes--unit-iii
Sumathi Gnanasekaran
 
complier design unit 4 for helping students
aniketsugandhi1
 
UNIT - III Compiler.pptx SYNTAX DIRECTED
KavithaNagendran1
 
Unit 3 Compiler Design Regulation 2021.pptx
jeevitha404389
 
Intermediate code representations
ahmed51236
 
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
venkatapranaykumarGa
 
Compiler Design_Intermediate code generation new ppt.pptx
RushaliDeshmukh2
 
Compiler chapter six .ppt course material
gadisaAdamu
 
Intermediate code
Vishal Agarwal
 
Syntax directed definition and intermediate code generation
JananiRamannachetty1
 
Interm codegen
Anshul Sharma
 
Three address code In Compiler Design
Shine Raj
 
Code Generations - 1 compiler design.ppt
SreepriyaPilla
 
Ad

More from Vipul Naik (6)

DOCX
Servlet viva questions
Vipul Naik
 
DOCX
Jsp viva questions
Vipul Naik
 
DOCX
Javascript viva questions
Vipul Naik
 
DOCX
Xml viva questions
Vipul Naik
 
DOCX
Java questions for viva
Vipul Naik
 
DOCX
Html viva questions
Vipul Naik
 
Servlet viva questions
Vipul Naik
 
Jsp viva questions
Vipul Naik
 
Javascript viva questions
Vipul Naik
 
Xml viva questions
Vipul Naik
 
Java questions for viva
Vipul Naik
 
Html viva questions
Vipul Naik
 
Ad

Recently uploaded (20)

PPTX
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
PPTX
Day2 B2 Best.pptx
helenjenefa1
 
PPTX
VITEEE 2026 Exam Details , Important Dates
SonaliSingh127098
 
PDF
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
PPTX
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
PPTX
Element 7. CHEMICAL AND BIOLOGICAL AGENT.pptx
merrandomohandas
 
PPTX
265587293-NFPA 101 Life safety code-PPT-1.pptx
chandermwason
 
PDF
MAD Unit - 2 Activity and Fragment Management in Android (Diploma IT)
JappanMavani
 
PDF
Zilliz Cloud Demo for performance and scale
Zilliz
 
PDF
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 
PPTX
Green Building & Energy Conservation ppt
Sagar Sarangi
 
PPTX
Heart Bleed Bug - A case study (Course: Cryptography and Network Security)
Adri Jovin
 
PDF
PORTFOLIO Golam Kibria Khan — architect with a passion for thoughtful design...
MasumKhan59
 
PPTX
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
PPTX
Arduino Based Gas Leakage Detector Project
CircuitDigest
 
PDF
GTU Civil Engineering All Semester Syllabus.pdf
Vimal Bhojani
 
PPTX
Solar Thermal Energy System Seminar.pptx
Gpc Purapuza
 
PPTX
原版一样(Acadia毕业证书)加拿大阿卡迪亚大学毕业证办理方法
Taqyea
 
DOCX
CS-802 (A) BDH Lab manual IPS Academy Indore
thegodhimself05
 
PDF
Design Thinking basics for Engineers.pdf
CMR University
 
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
Day2 B2 Best.pptx
helenjenefa1
 
VITEEE 2026 Exam Details , Important Dates
SonaliSingh127098
 
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
Element 7. CHEMICAL AND BIOLOGICAL AGENT.pptx
merrandomohandas
 
265587293-NFPA 101 Life safety code-PPT-1.pptx
chandermwason
 
MAD Unit - 2 Activity and Fragment Management in Android (Diploma IT)
JappanMavani
 
Zilliz Cloud Demo for performance and scale
Zilliz
 
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 
Green Building & Energy Conservation ppt
Sagar Sarangi
 
Heart Bleed Bug - A case study (Course: Cryptography and Network Security)
Adri Jovin
 
PORTFOLIO Golam Kibria Khan — architect with a passion for thoughtful design...
MasumKhan59
 
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
Arduino Based Gas Leakage Detector Project
CircuitDigest
 
GTU Civil Engineering All Semester Syllabus.pdf
Vimal Bhojani
 
Solar Thermal Energy System Seminar.pptx
Gpc Purapuza
 
原版一样(Acadia毕业证书)加拿大阿卡迪亚大学毕业证办理方法
Taqyea
 
CS-802 (A) BDH Lab manual IPS Academy Indore
thegodhimself05
 
Design Thinking basics for Engineers.pdf
CMR University
 

Chapter 6 intermediate code generation

  • 1. Chapter 6 Intermediate Code Generation
  • 2. Outline Variants of Syntax Trees Three-address code Types and declarations Translation of expressions Type checking Control flow Backpatching
  • 3. Introduction Intermediate code is the interface between front end and back end in a compiler Ideally the details of source language are confined to the front end and the details of target machines to the back end (a m*n model) In this chapter we study intermediate representations, static type checking and intermediate code generation Parser Static Checker Intermediate Code Generator Code Generator Front end Back end
  • 4. Variants of syntax trees It is sometimes beneficial to crate a DAG instead of tree for Expressions. This way we can easily show the common sub-expressions and then use that knowledge during code generation Example: a+a*(b-c)+(b-c)*d + + * * - b c a d
  • 5. SDD for creating DAG’s Production Semantic Rules 1) E -> E1+T 2) E -> E1-T 3) E -> T 4) T -> (E) 5) T -> id 6) T -> num E.node= new Node(‘+’, E1.node,T.node) E.node= new Node(‘-’, E1.node,T.node) E.node = T.node T.node = E.node T.node = new Leaf(id, id.entry) T.node = new Leaf(num, num.val) Example: 1)p1=Leaf(id, entry-a) 2)P2=Leaf(id, entry-a)=p1 3)p3=Leaf(id, entry-b) 4)p4=Leaf(id, entry-c) 5)p5=Node(‘-’,p3,p4) 6)p6=Node(‘*’,p1,p5) 7)p7=Node(‘+’,p1,p6) 8) p8=Leaf(id,entry-b)=p3 9) p9=Leaf(id,entry-c)=p4 10) p10=Node(‘-’,p3,p4)=p5 11) p11=Leaf(id,entry-d) 12) p12=Node(‘*’,p5,p11) 13) p13=Node(‘+’,p7,p12)
  • 6. Value-number method for constructing DAG’s = + i 10 Algorithm Search the array for a node M with label op, left child l and right child r If there is such a node, return the value number M If not create in the array a new node N with label op, left child l, and right child r and return its value We may use a hash table id To entry for i num 10 + 1 2 3 1 3
  • 7. Three address code In a three address code there is at most one operator at the right side of an instruction Example: + + * * - b c a d t1 = b – c t2 = a * t1 t3 = a + t2 t4 = t1 * d t5 = t3 + t4
  • 8. Forms of three address instructions x = y op z x = op y x = y goto L if x goto L and ifFalse x goto L if x relop y goto L Procedure calls using:  param x  call p,n  y = call p,n x = y[i] and x[i] = y x = &y and x = *y and *x =y
  • 9. Example do i = i+1; while (a[i] < v); L: t1 = i + 1 i = t1 t2 = i * 8 t3 = a[t2] if t3 < v goto L Symbolic labels 100: t1 = i + 1 101: i = t1 102: t2 = i * 8 103: t3 = a[t2] 104: if t3 < v goto 100 Position numbers
  • 10. Data structures for three address codes Quadruples Has four fields: op, arg1, arg2 and result Triples Temporaries are not used and instead references to instructions are made Indirect triples In addition to triples we use a list of pointers to triples
  • 11. Example b * minus c + b * minus c Three address code t1 = minus c t2 = b * t1 t3 = minus c t4 = b * t3 t5 = t2 + t4 a = t5 Quadruples op arg1 arg2 result minus * minus c t3 * + = c t1 b t1 t2 b t3 t4 t2 t4 t5 t5 a Triples op arg1 arg2 minus * minus c * + = c b (0) b (2) (1) (3) a (4) 012 345 Indirect Triples op arg1 arg2 minus * minus c * + = c b (0) b (2) (1) (3) a (4) 012 345 op (0) (1) (2) (3) (4) (5) 35 36 37 38 39 40
  • 12. Type Expressions Example: int[2][3] array(2,array(3,integer))  A basic type is a type expression  A type name is a type expression  A type expression can be formed by applying the array type constructor to a number and a type expression.  A record is a data structure with named field  A type expression can be formed by using the type constructor  for function types  If s and t are type expressions, then their Cartesian product s*t is a type expression  Type expressions may contain variables whose values are type expressions
  • 13. Type Equivalence They are the same basic type. They are formed by applying the same constructor to structurally equivalent types. One is a type name that denotes the other.
  • 15. Storage Layout for Local Names Computing types and their widths
  • 16. Storage Layout for Local Names Syntax-directed translation of array types
  • 17. Sequences of Declarations  Actions at the end: 
  • 18. Fields in Records and Classes  
  • 19. Translation of Expressions and Statements We discussed how to find the types and offset of variables We have therefore necessary preparations to discuss about translation to intermediate code We also discuss the type checking
  • 20. Three-address code for expressions
  • 22. Addressing Array Elements Layouts for a two-dimensional array:
  • 23. Semantic actions for array reference
  • 24. Translation of Array References Nonterminal L has three synthesized attributes: L.addr L.array L.type
  • 26. Introducing type conversions into expression evaluation
  • 27. Abstract syntax tree for the function definition fun length(x) = if null(x) then 0 else length(tl(x)+1) This is a polymorphic function in ML language
  • 28. Inferring a type for the function length
  • 30. Unification algorithm boolean unify (Node m, Node n) { s = find(m); t = find(n); if ( s = t ) return true; else if ( nodes s and t represent the same basic type ) return true; else if (s is an op-node with children s1 and s2 and t is an op-node with children t1 and t2) { union(s , t) ; return unify(s1, t1) and unify(s2, t2); } else if s or t represents a variable { union(s, t) ; return true; } else return false; }
  • 31. Control Flow boolean expressions are often used to: Alter the flow of control. Compute logical values.
  • 36. translation of a simple if-statement  
  • 37. Backpatching Previous codes for Boolean expressions insert symbolic labels for jumps It therefore needs a separate pass to set them to appropriate addresses We can use a technique named backpatching to avoid this We assume we save instructions into an array and labels will be indices in the array For nonterminal B we use two attributes B.truelist and B.falselist together with following functions: makelist(i): create a new list containing only I, an index into the array of instructions Merge(p1,p2): concatenates the lists pointed by p1 and p2 and returns a pointer to the concatenated list Backpatch(p,i): inserts i as the target label for each of the instruction on the list pointed to by p
  • 38. Backpatching for Boolean Expressions  
  • 39. Backpatching for Boolean Expressions Annotated parse tree for x < 100 || x > 200 && x ! = y
  • 41. Translation of a switch-statement
  • 42. Readings Chapter 6 of the book