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

PDF
Intermediate code generation in Compiler Design
PPTX
Three address code In Compiler Design
PPT
Data structures using c
PPTX
Input-Buffering
PDF
Code optimization in compiler design
PPTX
Syntax Analysis in Compiler Design
PPT
Data Structure and Algorithms Binary Search Tree
PPTX
Graph traversals in Data Structures
Intermediate code generation in Compiler Design
Three address code In Compiler Design
Data structures using c
Input-Buffering
Code optimization in compiler design
Syntax Analysis in Compiler Design
Data Structure and Algorithms Binary Search Tree
Graph traversals in Data Structures

What's hot (20)

PPT
Intermediate code generation (Compiler Design)
PPTX
Graph in data structure
PPT
Spanning trees
PPT
1.Role lexical Analyzer
PPTX
Lecture 12 intermediate code generation
PPTX
Asymptotic Notation
PDF
Dataflow Analysis
PPT
Compiler Design
PPTX
heap Sort Algorithm
PPTX
Recognition-of-tokens
PPTX
Top down and botttom up Parsing
PPT
Intermediate code generation
PPTX
Regular expressions
PPTX
Compiler design syntax analysis
PDF
Nested Queries Lecture
PPTX
Semantics analysis
PDF
String operation
PPTX
Merge Sort
PPTX
classes and objects in C++
PPSX
Intermediate code generation (Compiler Design)
Graph in data structure
Spanning trees
1.Role lexical Analyzer
Lecture 12 intermediate code generation
Asymptotic Notation
Dataflow Analysis
Compiler Design
heap Sort Algorithm
Recognition-of-tokens
Top down and botttom up Parsing
Intermediate code generation
Regular expressions
Compiler design syntax analysis
Nested Queries Lecture
Semantics analysis
String operation
Merge Sort
classes and objects in C++
Ad

Similar to Chapter 6 intermediate code generation (20)

PPT
Chapter 6 Intermediate Code Generation
PPT
458237.-Compiler-Design-Intermediate-code-generation.ppt
PDF
Project presentation PPT.pdf this is help for student who doing this complier...
PDF
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
PPTX
Intermediate code generator
PPTX
Intermediate code generation1
PDF
Assignment12
PPTX
Intermediate code representations
PPTX
Syntax directed definition and intermediate code generation
DOC
Compiler notes--unit-iii
PDF
Intermediate code generation
PPTX
UNIT - III Compiler.pptx power point presentation
PPT
Compiler chapter six .ppt course material
PPTX
PPT
Chapter Eight(2)
PPTX
Presentation(intermediate code generation)
PPTX
complier design unit 4 for helping students
PPTX
Compiler Design_Intermediate code generation new ppt.pptx
PDF
Chapter 11 - Intermediate Code Generation.pdf
Chapter 6 Intermediate Code Generation
458237.-Compiler-Design-Intermediate-code-generation.ppt
Project presentation PPT.pdf this is help for student who doing this complier...
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
Intermediate code generator
Intermediate code generation1
Assignment12
Intermediate code representations
Syntax directed definition and intermediate code generation
Compiler notes--unit-iii
Intermediate code generation
UNIT - III Compiler.pptx power point presentation
Compiler chapter six .ppt course material
Chapter Eight(2)
Presentation(intermediate code generation)
complier design unit 4 for helping students
Compiler Design_Intermediate code generation new ppt.pptx
Chapter 11 - Intermediate Code Generation.pdf
Ad

More from Vipul Naik (6)

DOCX
Servlet viva questions
DOCX
Jsp viva questions
DOCX
Javascript viva questions
DOCX
Xml viva questions
DOCX
Java questions for viva
DOCX
Html viva questions
Servlet viva questions
Jsp viva questions
Javascript viva questions
Xml viva questions
Java questions for viva
Html viva questions

Recently uploaded (20)

PDF
Operating System & Kernel Study Guide-1 - converted.pdf
PPTX
436813905-LNG-Process-Overview-Short.pptx
PPT
Chapter 6 Design in software Engineeing.ppt
PPTX
The-Looming-Shadow-How-AI-Poses-Dangers-to-Humanity.pptx
PPTX
bas. eng. economics group 4 presentation 1.pptx
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
PPTX
ANIMAL INTERVENTION WARNING SYSTEM (4).pptx
PDF
ETO & MEO Certificate of Competency Questions and Answers
PDF
Top 10 read articles In Managing Information Technology.pdf
PPTX
Glazing at Facade, functions, types of glazing
PDF
Introduction to Data Science: data science process
PDF
B.Tech (Electrical Engineering ) 2024 syllabus.pdf
PPTX
Unit 5 BSP.pptxytrrftyyydfyujfttyczcgvcd
PPTX
OOP with Java - Java Introduction (Basics)
PDF
Queuing formulas to evaluate throughputs and servers
PPTX
Lesson 3_Tessellation.pptx finite Mathematics
PPTX
CH1 Production IntroductoryConcepts.pptx
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PPTX
TE-AI-Unit VI notes using planning model
PPTX
AgentX UiPath Community Webinar series - Delhi
Operating System & Kernel Study Guide-1 - converted.pdf
436813905-LNG-Process-Overview-Short.pptx
Chapter 6 Design in software Engineeing.ppt
The-Looming-Shadow-How-AI-Poses-Dangers-to-Humanity.pptx
bas. eng. economics group 4 presentation 1.pptx
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
ANIMAL INTERVENTION WARNING SYSTEM (4).pptx
ETO & MEO Certificate of Competency Questions and Answers
Top 10 read articles In Managing Information Technology.pdf
Glazing at Facade, functions, types of glazing
Introduction to Data Science: data science process
B.Tech (Electrical Engineering ) 2024 syllabus.pdf
Unit 5 BSP.pptxytrrftyyydfyujfttyczcgvcd
OOP with Java - Java Introduction (Basics)
Queuing formulas to evaluate throughputs and servers
Lesson 3_Tessellation.pptx finite Mathematics
CH1 Production IntroductoryConcepts.pptx
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
TE-AI-Unit VI notes using planning model
AgentX UiPath Community Webinar series - Delhi

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