SlideShare a Scribd company logo
COMPILER DESIGN
BCA 5th
Semester 2020
Topic: Intermediate code generation
Sakhi Bandyopadhyay
Department of Computer Science and BCA
Kharagpur College
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
1) E -> E1+T
2) E -> E1-T
3) E -> T
4) T -> (E)
5) T -> id
6) T -> num
Production Semantic Rules
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
• 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
=
+
10
i
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
t1 = minus c
t2 = b * t1
t3 = minus c
t4 = b * t3
t5 = t2 + t4
a = t5
Three address code
minus
*
minus c t3
*
+
=
c t1
b t2
t1
b t4
t3
t2 t5
t4
t5 a
arg1 result
arg2
op
Quadruples
minus
*
minus c
*
+
=
c
b (0)
b (2)
(1) (3)
a
arg1 arg2
op
Triples
(4)
0
1
2
3
4
5
minus
*
minus c
*
+
=
c
b (0)
b (2)
(1) (3)
a
arg1 arg2
op
Indirect Triples
(4)
0
1
2
3
4
5
(0)
(1)
(2)
(3)
(4)
(5)
op
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
Thank You

More Related Content

Similar to 458237.-Compiler-Design-Intermediate-code-generation.ppt (20)

PPTX
Three address code In Compiler Design
Shine Raj
 
PPT
Chapter Eight(2)
bolovv
 
PDF
Module 6 Intermediate Code Generation.pdf
NiramayKolalle
 
PDF
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
venkatapranaykumarGa
 
PPTX
Automata compiler design ppt for btech students
keerthanatalluri1404
 
PPTX
Syntax directed definition and intermediate code generation
JananiRamannachetty1
 
PPTX
Compiler Design_Intermediate code generation new ppt.pptx
RushaliDeshmukh2
 
PDF
Intermediate code generation
Akshaya Arunan
 
PPTX
Python
Sangita Panchal
 
PPT
l7-pointers.ppt
ShivamChaturvedi67
 
PDF
Syntaxdirected
Royalzig Luxury Furniture
 
PDF
Syntaxdirected (1)
Royalzig Luxury Furniture
 
PDF
Syntaxdirected
Royalzig Luxury Furniture
 
DOCX
Theory1&amp;2
Dr.M.Karthika parthasarathy
 
PPTX
Intermediate code generator
sanchi29
 
PPTX
Intermediate code representations
ahmed51236
 
PPSX
Pointers
Frijo Francis
 
PPT
Interm codegen
Anshul Sharma
 
PPTX
Introduction to pointers in c plus plus .
karimibaryal1996
 
Three address code In Compiler Design
Shine Raj
 
Chapter Eight(2)
bolovv
 
Module 6 Intermediate Code Generation.pdf
NiramayKolalle
 
14-Intermediate code generation - Variants of Syntax trees - Three Address Co...
venkatapranaykumarGa
 
Automata compiler design ppt for btech students
keerthanatalluri1404
 
Syntax directed definition and intermediate code generation
JananiRamannachetty1
 
Compiler Design_Intermediate code generation new ppt.pptx
RushaliDeshmukh2
 
Intermediate code generation
Akshaya Arunan
 
l7-pointers.ppt
ShivamChaturvedi67
 
Syntaxdirected (1)
Royalzig Luxury Furniture
 
Intermediate code generator
sanchi29
 
Intermediate code representations
ahmed51236
 
Pointers
Frijo Francis
 
Interm codegen
Anshul Sharma
 
Introduction to pointers in c plus plus .
karimibaryal1996
 

Recently uploaded (20)

PDF
SERVERLESS PERSONAL TO-DO LIST APPLICATION
anushaashraf20
 
PDF
aAn_Introduction_to_Arcadia_20150115.pdf
henriqueltorres1
 
PDF
Viol_Alessandro_Presentazione_prelaurea.pdf
dsecqyvhbowrzxshhf
 
PDF
AI TECHNIQUES FOR IDENTIFYING ALTERATIONS IN THE HUMAN GUT MICROBIOME IN MULT...
vidyalalltv1
 
PDF
Design Thinking basics for Engineers.pdf
CMR University
 
PDF
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
PDF
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
PPTX
Introduction to Internal Combustion Engines - Types, Working and Camparison.pptx
UtkarshPatil98
 
PPTX
Mechanical Design of shell and tube heat exchangers as per ASME Sec VIII Divi...
shahveer210504
 
PPT
Testing and final inspection of a solar PV system
MuhammadSanni2
 
