+ All Categories
Home > Documents > Tentative Schedule

Tentative Schedule

Date post: 04-Jan-2016
Category:
Upload: santa
View: 55 times
Download: 4 times
Share this document with a friend
Description:
Tentative Schedule. 20/12 Interpreter+ Code Generation 27/12 Code Generation for Control Flow 3/1 Activation Records 10/1 Program Analysis 17/1 Register Allocation 24/1 Assembler/Linker/Loader 31/1 Garbage Collection Object Oriented. Building Interpreters. Mooly Sagiv - PowerPoint PPT Presentation
56
Tentative Schedule • 20/12 Interpreter+ Code Generation • 27/12 Code Generation for Control Flow • 3/1 Activation Records • 10/1 Program Analysis • 17/1 Register Allocation • 24/1 Assembler/Linker/Loader • 31/1 Garbage Collection • Object Oriented 1
Transcript
Page 1: Tentative Schedule

Tentative Schedule

• 20/12 Interpreter+ Code Generation

• 27/12 Code Generation for Control Flow

• 3/1 Activation Records

• 10/1 Program Analysis

• 17/1 Register Allocation

• 24/1 Assembler/Linker/Loader

• 31/1 Garbage Collection

• Object Oriented 1

Page 2: Tentative Schedule

Building Interpreters

Mooly Sagiv

html://www.cs.tau.ac.il/~msagiv/courses/wcc11-12.html

Chapter 4

2

Page 3: Tentative Schedule

Structure of a simple compiler/interpreter

Lexical

analysis

Syntax

analysis

Context

analysis

Intermediate code

(AST)

Code

generation

Interpretation

Symbol Table

Runtime System

Design

PL dependent PL+pardigm dependent

Machine dependent

3

Page 4: Tentative Schedule

Types of Interpreters

• Recursive– Recursively traverse the tree– Uniform data representation– Conceptually clean– Excellent error detection– 1000x slower than compiler

• Iterative– Closer to CPU– One flat loop– Explicit stack– Good error detection– 30x slower than compiler– Can invoke compiler on code fragments

4

Page 5: Tentative Schedule

Input language (Overview)

• Fully parameterized expressions

• Arguments can be a single digit

expression digit | ‘(‘ expression operator expression ‘)’

operator ‘+’ | ‘*’

digit ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’

5

Page 6: Tentative Schedule

#include "parser.h"

#include "backend.h"static int Interpret_expression(Expression *expr) { switch (expr->type) { case 'D': return expr->value; break; case 'P': { int e_left = Interpret_expression(expr->left); int e_right = Interpret_expression(expr->right); switch (expr->oper) { case '+': return e_left + e_right; case '*': return e_left * e_right; }} break; }}void Process(AST_node *icode) { printf("%d\n", Interpret_expression(icode));}

6

Page 7: Tentative Schedule

AST for (2 * ((3*4)+9))

P

*

oper

typeleft right

P

+

P

*

D

2

D

9

D

4

D

3 7

Page 8: Tentative Schedule

Uniform self-identifying data representation

• The types of the sizes of program data values are not known when the interpreter is written

• Uniform representation of data types– Type– Size

• The value is a pointer

8

Page 9: Tentative Schedule

Example: Complex Number

3.0

4.0

re:

im:

9

Page 10: Tentative Schedule

10

Page 11: Tentative Schedule

Status Indicator

• Direct control flow of the interpreter

• Possible values– Normal mode– Errors– Jumps– Exceptions– Return

11

Page 12: Tentative Schedule

Example: Interpreting C Return

PROCEDURE Elaborate return with expression statement (RWE node):

SET Result To Evaluate expression (RWE node . expression);

IF Status . mode /= Normal mode: Return mode;

SET Status . mode To Return mode;

SET Status . value TO Result;

12

Page 13: Tentative Schedule

Interpreting If-Statement

13

Page 14: Tentative Schedule

Symbol table

• Stores content of variables, named constants, …• For every variable V of type T

– A pointer to the name of V

– The file name and the line it is declared

– Kind of declaration

– A pointer to T

– A pointer to newly allocated space

– Initialization bit

– Language dependent information (e.g. scope)

14

Page 15: Tentative Schedule

Summary Recursive Interpreters

• Can be implemented quickly– Debug the programming language

• Not good for heavy-duty interpreter– Slow– Can employ general techniques to speed the

recursive interpreter• Memoization• Tail call elimination• Partial evaluation

15

Page 16: Tentative Schedule

Memoization

int fib(int n) { if (n == 0) return 0 ; if (n==1) return 1; return fib(n-1) + fib(n-2) ; }

