SlideShare a Scribd company logo
1 of 52
Download to read offline
Principles of Compiler Design
Intermediate Representation
Compiler
Front End
Lexical
Analysis
Syntax
Analysis
Semantic
Analysis
(Language specific)
Token
stream
Abstract
Syntax
tree Intermediate
Code
Source
Program
Target
Program
Back End
1
Intermediate Code Generation
• Code generation is a mapping from source level
abstractions to target machine abstractions
• Abstraction at the source level
identifiers, operators, expressions, statements,
conditionals, iteration, functions (user defined, system
defined or libraries)
• Abstraction at the target level
memory locations, registers, stack, opcodes, addressing
modes, system libraries, interface to the operating
systems
2
Intermediate Code Generation ...
• Front end translates a source program into an intermediate
representation
• Back end generates target code from intermediate representation
• Benefits
– Retargeting is possible
– Machine independent code optimization is possible
3
Front
end
Intermediate
Code
generator
Machine
Code
generator
Three address code
• Assignment
– x = y op z
– x = op y
– x = y
• Jump
– goto L
– if x relop y goto L
• Indexed assignment
– x = y[i]
– x[i] = y
• Function
– param x
– call p,n
– return y
• Pointer
– x = &y
– x = *y
– *x = y
4
Syntax directed translation of
expression into 3-address code
• Two attributes
• E.place, a name that will hold the
value of E, and
• E.code, the sequence of three-address
statements evaluating E.
• A function gen(…) to produce
sequence of three address statements
– The statements themselves are kept in some
data structure, e.g. list
– SDD operations described using pseudo code
5
Syntax directed translation of
expression into 3-address code
S → id := E
S.code := E.code ||
gen(id.place:= E.place)
E → E1 + E2
E.place:= newtmp
E.code:= E1.code || E2.code ||
gen(E.place := E1.place + E2.place)
E → E1 * E2
E.place:= newtmp
E.code := E1.code || E2.code ||
gen(E.place := E1.place * E2.place)
6
Syntax directed translation of
expression …
E → -E1
E.place := newtmp
E.code := E1.code ||
gen(E.place := - E1.place)
E → (E1)
E.place := E1.place
E.code := E1.code
E → id
E.place := id.place
E.code := ‘ ‘
7
Example
For a = b * -c + b * -c
following code is generated
t1 = -c
t2 = b * t1
t3 = -c
t4 = b * t3
t5 = t2 + t4
a = t5
8
Flow of Control
S → while E do S1
Desired Translation is
S. begin :
E.code
if E.place = 0 goto S.after
S1.code
goto S.begin
S.after :
9
S.begin := newlabel
S.after := newlabel
S.code := gen(S.begin:) ||
E.code ||
gen(if E.place = 0 goto S.after) ||
S1.code ||
gen(goto S.begin) ||
gen(S.after:)
Flow of Control …
S → if E then S1 else S2
E.code
if E.place = 0 goto S.else
S1.code
goto S.after
S.else:
S2.code
S.after:
10
S.else := newlabel
S.after := newlabel
S.code = E.code ||
gen(if E.place = 0 goto S.else) ||
S1.code ||
gen(goto S.after) ||
gen(S.else :) ||
S2.code ||
gen(S.after :)
Declarations
P → D
D → D ; D
D → id : T
T → integer
T → real
11
Declarations
For each name create symbol table entry with information
like type and relative address
P → {offset=0} D
D → D ; D
D → id : T
enter(id.name, T.type, offset);
offset = offset + T.width
T → integer
T.type = integer; T.width = 4
T → real
T.type = real; T.width = 8
12
Declarations
For each name create symbol table entry with information
like type and relative address
P → {offset=0} D
D → D ; D
D → id : T
enter(id.name, T.type, offset);
offset = offset + T.width
T → integer
T.type = integer; T.width = 4
T → real
T.type = real; T.width = 8
13
Declarations …
T → array [ num ] of T1
T.type = array(num.val, T1.type)
T.width = num.val x T1.width
T → ↑T1
T.type = pointer(T1.type)
T.width = 4
14
Keeping track of local information
• when a nested procedure is seen, processing of
declaration in enclosing procedure is temporarily
suspended
• assume following language
P → D
D → D ;D | id : T | proc id ;D ; S
• a new symbol table is created when procedure
declaration
D → proc id ; D1 ; S is seen
• entries for D1 are created in the new symbol table
• the name represented by id is local to the enclosing
procedure 15
Example
program sort;
var a : array[1..n] of integer;
x : integer;
procedure readarray;
var i : integer;
……
procedure exchange(i,j:integers);
……
procedure quicksort(m,n : integer);
var k,v : integer;
function partition(x,y:integer):integer;
var i,j: integer;
……
……
begin{main}
……
end.
16
17
nil header
a
x
readarray
exchange
quicksort
readarray exchange quicksort
header
header
header
header
i k
v
i
j
partition
to readarray
to exchange
partition
sort
Creating symbol table: Interface
• mktable (previous)
create a new symbol table and return a pointer to the
new table. The argument previous points to the
enclosing procedure
• enter (table, name, type, offset)
creates a new entry
• addwidth (table, width)
records cumulative width of all the entries in a table
• enterproc (table, name, newtable)
creates a new entry for procedure name. newtable
points to the symbol table of the new procedure
• Maintain two stacks: (1) symbol tables and (2) offsets
• Standard stack operations: push, pop, top
18
Creating symbol table …
D → proc id;
{t = mktable(top(tblptr));
push(t, tblptr); push(0, offset)}
D1; S
{t = top(tblptr);
addwidth(t, top(offset));
pop(tblptr); pop(offset);
enterproc(top(tblptr), id.name, t)}
D → id: T
{enter(top(tblptr), id.name, T.type, top(offset));
top(offset) = top (offset) + T.width}
19
Creating symbol table …
P →
{t=mktable(nil);
push(t,tblptr);
push(0,offset)}
D
{addwidth(top(tblptr),top(offset));
pop(tblptr); // save it somewhere!
pop(offset)}
D → D ; D
20
Field names in records
T → record
{t = mktable(nil);
push(t, tblptr); push(0, offset)}
D end
{T.type = record(top(tblptr));
T.width = top(offset);
pop(tblptr); pop(offset)}
21
Names in the Symbol table
S → id := E
{p = lookup(id.place);
if p <> nil then emit(p := E.place)
else error}
E → id
{p = lookup(id.name);
if p <> nil then E.place = p
else error}
22
emit is like gen, but
instead of returning
code, it generates
code as a side effect
in a list of three
address instructions.
Type conversion within assignments
E → E1+ E2
E.place= newtmp;
if E1.type = integer and E2.type = integer
then emit(E.place ':=' E1.place 'int+' E2.place);
E.type = integer;
…
similar code if both E1.type and E2.type are real
…
else if E1.type = int and E2.type = real
then
u = newtmp;
emit(u ':=' inttoreal E1.place);
emit(E.place ':=' u 'real+' E2.place);
E.type = real;
…
similar code if E1.type is real and E2.type is integer
26
Example
real x, y;
int i, j;
x = y + i * j
generates code
t1 = i int* j
t2 = inttoreal t1
t3 = y real+ t2
x = t3
27
Boolean Expressions
• compute logical values
• change the flow of control
• boolean operators are: and or not
E → E or E
| E and E
| not E
| (E)
| id relop id
| true
| false
28
Methods of translation
• Evaluate similar to arithmetic expressions
– Normally use 1 for true and 0 for false
• implement by flow of control
– given expression E1 or E2
if E1 evaluates to true
then E1 or E2 evaluates to true
without evaluating E2
29
Numerical representation
• a or b and not c
t1 = not c
t2 = b and t1
t3 = a or t2
• relational expression a < b is equivalent to
if a < b then 1 else 0
1. if a < b goto 4.
2. t = 0
3. goto 5
4. t = 1
5.
30
Syntax directed translation of
boolean expressions
E → E1 or E2
E.place := newtmp
emit(E.place ':=' E1.place 'or' E2.place)
E → E1 and E2
E.place:= newtmp
emit(E.place ':=' E1.place 'and' E2.place)
E → not E1
E.place := newtmp
emit(E.place ':=' 'not' E1.place)
E → (E1) E.place = E1.place
31
Syntax directed translation of
boolean expressions
E → id1 relop id2
E.place := newtmp
emit(if id1.place relop id2.place goto nextstat+3)
emit(E.place = 0)
emit(goto nextstat+2)
emit(E.place = 1)
E → true
E.place := newtmp
emit(E.place = '1')
E → false
E.place := newtmp
emit(E.place = '0')
32
“nextstat” is a global
variable; a pointer to
the statement to be
emitted. emit also
updates the nextstat
as a side-effect.
Example:
Code for a < b or c < d and e < f
100: if a < b goto 103
101: tl = 0
102: goto 104
103: tl = 1
104:
if c < d goto 107
105: t2 = 0
106: goto 108
107: t2 = 1
108:
33
if e < f goto 111
109: t3 = 0
110: goto 112
111: t3 = 1
112:
t4 = t2 and t3
113: t5 = tl or t4
Short Circuit Evaluation of boolean
expressions
• Translate boolean expressions without:
– generating code for boolean operators
– evaluating the entire expression
• Flow of control statements
S → if E then S1
| if E then S1 else S2
| while E do S1
34
Each Boolean
expression E has two
attributes, true and
false. These
attributes hold the
label of the target
stmt to jump to.
Control flow translation of
boolean expression
if E is of the form: a < b
then code is of the form: if a < b goto E.true
goto E.false
E → id1 relop id2
E.code = gen( if id1 relop id2 goto E.true) ||
gen(goto E.false)
E → true E.code = gen(goto E.true)
E → false E.code = gen(goto E.false)
35
S → if E then S1
E.true = newlabel
E.false = S.next
S1.next = S.next
S.code = E.code ||
gen(E.true ':') ||
S1.code
36
E.true
E.true
E.false
E.false
E.code
S1.code
S → if E then S1 else S2
E.true = newlabel
E.false = newlabel
S1.next = S.next
S2.next = S.next
S.code = E.code ||
gen(E.true ':') ||
S1.code ||
gen(goto S.next) ||
gen(E.false ':') ||
S2.code
37
S2.code
E.true
E.true
E.false
E.false
S.next
E.code
S1.code
goto S.next
S → while E do S1
S.begin = newlabel
E.true = newlabel
E.false = S.next
S1.next = S.begin
S.code = gen(S.begin ':') ||
E.code ||
gen(E.true ':') ||
S1.code ||
gen(goto S.begin)
38
E.true
E.true
E.false
E.false
S.begin
E.code
S1.code
goto S.begin
Control flow translation of
boolean expression
E → E1 or E2
E1.true := E.true
E1.false := newlabel
E2.true := E.true
E2.false := E.false
E.code := E1.code || gen(E1.false) || E2.code
E → E1 and E2
E1.true := newlabel
E1 false := E.false
E2.true := E.true
E2 false := E.false
E.code := E1.code || gen(E1.true) || E2.code
39
Control flow translation of
boolean expression …
E → not E1 E1.true := E.false
E1.false := E.true
E.code := E1.code
E → (E1) E1.true := E.true
E1.false := E.false
E.code := E1.code
40
Example
Code for a < b or c < d and e < f
if a < b goto Ltrue
goto L1
L1: if c < d goto L2
goto Lfalse
L2: if e < f goto Ltrue
goto Lfalse
Ltrue:
Lfalse:
41
Example …
Code for while a < b do
if c<d then x=y+z
else x=y-z
L1: if a < b goto L2
goto Lnext
L2: if c < d goto L3
goto L4
L3: t1 = Y + Z
X= t1
goto L1
L4: t1 = Y - Z
X= t1
goto L1
Lnext:
42
Case Statement
• switch expression
begin
case value: statement
case value: statement
….
case value: statement
default: statement
end
• evaluate the expression
• find which value in the list of cases is the same as
the value of the expression.
– Default value matches the expression if none of the
values explicitly mentioned in the cases matches the
expression
• execute the statement associated with the value
found
43
Translation
code to evaluate E into t
if t <> V1 goto L1
code for S1
goto next
L1 if t <> V2 goto L2
code for S2
goto next
L2: ……
Ln-2 if t <> Vn-l goto Ln-l
code for Sn-l
goto next
Ln-1: code for Sn
next:
44
code to evaluate E into t
goto test
L1: code for S1
goto next
L2: code for S2
goto next
……
Ln: code for Sn
goto next
test: if t = V1 goto L1
if t = V2 goto L2
….
if t = Vn-1 goto Ln-1
goto Ln
next:
Efficient for n-way branch
BackPatching
• way to implement boolean expressions and
flow of control statements in one pass
• code is generated as quadruples into an
array
• labels are indices into this array
• makelist(i): create a newlist containing only
i, return a pointer to the list.
• merge(p1,p2): merge lists pointed to by p1
and p2 and return a pointer to the
concatenated list
• backpatch(p,i): insert i as the target label for
the statements in the list pointed to by p
45
Boolean Expressions
E → E1 or E2
| E1 and E2
| not E1
| (E1)
| id1 relop id2
| true
| false
• Insert a marker non terminal M into the grammar
to pick up index of next quadruple.
• attributes truelist and falselist are used to
generate jump code for boolean expressions
• incomplete jumps are placed on lists pointed to
by E.truelist and E.falselist 46
M
M
M → Є
Boolean expressions …
• Consider E → E1 and M E2
–if E1 is false then E is also false so
statements in E1.falselist become
part of E.falselist
–if E1 is true then E2 must be tested
so target of E1.truelist is beginning
of E2
–target is obtained by marker M
–attribute M.quad records the
number of the first statement of
E2.code 47
E → E1 or M E2
backpatch(E1.falselist, M.quad)
E.truelist = merge(E1.truelist, E2.truelist)
E.falselist = E2.falselist
E → E1 and M E2
backpatch(E1.truelist, M.quad)
E.truelist = E2.truelist
E.falselist = merge(E1.falselist, E2.falselist)
E → not E1
E.truelist = E1 falselist
E.falselist = E1.truelist
E → ( E1 )
E.truelist = E1.truelist
E.falselist = E1.falselist
48
E → id1 relop id2
E.truelist = makelist(nextquad)
E.falselist = makelist(nextquad+ 1)
emit(if id1 relop id2 goto --- )
emit(goto ---)
E → true
E.truelist = makelist(nextquad)
emit(goto ---)
E → false
E.falselist = makelist(nextquad)
emit(goto ---)
M → Є
M.quad = nextquad
49
Generate code for
a < b or c < d and e < f
50
E.t={100,104}
E.f={103,105}
E.t={100}
E.f={101}
E.t={104}
E.f={103,105}
or M.q=102
Є
E.t={102}
E.f={103}
and M.q=104 E.t ={104}
E.f={105}
c d
<
a < b
Є
e < f
Initialize nextquad to 100
100: if a < b goto -
101: goto -
102: if c < d goto -
103: goto -
104: if e < f goto -
105 goto –
backpatch(102,104)
104
backpatch(101,102)
102
Flow of Control Statements
S  if E then S1
| if E then S1 else S2
| while E do S1
| begin L end
| A
L  L ; S
| S
S : Statement
A : Assignment
L : Statement list
51
Scheme to implement translation
• E has attributes truelist and falselist
• L and S have a list of unfilled quadruples to
be filled by backpatching
• S  while E do S1
requires labels S.begin and E.true
– markers M1 and M2 record these labels
S  while M1 E do M2 S1
– when while. .. is reduced to S
backpatch S1.nextlist to make target of all the
statements to M1.quad
– E.truelist is backpatched to go to the beginning
of S1 (M2.quad)
52
Scheme to implement translation …
S  if E then M S1
backpatch(E.truelist, M.quad)
S.nextlist = merge(E.falselist,
S1.nextlist)
S  if E them M1 S1 N else M2 S2
backpatch(E.truelist, M1.quad)
backpatch(E.falselist, M2.quad )
S.next = merge(S1.nextlist,
N.nextlist,
S2.nextlist)
53
Scheme to implement translation …
S  while M1 E do M2 S1
backpatch(S1.nextlist, M1.quad)
backpatch(E.truelist, M2.quad)
S.nextlist = E.falselist
emit(goto M1.quad)
54
Scheme to implement translation …
S  begin L end S.nextlist = L.nextlist
S  A S.nextlist = makelist()
L  L1 ; M S backpatch(L1.nextlist,
M.quad)
L.nextlist = S.nextlist
L  S L.nextlist = S.nextlist
N   N.nextlist = makelist(nextquad)
emit(goto ---)
M   M.quad = nextquad
55