PPTX
Numerical-Solutions-of-Ordinary-Differential-Equations.pptx
SAMUKTHAARM
 
PDF
Electrical Engineer operation Supervisor
ssaruntatapower143
 
PPTX
Biosensors, BioDevices, Biomediccal.pptx
AsimovRiyaz
 
PPTX
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
PDF
REINFORCEMENT LEARNING IN DECISION MAKING SEMINAR REPORT
anushaashraf20
 
PPTX
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
PPTX
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
PPTX
Worm gear strength and wear calculation as per standard VB Bhandari Databook.
shahveer210504
 
PDF
Halide Perovskites’ Multifunctional Properties: Coordination Engineering, Coo...
TaameBerhe2
 
PPTX
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
SERVERLESS PERSONAL TO-DO LIST APPLICATION
anushaashraf20
 
aAn_Introduction_to_Arcadia_20150115.pdf
henriqueltorres1
 
Viol_Alessandro_Presentazione_prelaurea.pdf
dsecqyvhbowrzxshhf
 
AI TECHNIQUES FOR IDENTIFYING ALTERATIONS IN THE HUMAN GUT MICROBIOME IN MULT...
vidyalalltv1
 
Design Thinking basics for Engineers.pdf
CMR University
 
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
Introduction to Internal Combustion Engines - Types, Working and Camparison.pptx
UtkarshPatil98
 
Mechanical Design of shell and tube heat exchangers as per ASME Sec VIII Divi...
shahveer210504
 
Testing and final inspection of a solar PV system
MuhammadSanni2
 
Numerical-Solutions-of-Ordinary-Differential-Equations.pptx
SAMUKTHAARM
 
Electrical Engineer operation Supervisor
ssaruntatapower143
 
Biosensors, BioDevices, Biomediccal.pptx
AsimovRiyaz
 
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
REINFORCEMENT LEARNING IN DECISION MAKING SEMINAR REPORT
anushaashraf20
 
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
Worm gear strength and wear calculation as per standard VB Bhandari Databook.
shahveer210504
 
Halide Perovskites’ Multifunctional Properties: Coordination Engineering, Coo...
TaameBerhe2
 
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
Ad

458237.-Compiler-Design-Intermediate-code-generation.ppt

  • 1. COMPILER DESIGN BCA 5th Semester 2020 Topic: Intermediate code generation Sakhi Bandyopadhyay Department of Computer Science and BCA Kharagpur College
  • 2. 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
  • 3. 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
  • 4. SDD for creating DAG’s 1) E -> E1+T 2) E -> E1-T 3) E -> T 4) T -> (E) 5) T -> id 6) T -> num Production Semantic Rules 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)
  • 5. Value-number method for constructing DAG’s • 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 = + 10 i id To entry for i num 10 + 1 2 3 1 3
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. Example • b * minus c + b * minus c t1 = minus c t2 = b * t1 t3 = minus c t4 = b * t3 t5 = t2 + t4 a = t5 Three address code minus * minus c t3 * + = c t1 b t2 t1 b t4 t3 t2 t5 t4 t5 a arg1 result arg2 op Quadruples minus * minus c * + = c b (0) b (2) (1) (3) a arg1 arg2 op Triples (4) 0 1 2 3 4 5 minus * minus c * + = c b (0) b (2) (1) (3) a arg1 arg2 op Indirect Triples (4) 0 1 2 3 4 5 (0) (1) (2) (3) (4) (5) op 35 36 37 38 39 40
  • 11. 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
  • 12. 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.
  • 14. Storage Layout for Local Names • Computing types and their widths
  • 15. Storage Layout for Local Names  Syntax-directed translation of array types
  • 16. Sequences of Declarations • • Actions at the end: •
  • 17. Fields in Records and Classes • •
  • 18. 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
  • 19. Three-address code for expressions
  • 21. Addressing Array Elements • Layouts for a two-dimensional array:
  • 22. Semantic actions for array reference
  • 23. Translation of Array References Nonterminal L has three synthesized attributes: •L.addr •L.array •L.type
  • 25. Introducing type conversions into expression evaluation
  • 26. 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
  • 27. Inferring a type for the function length
  • 29. 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; }
  • 30. Control Flow boolean expressions are often used to: •Alter the flow of control. •Compute logical values.
  • 35. translation of a simple if-statement • •
  • 36. 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
  • 37. Backpatching for Boolean Expressions • •
  • 38. Backpatching for Boolean Expressions • Annotated parse tree for x < 100 || x > 200 && x ! = y
  • 40. Translation of a switch-statement