int sfib[100] = {-1, -1, …, -1}int fib(int n) { if (sfib[n] > 0) return sfib[n]; if (n == 0) return 0 ; if (n==1) return 1; sfib[n] = fib(n-1) + fib(n-2) ; return sfib[n]; }

16

Page 17: Tentative Schedule

Tail Call Elimination

void a(…) { … b(); }void b(){code;}

void a(…) { … code; }void b(){code;}

17

Page 18: Tentative Schedule

Tail Call Elimination

void a(int n) { code if (n > 0) a(n-1); }

void a(int n) { loop: code if (n > 0) { n = n -1 ; goto loop }

18

Page 19: Tentative Schedule

Partial Evaluation

• Partially interpret static parts in a program

• Generates an equivalent program

Partial EvaluatorProgram Program’

Input 1Input 2

19

Page 20: Tentative Schedule

Example

int pow(int n, int e)

{

if (e==0)

return 1;

else return n * pow(n, e-1);

}

e=4

int pow4(int n)

{

return n * n * n *n;

}

20

Page 21: Tentative Schedule

Example2

Bool match(string, regexp)

{

switch(regexp) {

….

}

}

regexp=a b* 21

Page 22: Tentative Schedule

Partial Evaluation Generalizes Compilation

Partial EvaluatorInterpreter Program

AST ProgramInput

22

Page 23: Tentative Schedule

But ….

23

Page 24: Tentative Schedule

Iterative Interpretation

• Closed to CPU

• One flat loop with one big case statement

• Use explicit stack– Intermediate results– Local variables

• Requires fully annotated threaded AST– Active-node-pointer (interpreted node)

24

Page 25: Tentative Schedule

Demo Compiler

25

Page 26: Tentative Schedule

Threaded AST• Annotated AST• Every node is connected to the immediate

successor in the execution• Control flow graph

– Nodes• Basic execution units

– expressions– assignments

– Edges• Transfer of control

– sequential– while– …

26

Page 27: Tentative Schedule

Threaded AST for (2 * ((3*4)+9))

P

*

oper

typeleft right

P

+

P

*

D

2

D

9

D

4

D

3

Dummy_node Start

27

Page 28: Tentative Schedule

Demo Compiler

28

Page 29: Tentative Schedule

C Examplewhile ((x > 0) && (x < 10))

{

x = x + y ;

y = y – 1 ;

}

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

T

exitF

29

Page 30: Tentative Schedule

Threading the AST(3.2.1)

• One preorder AST pass

• Every type of AST has its threading routine

• Maintains Last node pointer – Global variable

• Set successor of Last pointer when node is visited

30

Page 31: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

31

Page 32: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

32

Page 33: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

33

Page 34: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

34

Page 35: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

35

Page 36: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

36

Page 37: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

37

Page 38: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

38

Page 39: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

T

39

Page 40: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

T

40

Page 41: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

T

41

Page 42: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

T

42

Page 43: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointer

main

T

43

Page 44: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointermain

T

44

Page 45: Tentative Schedule

while

andseq

ass

ass

id+

x

idx

id

y

>

idx

const0

<

idx

const

10

+

idy

const

1

idy

Last node pointermain

First node pointer

T

45

Page 46: Tentative Schedule

Demo Compiler

46

Page 47: Tentative Schedule

Conditional Statement

if

condthen_part else_part

Last node pointer

47

Page 48: Tentative Schedule

Conditional Statement

if

condthen_part else_part

Last node pointer

End_If

T F

48

Page 49: Tentative Schedule

Iterative Interpretation

• Closed to CPU

• One flat loop with one big case statement

• Use explicit stack– Intermediate results– Local variables

• Requires fully annotated threaded AST– Active-node-pointer (interpreted node)

49

Page 50: Tentative Schedule

Demo Compiler

50

Page 51: Tentative Schedule

Conditional Statements

51

Page 52: Tentative Schedule

Storing Threaded AST

• General Graph

• Array

• Pseudo Instructions

52

Page 53: Tentative Schedule

Threaded AST as General Graph

condition

statement 1

IF

statement 2

statement 3

statement 4END

If 53

Page 54: Tentative Schedule

Threaded AST as Array

condition

IF

statement 1

statement 2

statement 3

statement 4

54

Page 55: Tentative Schedule

Threaded AST as Pseudo Instructions

condition

IFFALSE

statement 1

statement 2statement 3

statement 4

JUMP

55

Page 56: Tentative Schedule

Iterative Interpreters (Summary)

• Different AST representations

• Faster than recursive interpreters– Some interpretative overhead is eliminated

• Portable

• Secure

• Similarities with the compiler

56


Recommended