Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a...

36
Backpatching Lecture 24 Fri, Apr 16, 2004

Transcript of Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a...

Page 1: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Backpatching

Lecture 24

Fri, Apr 16, 2004

Page 2: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Linked Lists in Java

The Java Platform includes a LinkedList class.

Unfortunately, it was introduced in Java 1.2 and we are using Java 1.1.8.

To have access to the LinkedList class, you will have to download Java 1.4.2 from Sun Microsystems.

Go tohttp://java.sun.com/j2se/1.4.2/download.html

Page 3: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

The “next” Destination of a Statement

Every statement will be represented as a LinkedList object in the grammar.

The linked list will be a list of all backpatch labels occurring within the statement that must be resolved to the “next” destination of that statement.

In the grammar, we must writenonterminal LinkedList stmts, stmt, n;

Page 4: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Labels and Jumps in the Grammar

The productions that will involve jumps are stmts stmts m stmtstmt IF ( cexpr ) m stmtstmt IF ( cexpr ) m stmt n ELSE m stmtfunc fbeg stmts m RBRACE

Remember, m represents a destination. n represents a jump.

Page 5: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Sequences of Statements

Consider the first production.

stmts stmts1 m stmt Every statement has a “next” destination. Normally, but not always, this is the next

statement. This production will insert labels between

consecutive statements, even though most of them will not be used.

Page 6: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Sequences of Statments

The label at m serves as the “next” destination of stmts1.

Page 7: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Sequences of Statments

The “next” destination from stmt becomes the “next” destination from stmts (a synthesized attribute).

stmts stmts1 m stmt

Page 8: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Sequences of Statments

The “next” destination from stmt becomes the “next” destination from stmts (a synthesized attribute).

stmts stmts1 m stmt

next

Page 9: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Sequences of Statments

The “next” destination from stmt becomes the “next” destination from stmts (a synthesized attribute).

stmts stmts1 m stmt

next next

Page 10: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Action

We must take the following actions. Backpatch stmts1.nextList to m. Return stmt.nextList (to be the nextList of stmts).

This resolves the “next” destination from stmts1 and leaves the “next” destination from stmt unresolved.

Page 11: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

The One-Way if Statement

Now consider the one-way if statement.stmt IF ( cexpr ) m stmt1

The “true” list of the backpatch node associated with cexpr will be resolved to m.

The “false” list of cexpr will later be resolved to the label following stmt1.

stmt IF ( cexpr ) m stmt1

Page 12: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

The One-Way if Statement

Now consider the one-way if statement.stmt IF ( cexpr ) m stmt1

The “true” list of the backpatch node associated with cexpr will be resolved to m.

The “false” list of cexpr will later be resolved to the label following stmt1.

stmt IF ( cexpr ) m stmt1

T

Page 13: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

The One-Way if Statement

Now consider the one-way if statement.stmt IF ( cexpr ) m stmt1

The “true” list of the backpatch node associated with cexpr will be resolved to m.

The “false” list of cexpr will later be resolved to the label following stmt1.

stmt IF ( cexpr ) m stmt1

T

F

Page 14: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

The One-Way if Statement

Now consider the one-way if statement.stmt IF ( cexpr ) m stmt1

The “true” list of the backpatch node associated with cexpr will be resolved to m.

The “false” list of cexpr will later be resolved to the label following stmt1.

stmt IF ( cexpr ) m stmt1

T

F

next

Page 15: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Action

We must take the following actions. Backpatch cexpr.trueList to m. Merge cexpr.falseList and stmt1.nextList. Return the merged list (to be the nextList of stmt).

Page 16: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

Consider the following segment of code.

if (a) b = 900;a = 200;

Page 17: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

EQU BLABEL blabel=3 LABEL label=5

LABEL label=6

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=4 LABEL label=6

Page 18: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

EQU BLABEL blabel=3 LABEL label=5

LABEL label=6

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=4 LABEL label=6