More Related Content

Similar to Principles of Compiler Design Intermediate Representation (IR

Similar to Principles of Compiler Design Intermediate Representation (IR (20)

CC Week 11.ppt
CC Week 11.pptCC Week 11.ppt
CC Week 11.ppt
 
Ch8b
Ch8bCh8b
Ch8b
 
Left factor put
Left factor putLeft factor put
Left factor put
 
Chapter 6 Intermediate Code Generation
Chapter 6   Intermediate Code GenerationChapter 6   Intermediate Code Generation
Chapter 6 Intermediate Code Generation
 
Presentation1.pdf
Presentation1.pdfPresentation1.pdf
Presentation1.pdf
 
Chapter 6 intermediate code generation
Chapter 6   intermediate code generationChapter 6   intermediate code generation
Chapter 6 intermediate code generation
 
Lecture 2 coal sping12
Lecture 2 coal sping12Lecture 2 coal sping12
Lecture 2 coal sping12
 
Chapter 5 Syntax Directed Translation
Chapter 5   Syntax Directed TranslationChapter 5   Syntax Directed Translation
Chapter 5 Syntax Directed Translation
 
Chapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.pptChapter 5 - Syntax Directed Translation.ppt
Chapter 5 - Syntax Directed Translation.ppt
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.ppt
 
Ch5b.ppt
Ch5b.pptCh5b.ppt
Ch5b.ppt
 
Chapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.pptChapter_5_Syntax_Directed_Translation.ppt
Chapter_5_Syntax_Directed_Translation.ppt
 
COMPILER DESIGN- Syntax Directed Translation
COMPILER DESIGN- Syntax Directed TranslationCOMPILER DESIGN- Syntax Directed Translation
COMPILER DESIGN- Syntax Directed Translation
 
02. chapter 3 lexical analysis
02. chapter 3   lexical analysis02. chapter 3   lexical analysis
02. chapter 3 lexical analysis
 
C language basics
C language basicsC language basics
C language basics
 
C tutorial
C tutorialC tutorial
C tutorial
 
Ch3.ppt
Ch3.pptCh3.ppt
Ch3.ppt
 
Ch3.ppt
Ch3.pptCh3.ppt
Ch3.ppt
 
Lecture 3 and 4.pptx
Lecture 3 and 4.pptxLecture 3 and 4.pptx
Lecture 3 and 4.pptx
 
GE3151_PSPP_UNIT_3_Notes
GE3151_PSPP_UNIT_3_NotesGE3151_PSPP_UNIT_3_Notes
GE3151_PSPP_UNIT_3_Notes
 

More from SHUJEHASSAN

programming .pptx
programming .pptxprogramming .pptx
programming .pptxSHUJEHASSAN
 
computer generation .pptx
computer generation .pptxcomputer generation .pptx
computer generation .pptxSHUJEHASSAN
 
mini computer .pptx
mini computer .pptxmini computer .pptx
mini computer .pptxSHUJEHASSAN
 
super computer .pptx
super computer .pptxsuper computer .pptx
super computer .pptxSHUJEHASSAN
 
computer science .pptx
computer science .pptxcomputer science .pptx
computer science .pptxSHUJEHASSAN
 
introduce computer .pptx
introduce computer .pptxintroduce computer .pptx
introduce computer .pptxSHUJEHASSAN
 
ethic of daily life .pptx
ethic of daily life .pptxethic of daily life .pptx
ethic of daily life .pptxSHUJEHASSAN
 
FundamentalsofComputerStudies.pdf
FundamentalsofComputerStudies.pdfFundamentalsofComputerStudies.pdf
FundamentalsofComputerStudies.pdfSHUJEHASSAN
 
gestalt-principles-keli-dirisio.pdf
gestalt-principles-keli-dirisio.pdfgestalt-principles-keli-dirisio.pdf
gestalt-principles-keli-dirisio.pdfSHUJEHASSAN
 

More from SHUJEHASSAN (12)

programming .pptx
programming .pptxprogramming .pptx
programming .pptx
 
computer generation .pptx
computer generation .pptxcomputer generation .pptx
computer generation .pptx
 
mini computer .pptx
mini computer .pptxmini computer .pptx
mini computer .pptx
 
super computer .pptx
super computer .pptxsuper computer .pptx
super computer .pptx
 
computer science .pptx
computer science .pptxcomputer science .pptx
computer science .pptx
 
introduce computer .pptx
introduce computer .pptxintroduce computer .pptx
introduce computer .pptx
 
AI .pptx
AI .pptxAI .pptx
AI .pptx
 
ethic of daily life .pptx
ethic of daily life .pptxethic of daily life .pptx
ethic of daily life .pptx
 
FundamentalsofComputerStudies.pdf
FundamentalsofComputerStudies.pdfFundamentalsofComputerStudies.pdf
FundamentalsofComputerStudies.pdf
 
popl04.ppt
popl04.pptpopl04.ppt
popl04.ppt
 
1585397407.pdf
1585397407.pdf1585397407.pdf
1585397407.pdf
 
gestalt-principles-keli-dirisio.pdf
gestalt-principles-keli-dirisio.pdfgestalt-principles-keli-dirisio.pdf
gestalt-principles-keli-dirisio.pdf
 

Recently uploaded

Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...
Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...
Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...shivangimorya083
 
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls DubaiDubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls Dubaihf8803863
 
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Callshivangimorya083
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz1
 
Aminabad Call Girl Agent 9548273370 , Call Girls Service Lucknow
Aminabad Call Girl Agent 9548273370 , Call Girls Service LucknowAminabad Call Girl Agent 9548273370 , Call Girls Service Lucknow
Aminabad Call Girl Agent 9548273370 , Call Girls Service Lucknowmakika9823
 
Schema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdfSchema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdfLars Albertsson
 
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service Bhilai
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service BhilaiLow Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service Bhilai
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service BhilaiSuhani Kapoor
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130Suhani Kapoor
 
Log Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxLog Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxJohnnyPlasten
 
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...Suhani Kapoor
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Sapana Sha
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...Florian Roscheck
 
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM TRACKING WITH GOOGLE ANALYTICS.pptx
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM  TRACKING WITH GOOGLE ANALYTICS.pptxEMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM  TRACKING WITH GOOGLE ANALYTICS.pptx
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM TRACKING WITH GOOGLE ANALYTICS.pptxthyngster
 
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptSonatrach
 
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Jack DiGiovanna
 
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service Amravati
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service AmravatiVIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service Amravati
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service AmravatiSuhani Kapoor
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxEmmanuel Dauda
 

Recently uploaded (20)

Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...
Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...
Full night 🥵 Call Girls Delhi New Friends Colony {9711199171} Sanya Reddy ✌️o...
 
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
꧁❤ Aerocity Call Girls Service Aerocity Delhi ❤꧂ 9999965857 ☎️ Hard And Sexy ...
 
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls DubaiDubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
 
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Punjabi Bagh 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signals
 
Aminabad Call Girl Agent 9548273370 , Call Girls Service Lucknow
Aminabad Call Girl Agent 9548273370 , Call Girls Service LucknowAminabad Call Girl Agent 9548273370 , Call Girls Service Lucknow
Aminabad Call Girl Agent 9548273370 , Call Girls Service Lucknow
 
Schema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdfSchema on read is obsolete. Welcome metaprogramming..pdf
Schema on read is obsolete. Welcome metaprogramming..pdf
 
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service Bhilai
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service BhilaiLow Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service Bhilai
Low Rate Call Girls Bhilai Anika 8250192130 Independent Escort Service Bhilai
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
 
Log Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptxLog Analysis using OSSEC sasoasasasas.pptx
Log Analysis using OSSEC sasoasasasas.pptx
 
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
 
E-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptxE-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptx
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
 
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM TRACKING WITH GOOGLE ANALYTICS.pptx
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM  TRACKING WITH GOOGLE ANALYTICS.pptxEMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM  TRACKING WITH GOOGLE ANALYTICS.pptx
EMERCE - 2024 - AMSTERDAM - CROSS-PLATFORM TRACKING WITH GOOGLE ANALYTICS.pptx
 
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
(PARI) Call Girls Wanowrie ( 7001035870 ) HI-Fi Pune Escorts Service
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
 
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
 
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service Amravati
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service AmravatiVIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service Amravati
VIP Call Girls in Amravati Aarohi 8250192130 Independent Escort Service Amravati
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptx
 

Principles of Compiler Design Intermediate Representation (IR

  • 1. Principles of Compiler Design Intermediate Representation Compiler Front End Lexical Analysis Syntax Analysis Semantic Analysis (Language specific) Token stream Abstract Syntax tree Intermediate Code Source Program Target Program Back End 1
  • 2. Intermediate Code Generation • Code generation is a mapping from source level abstractions to target machine abstractions • Abstraction at the source level identifiers, operators, expressions, statements, conditionals, iteration, functions (user defined, system defined or libraries) • Abstraction at the target level memory locations, registers, stack, opcodes, addressing modes, system libraries, interface to the operating systems 2
  • 3. Intermediate Code Generation ... • Front end translates a source program into an intermediate representation • Back end generates target code from intermediate representation • Benefits – Retargeting is possible – Machine independent code optimization is possible 3 Front end Intermediate Code generator Machine Code generator
  • 4. Three address code • Assignment – x = y op z – x = op y – x = y • Jump – goto L – if x relop y goto L • Indexed assignment – x = y[i] – x[i] = y • Function – param x – call p,n – return y • Pointer – x = &y – x = *y – *x = y 4
  • 5. Syntax directed translation of expression into 3-address code • Two attributes • E.place, a name that will hold the value of E, and • E.code, the sequence of three-address statements evaluating E. • A function gen(…) to produce sequence of three address statements – The statements themselves are kept in some data structure, e.g. list – SDD operations described using pseudo code 5
  • 6. Syntax directed translation of expression into 3-address code S → id := E S.code := E.code || gen(id.place:= E.place) E → E1 + E2 E.place:= newtmp E.code:= E1.code || E2.code || gen(E.place := E1.place + E2.place) E → E1 * E2 E.place:= newtmp E.code := E1.code || E2.code || gen(E.place := E1.place * E2.place) 6
  • 7. Syntax directed translation of expression … E → -E1 E.place := newtmp E.code := E1.code || gen(E.place := - E1.place) E → (E1) E.place := E1.place E.code := E1.code E → id E.place := id.place E.code := ‘ ‘ 7
  • 8. Example For a = b * -c + b * -c following code is generated t1 = -c t2 = b * t1 t3 = -c t4 = b * t3 t5 = t2 + t4 a = t5 8
  • 9. Flow of Control S → while E do S1 Desired Translation is S. begin : E.code if E.place = 0 goto S.after S1.code goto S.begin S.after : 9 S.begin := newlabel S.after := newlabel S.code := gen(S.begin:) || E.code || gen(if E.place = 0 goto S.after) || S1.code || gen(goto S.begin) || gen(S.after:)
  • 10. Flow of Control … S → if E then S1 else S2 E.code if E.place = 0 goto S.else S1.code goto S.after S.else: S2.code S.after: 10 S.else := newlabel S.after := newlabel S.code = E.code || gen(if E.place = 0 goto S.else) || S1.code || gen(goto S.after) || gen(S.else :) || S2.code || gen(S.after :)
  • 11. Declarations P → D D → D ; D D → id : T T → integer T → real 11
  • 12. Declarations For each name create symbol table entry with information like type and relative address P → {offset=0} D D → D ; D D → id : T enter(id.name, T.type, offset); offset = offset + T.width T → integer T.type = integer; T.width = 4 T → real T.type = real; T.width = 8 12
  • 13. Declarations For each name create symbol table entry with information like type and relative address P → {offset=0} D D → D ; D D → id : T enter(id.name, T.type, offset); offset = offset + T.width T → integer T.type = integer; T.width = 4 T → real T.type = real; T.width = 8 13
  • 14. Declarations … T → array [ num ] of T1 T.type = array(num.val, T1.type) T.width = num.val x T1.width T → ↑T1 T.type = pointer(T1.type) T.width = 4 14
  • 15. Keeping track of local information • when a nested procedure is seen, processing of declaration in enclosing procedure is temporarily suspended • assume following language P → D D → D ;D | id : T | proc id ;D ; S • a new symbol table is created when procedure declaration D → proc id ; D1 ; S is seen • entries for D1 are created in the new symbol table • the name represented by id is local to the enclosing procedure 15
  • 16. Example program sort; var a : array[1..n] of integer; x : integer; procedure readarray; var i : integer; …… procedure exchange(i,j:integers); …… procedure quicksort(m,n : integer); var k,v : integer; function partition(x,y:integer):integer; var i,j: integer; …… …… begin{main} …… end. 16
  • 17. 17 nil header a x readarray exchange quicksort readarray exchange quicksort header header header header i k v i j partition to readarray to exchange partition sort
  • 18. Creating symbol table: Interface • mktable (previous) create a new symbol table and return a pointer to the new table. The argument previous points to the enclosing procedure • enter (table, name, type, offset) creates a new entry • addwidth (table, width) records cumulative width of all the entries in a table • enterproc (table, name, newtable) creates a new entry for procedure name. newtable points to the symbol table of the new procedure • Maintain two stacks: (1) symbol tables and (2) offsets • Standard stack operations: push, pop, top 18
  • 19. Creating symbol table … D → proc id; {t = mktable(top(tblptr)); push(t, tblptr); push(0, offset)} D1; S {t = top(tblptr); addwidth(t, top(offset)); pop(tblptr); pop(offset); enterproc(top(tblptr), id.name, t)} D → id: T {enter(top(tblptr), id.name, T.type, top(offset)); top(offset) = top (offset) + T.width} 19
  • 20. Creating symbol table … P → {t=mktable(nil); push(t,tblptr); push(0,offset)} D {addwidth(top(tblptr),top(offset)); pop(tblptr); // save it somewhere! pop(offset)} D → D ; D 20
  • 21. Field names in records T → record {t = mktable(nil); push(t, tblptr); push(0, offset)} D end {T.type = record(top(tblptr)); T.width = top(offset); pop(tblptr); pop(offset)} 21
  • 22. Names in the Symbol table S → id := E {p = lookup(id.place); if p <> nil then emit(p := E.place) else error} E → id {p = lookup(id.name); if p <> nil then E.place = p else error} 22 emit is like gen, but instead of returning code, it generates code as a side effect in a list of three address instructions.
  • 23. Type conversion within assignments E → E1+ E2 E.place= newtmp; if E1.type = integer and E2.type = integer then emit(E.place ':=' E1.place 'int+' E2.place); E.type = integer; … similar code if both E1.type and E2.type are real … else if E1.type = int and E2.type = real then u = newtmp; emit(u ':=' inttoreal E1.place); emit(E.place ':=' u 'real+' E2.place); E.type = real; … similar code if E1.type is real and E2.type is integer 26
  • 24. Example real x, y; int i, j; x = y + i * j generates code t1 = i int* j t2 = inttoreal t1 t3 = y real+ t2 x = t3 27
  • 25. Boolean Expressions • compute logical values • change the flow of control • boolean operators are: and or not E → E or E | E and E | not E | (E) | id relop id | true | false 28
  • 26. Methods of translation • Evaluate similar to arithmetic expressions – Normally use 1 for true and 0 for false • implement by flow of control – given expression E1 or E2 if E1 evaluates to true then E1 or E2 evaluates to true without evaluating E2 29
  • 27. Numerical representation • a or b and not c t1 = not c t2 = b and t1 t3 = a or t2 • relational expression a < b is equivalent to if a < b then 1 else 0 1. if a < b goto 4. 2. t = 0 3. goto 5 4. t = 1 5. 30
  • 28. Syntax directed translation of boolean expressions E → E1 or E2 E.place := newtmp emit(E.place ':=' E1.place 'or' E2.place) E → E1 and E2 E.place:= newtmp emit(E.place ':=' E1.place 'and' E2.place) E → not E1 E.place := newtmp emit(E.place ':=' 'not' E1.place) E → (E1) E.place = E1.place 31
  • 29. Syntax directed translation of boolean expressions E → id1 relop id2 E.place := newtmp emit(if id1.place relop id2.place goto nextstat+3) emit(E.place = 0) emit(goto nextstat+2) emit(E.place = 1) E → true E.place := newtmp emit(E.place = '1') E → false E.place := newtmp emit(E.place = '0') 32 “nextstat” is a global variable; a pointer to the statement to be emitted. emit also updates the nextstat as a side-effect.
  • 30. Example: Code for a < b or c < d and e < f 100: if a < b goto 103 101: tl = 0 102: goto 104 103: tl = 1 104: if c < d goto 107 105: t2 = 0 106: goto 108 107: t2 = 1 108: 33 if e < f goto 111 109: t3 = 0 110: goto 112 111: t3 = 1 112: t4 = t2 and t3 113: t5 = tl or t4
  • 31. Short Circuit Evaluation of boolean expressions • Translate boolean expressions without: – generating code for boolean operators – evaluating the entire expression • Flow of control statements S → if E then S1 | if E then S1 else S2 | while E do S1 34 Each Boolean expression E has two attributes, true and false. These attributes hold the label of the target stmt to jump to.
  • 32. Control flow translation of boolean expression if E is of the form: a < b then code is of the form: if a < b goto E.true goto E.false E → id1 relop id2 E.code = gen( if id1 relop id2 goto E.true) || gen(goto E.false) E → true E.code = gen(goto E.true) E → false E.code = gen(goto E.false) 35
  • 33. S → if E then S1 E.true = newlabel E.false = S.next S1.next = S.next S.code = E.code || gen(E.true ':') || S1.code 36 E.true E.true E.false E.false E.code S1.code
  • 34. S → if E then S1 else S2 E.true = newlabel E.false = newlabel S1.next = S.next S2.next = S.next S.code = E.code || gen(E.true ':') || S1.code || gen(goto S.next) || gen(E.false ':') || S2.code 37 S2.code E.true E.true E.false E.false S.next E.code S1.code goto S.next
  • 35. S → while E do S1 S.begin = newlabel E.true = newlabel E.false = S.next S1.next = S.begin S.code = gen(S.begin ':') || E.code || gen(E.true ':') || S1.code || gen(goto S.begin) 38 E.true E.true E.false E.false S.begin E.code S1.code goto S.begin
  • 36. Control flow translation of boolean expression E → E1 or E2 E1.true := E.true E1.false := newlabel E2.true := E.true E2.false := E.false E.code := E1.code || gen(E1.false) || E2.code E → E1 and E2 E1.true := newlabel E1 false := E.false E2.true := E.true E2 false := E.false E.code := E1.code || gen(E1.true) || E2.code 39
  • 37. Control flow translation of boolean expression … E → not E1 E1.true := E.false E1.false := E.true E.code := E1.code E → (E1) E1.true := E.true E1.false := E.false E.code := E1.code 40
  • 38. Example Code for a < b or c < d and e < f if a < b goto Ltrue goto L1 L1: if c < d goto L2 goto Lfalse L2: if e < f goto Ltrue goto Lfalse Ltrue: Lfalse: 41
  • 39. Example … Code for while a < b do if c<d then x=y+z else x=y-z L1: if a < b goto L2 goto Lnext L2: if c < d goto L3 goto L4 L3: t1 = Y + Z X= t1 goto L1 L4: t1 = Y - Z X= t1 goto L1 Lnext: 42
  • 40. Case Statement • switch expression begin case value: statement case value: statement …. case value: statement default: statement end • evaluate the expression • find which value in the list of cases is the same as the value of the expression. – Default value matches the expression if none of the values explicitly mentioned in the cases matches the expression • execute the statement associated with the value found 43
  • 41. Translation code to evaluate E into t if t <> V1 goto L1 code for S1 goto next L1 if t <> V2 goto L2 code for S2 goto next L2: …… Ln-2 if t <> Vn-l goto Ln-l code for Sn-l goto next Ln-1: code for Sn next: 44 code to evaluate E into t goto test L1: code for S1 goto next L2: code for S2 goto next …… Ln: code for Sn goto next test: if t = V1 goto L1 if t = V2 goto L2 …. if t = Vn-1 goto Ln-1 goto Ln next: Efficient for n-way branch
  • 42. BackPatching • way to implement boolean expressions and flow of control statements in one pass • code is generated as quadruples into an array • labels are indices into this array • makelist(i): create a newlist containing only i, return a pointer to the list. • merge(p1,p2): merge lists pointed to by p1 and p2 and return a pointer to the concatenated list • backpatch(p,i): insert i as the target label for the statements in the list pointed to by p 45
  • 43. Boolean Expressions E → E1 or E2 | E1 and E2 | not E1 | (E1) | id1 relop id2 | true | false • Insert a marker non terminal M into the grammar to pick up index of next quadruple. • attributes truelist and falselist are used to generate jump code for boolean expressions • incomplete jumps are placed on lists pointed to by E.truelist and E.falselist 46 M M M → Є
  • 44. Boolean expressions … • Consider E → E1 and M E2 –if E1 is false then E is also false so statements in E1.falselist become part of E.falselist –if E1 is true then E2 must be tested so target of E1.truelist is beginning of E2 –target is obtained by marker M –attribute M.quad records the number of the first statement of E2.code 47
  • 45. E → E1 or M E2 backpatch(E1.falselist, M.quad) E.truelist = merge(E1.truelist, E2.truelist) E.falselist = E2.falselist E → E1 and M E2 backpatch(E1.truelist, M.quad) E.truelist = E2.truelist E.falselist = merge(E1.falselist, E2.falselist) E → not E1 E.truelist = E1 falselist E.falselist = E1.truelist E → ( E1 ) E.truelist = E1.truelist E.falselist = E1.falselist 48
  • 46. E → id1 relop id2 E.truelist = makelist(nextquad) E.falselist = makelist(nextquad+ 1) emit(if id1 relop id2 goto --- ) emit(goto ---) E → true E.truelist = makelist(nextquad) emit(goto ---) E → false E.falselist = makelist(nextquad) emit(goto ---) M → Є M.quad = nextquad 49
  • 47. Generate code for a < b or c < d and e < f 50 E.t={100,104} E.f={103,105} E.t={100} E.f={101} E.t={104} E.f={103,105} or M.q=102 Є E.t={102} E.f={103} and M.q=104 E.t ={104} E.f={105} c d < a < b Є e < f Initialize nextquad to 100 100: if a < b goto - 101: goto - 102: if c < d goto - 103: goto - 104: if e < f goto - 105 goto – backpatch(102,104) 104 backpatch(101,102) 102
  • 48. Flow of Control Statements S  if E then S1 | if E then S1 else S2 | while E do S1 | begin L end | A L  L ; S | S S : Statement A : Assignment L : Statement list 51
  • 49. Scheme to implement translation • E has attributes truelist and falselist • L and S have a list of unfilled quadruples to be filled by backpatching • S  while E do S1 requires labels S.begin and E.true – markers M1 and M2 record these labels S  while M1 E do M2 S1 – when while. .. is reduced to S backpatch S1.nextlist to make target of all the statements to M1.quad – E.truelist is backpatched to go to the beginning of S1 (M2.quad) 52
  • 50. Scheme to implement translation … S  if E then M S1 backpatch(E.truelist, M.quad) S.nextlist = merge(E.falselist, S1.nextlist) S  if E them M1 S1 N else M2 S2 backpatch(E.truelist, M1.quad) backpatch(E.falselist, M2.quad ) S.next = merge(S1.nextlist, N.nextlist, S2.nextlist) 53
  • 51. Scheme to implement translation … S  while M1 E do M2 S1 backpatch(S1.nextlist, M1.quad) backpatch(E.truelist, M2.quad) S.nextlist = E.falselist emit(goto M1.quad) 54
  • 52. Scheme to implement translation … S  begin L end S.nextlist = L.nextlist S  A S.nextlist = makelist() L  L1 ; M S backpatch(L1.nextlist, M.quad) L.nextlist = S.nextlist L  S L.nextlist = S.nextlist N   N.nextlist = makelist(nextquad) emit(goto ---) M   M.quad = nextquad 55