Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.
-
Upload
colt-humphreys -
Category
Documents
-
view
215 -
download
0
Transcript of Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.
![Page 1: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/1.jpg)
Decision Structures –The Syntax Tree
Lecture 22
Fri, Apr 8, 2005
![Page 2: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/2.jpg)
Reading
Read Section 8.4, Subsection Flow-of-Control Statements in Compilers: Principles, Techniques, and Tools.
Read Section 8.6, Backpatching.
![Page 3: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/3.jpg)
If Statements
We will consider two forms of the if statement.
stmt IF (cexpr) stmt;and
stmt IF (cexpr) stmt ELSE stmt; cexpr is a conditional expression. Recall that we have the productions
stmt {stmts}cexpr expr
![Page 4: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/4.jpg)
If Statements
For the time being, we will assume that cexpr is a numerical expression. Zero is interpreted as false. Any nonzero value is interpreted as true.
Thus, we do not need to be concerned with relational operators (==, !=, <, >, <=, >=) or boolean operators (&&, ||, !) yet.
![Page 5: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/5.jpg)
Flow of Control
Consider the flow of control for the production
stmt IF (cexpr) stmt1; If cexpr is non-zero, then execution must
jump to stmt1. If cexpr is zero, then execution must jump to
whatever follows stmt1. Problem: We do not yet know where that it.
![Page 6: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/6.jpg)
Flow of Control
We need an object associated with cexpr that will contain two destinations. The “true” destination. The “false” destination.
Such an object is called a backpatch node.
![Page 7: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/7.jpg)
The BackpatchNode Class
public class BackpatchNode{ LinkedList trueList; LinkedList falseList;}
![Page 8: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/8.jpg)
Backpatch Nodes
Each backpatch node contains A “true” reference to a linked list of labels. A “false” reference to a linked list of labels.
The nonterminal cexpr will represent a backpatch node.
From cexpr we set up a “true” destination label and a “false” destination label.
![Page 9: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/9.jpg)
Backpatching
The “true” destination and “false” destination labels are labels to be resolved once we know where the destinations are.
An unresolved label is called a backpatch label.
When we figure out the destination, we will “backpatch” the backpatch label to an actual label.
![Page 10: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/10.jpg)
Backpatching
An assembly language equate statement will accomplish this.
B6=L8
![Page 11: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/11.jpg)
Backpatching
The reason we keep a list of such labels is that there may be several branches in the program that all have the same destination.
![Page 12: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/12.jpg)
Example
Consider the following example.
if (a) b = 5;else b = 10;c = 2;
![Page 13: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/13.jpg)
Example
Consider the following example.
if (a) b = 5;else b = 10;c = 2;
Branch on true
![Page 14: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/14.jpg)
Example
Consider the following example.
if (a) b = 5;else b = 10;c = 2;
Branch on false
![Page 15: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/15.jpg)
Example
Consider the following example.
if (a) b = 5;else b = 10;c = 2;
UnconditionalBranch
![Page 16: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/16.jpg)
Example
Consider the following example.
if (a) b = 5;else b = 10;c = 2;
UnconditionalBranch
![Page 17: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/17.jpg)
Example
Notice that the unconditional branch from the true part and the unconditional branch from the false part have the same destination.
Thus, we build a list of two labels that will be resolved to the same destination.
![Page 18: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/18.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
![Page 19: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/19.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
Jump on trueto Label B1
T
![Page 20: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/20.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
Jump on falseto Label B2FJump on true
to Label B1T
![Page 21: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/21.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
Label L3 L3:
Jump on trueto Label B1
TJump on falseto Label B2F
![Page 22: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/22.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L3:
B1 = L3
Jump on trueto Label B1
TJump on falseto Label B2F
Label L3
![Page 23: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/23.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L3:
Jump on falseto Label B2F
![Page 24: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/24.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L3:Jump to Label B4
Jump on falseto Label B2F
![Page 25: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/25.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
Label L5 L5:
Jump to Label B4
Jump on falseto Label B2F
L3:
![Page 26: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/26.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
Label L5 L5:
Jump to Label B4
Jump on falseto Label B2F
L3:
B2 = L5
![Page 27: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/27.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
Jump to Label B4
L3:
![Page 28: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/28.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
Jump to Label B4
L3:
Jump to Label B6
![Page 29: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/29.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
Jump to Label B4
L3:
Jump to Label B6
Merge B4 and B6
![Page 30: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/30.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
L3:
Jump to Label {B4, B6}
![Page 31: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/31.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
L3:
Label L7 L7:
Jump to Label {B4, B6}
![Page 32: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/32.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
L3:
L7:Label L7
B4 = L7, B6 = L7
Jump to Label {B4, B6}
![Page 33: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/33.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
L3:
L7:
![Page 34: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/34.jpg)
Example
Consider the example again.
if (a) b = 5;else b = 10;c = 2;
L5:
L3:
L7:
T F
![Page 35: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/35.jpg)
Example
Within the if statement, there are two “known” destinations and one unknown destination.
We can see that labels B4 and B6 will be resolved to the same destination eventually, but within the if statement that destination is unknown.
Therefore, in the meantime, we merge them together in a list of backpatch nodes to be resolved later to the same destination.
Once we learn the destination, all labels in the list are resolved to that location.
![Page 36: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/36.jpg)
Backpatch-Related Functions
We will create three functions to facilitate backpatching. makeList(label)
Create a LinkedList containing the single Integer label. Return a reference to the list.
merge(list1, list2) Merge the elements of list1 and list2. Return a reference to the merged list.
backpatch(list, label) Equate label as the target label for each backpatch
label in list.
![Page 37: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/37.jpg)
Labels and Jumps in the Grammar
We saw in the example that actual labels are needed within the if statement to serve as destinations.
We will incorporate the generation of these labels into the grammar.
The nonterminal m will create a label node which will serve as a known destination.
The nonterminal n will create a jump to an as-yet unknown destination.
![Page 38: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/38.jpg)
Labels and Jumps in the Grammar
m represents a destination. n represents an unconditional branch. The productions that involve these
nonterminals are stmts stmts m stmt
stmt IF ( cexpr ) m stmt
stmt IF ( cexpr ) m stmt n ELSE m stmt
func fbeg stmts m RBRACE
![Page 39: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/39.jpg)
Label Trees
LABEL6
A Label Tree
LABEL label=6
A Printed Label Tree
L6:
Assembly Code for a Label
![Page 40: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/40.jpg)
Jump Trees
A Jump Tree
JUMP INT BLABEL blabel=6
jmp B6
Assembly Codefor a Jump
JUMP
BLABEL6
A Printed JumpTree
![Page 41: Decision Structures – The Syntax Tree Lecture 22 Fri, Apr 8, 2005.](https://reader036.fdocuments.in/reader036/viewer/2022062421/56649c755503460f94928ea3/html5/thumbnails/41.jpg)
Equate Trees
An Equate Tree
EQU BLABEL blabel=6 LABEL label=8
B6=L8
Assembly Codefor an Equate
A Printed EquateTree
EQU
LABEL8
BLABEL6