Page 19: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

EQU BLABEL blabel=3 LABEL label=5

LABEL label=6

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=4 LABEL label=6

Page 20: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4 = 6

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

EQU BLABEL blabel=3 LABEL label=5

LABEL label=6

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=4 LABEL label=6

Page 21: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4 = 6

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

EQU BLABEL blabel=3 LABEL label=5

LABEL label=6

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=4 LABEL label=6

Page 22: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

The two-way if production is more interesting.stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

The “true” destination from cexpr is m1 and the “false” destination is m2.

The “next” destination of stmt1 is the same as the “next destination of n.

n represents a jump to the “next” destination of stmt2.

The “next” destination of stmt2 becomes the “next” destination of stmt.

Page 23: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

Consider the two-way if statement.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

Page 24: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

If cexpr is true, then execution jumps to the label m1.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

T

Page 25: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

If cexpr is false, then execution jumps to the label m2.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

T

F

Page 26: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

When stmt1 is completed, execution jumps to the statement following the if statement, i.e., it jumps to stmt.nextList.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

T

F

next

Page 27: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

If execution reaches n, then it jumps to stmt.nextList.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

T

F

next

Page 28: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Two-Way if Statements

When stmt2 is completed, execution jumps to stmt.nextList.

stmt IF ( cexpr ) m1 stmt1 n ELSE m2 stmt2

T

F

next

next

Page 29: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Action

We must take the following actions. Backpatch cexpr.trueList to m1.

Backpatch cexpr.falseList to m2.

Merge stmt1.nextList, n.nextList, and stmt2.nextList.

Page 30: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

Consider the following segment of code.

if (a) b = 900;else b = 500;a = 200;

Page 31: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

JUMP INT BLABEL blabel=6

LABEL label=7

ASSIGN INT NAME PTR|INT value="b" NUM INT value=500

EQU BLABEL blabel=3 LABEL label=5

EQU BLABEL blabel=4 LABEL label=7

LABEL label=8

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=6 LABEL label=8

Page 32: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

JUMP INT BLABEL blabel=6

LABEL label=7

ASSIGN INT NAME PTR|INT value="b" NUM INT value=500

EQU BLABEL blabel=3 LABEL label=5

EQU BLABEL blabel=4 LABEL label=7

LABEL label=8

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=6 LABEL label=8

Page 33: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4 = 7

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

JUMP INT BLABEL blabel=6

LABEL label=7

ASSIGN INT NAME PTR|INT value="b" NUM INT value=500

EQU BLABEL blabel=3 LABEL label=5

EQU BLABEL blabel=4 LABEL label=7

LABEL label=8

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=6 LABEL label=8

Page 34: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Example

JUMPT INT BLABEL blabel=3 = 5 CMPNE INT NUM INT value=0 DEREF INT NAME PTR|INT value="a"

JUMP INT BLABEL blabel=4 = 7

LABEL label=5

ASSIGN INT NAME PTR|INT value="b" NUM INT value=900

JUMP INT BLABEL blabel=6 = 8

LABEL label=7

ASSIGN INT NAME PTR|INT value="b" NUM INT value=500

EQU BLABEL blabel=3 LABEL label=5

EQU BLABEL blabel=4 LABEL label=7

LABEL label=8

ASSIGN INT NAME PTR|INT value="a" NUM INT value=200

EQU BLABEL blabel=6 LABEL label=8

Page 35: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Backpatching at a Function End

Consider the productionfunc fbeg stmts m RBRACE

stmts is a linked list of backpatch labels that must be resolved.

If we reach the end of the function without yet resolving them, then they must be resolved to the return that occurs at the end of the function.

Page 36: Backpatching Lecture 24 Fri, Apr 16, 2004. Linked Lists in Java The Java Platform includes a LinkedList class. Unfortunately, it was introduced in Java.

Backpatching at a Function End

When the code is generated for this production, it is important that the backpatching occur first, before the return.