semantic analysis iii + intermediate representation i

31
Semantic Analysis III + Intermediate Representation I

Upload: hosea

Post on 21-Jan-2016

55 views

Category:

Documents


0 download

DESCRIPTION

Semantic Analysis III + Intermediate Representation I. Semantics Analysis Flow. IC Program. AST. Program file = …. class A { int x; int f(int x) { boolean y; ... } } class B extends A { boolean y; int t; } class C { A o; int z; }. classes[2]. classes[0]. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Semantic Analysis III + Intermediate Representation I

Semantic Analysis III+

Intermediate Representation I

Page 2: Semantic Analysis III + Intermediate Representation I

Semantics Analysis Flow

22

Page 3: Semantic Analysis III + Intermediate Representation I

class A { int x; int f(int x) { boolean y; ... }}

class B extends A { boolean y; int t;}

class C { A o; int z;}

IC Program

33

ICClassname = A

Fieldname = x …

Methodname = f

Formalname = x …

LocalVariablevarName = yinitExpr = null …

fields[0] methods[0]

bodyformals[0]

ASTProgramfile = …

classes[0]

ICClassname = Bsuper = A

classes[1]classes[2]

…ICClassname = C

Page 4: Semantic Analysis III + Intermediate Representation I

class A { int x; int f(int x) { boolean y; ... }}

class B extends A { boolean y; int t;}

class C { A o; int z;}

44

abstract class Type { String name; boolean subtypeof(Type t) {...}}class IntType extends Type {...}class BoolType extends Type {...}class ArrayType extends Type { Type elemType;}class MethodType extends Type { Type[] paramTypes; Type returnType;}class ClassType extends Type { ICClass classAST;}

IntTypeBoolTypeABCint->int…

TypeTable

Types

Page 5: Semantic Analysis III + Intermediate Representation I

55

Type comparison

Use a unique object for each distinct type Resolve each type expression to same object Use reference equality for comparison (==)

Page 6: Semantic Analysis III + Intermediate Representation I

66

Type table implementationclass TypeTable { // Maps element types to array types private Map<Type,ArrayType> uniqueArrayTypes; private Map<String,ClassType> uniqueClassTypes;

public static Type boolType = new BoolType(); public static Type intType = new IntType(); ...

// Returns unique array type object public static ArrayType arrayType(Type elemType) { if (uniqueArrayTypes.containsKey(elemType)) { // array type object already created – return it return uniqueArrayTypes.get(elemType); } else { // object doesn’t exist – create and return it ArrayType arrt = new ArrayType(elemType); uniqueArrayTypes.put(elemType,ArrayType); return arrt; } } ... }

Page 7: Semantic Analysis III + Intermediate Representation I

Types

77

IntType BoolType

...

TypeTable

ClassTypename = A

ClassTypename = B

ClassTypename = C

MethodType retTypeparamTypes

super

ICClassname = A

Fieldname = xtype = IntType

Methodname = f

Formalname = xtype = IntType

LocalVariablename = yinitExpr = nulltype = BoolType

fields[0] methods[0]

bodyformals[0]

ASTProgramfile = …

classes[0]

ICClassname = Bsuper = A

classes[1]classes[2]

…ICClassname = C

Page 8: Semantic Analysis III + Intermediate Representation I

Types

DataTypes TableSubtyping relation…

Partial CorrectnessAcyclic HierarchyNo Redefinitions…

88

Page 9: Semantic Analysis III + Intermediate Representation I

Symbol tables

99

ICClassname = A

Fieldname = xtype = IntType

Methodname = f

Formalname = xtype = IntType

LocalVariablename = yinitExpr = nulltype = BoolType

fields[0] methods[0]

bodyformals[0]

ASTProgramfile = …

classes[0]

ICClassname = Bsuper = A

classes[1]classes[2]

…ICClassname = C

A CLASS

B CLASS

C CLASS

Global symtab

x FIELD IntType

f METHOD

int->int

A symtabo CLAS

SA

z FIELD IntType

C symtab

t FIELD IntType

y FIELD BoolType

B symtabx PARAM IntType

y VAR BoolType

this VAR A

$ret RET_VAR

IntType

f symtab

Locationname = xtype = ?

… Resolve each id to a symbolcheck scope rules:illegal symbol re-definitions,illegal shadowing,illegal use of undefined symbols

Page 10: Semantic Analysis III + Intermediate Representation I

Symbol tables

1010

ICClassname = A

Fieldname = xtype = IntType

Methodname = f

Formalname = xtype = IntType

LocalVariablename = yinitExpr = nulltype = BoolType

fields[0] methods[0]

bodyformals[0]

ASTProgramfile = …

classes[0]

ICClassname = Bsuper = A

classes[1]classes[2]

…ICClassname = C

A CLASS

B CLASS

C CLASS

Global symtab

x FIELD IntType

f METHOD

int->int

A symtabo CLAS

SA

z FIELD IntType

C symtab

t FIELD IntType

y FIELD BoolType

B symtabx PARAM IntType

y VAR BoolType

this VAR A

$ret RET_VAR

IntType

f symtab

Locationname = xtype = ?

this belongs to

method scope

$ret can be used later for type-checking return statements

Page 11: Semantic Analysis III + Intermediate Representation I

Miscellaneous semantic checks

Single main methodbreak/continue inside loopsreturn on every control path…

1111

Page 12: Semantic Analysis III + Intermediate Representation I

Intermediate Representation I

1212

Page 13: Semantic Analysis III + Intermediate Representation I

1313

Compiler

ICProgram

ic

x86 executable

exeLexicalAnalysi

s

Syntax Analysi

s

Parsing

AST Symbol

Tableetc.

Inter.Rep.(IR)

CodeGeneration

IC compiler

Page 14: Semantic Analysis III + Intermediate Representation I

1414

Lexical analyzer

tomatoes + potatoes + carrots

tomatoes,PLUS,potatoes,PLUS,carrots,EOF

Parser

symbol kind type

tomatoes var int

potatoes var int

carrots var intLocationExprid=tomatoes

AddExprleft right

AddExprleft right

LocationExprid=potatoes id=carrots

LocationExpr

Id Type obj

int O1

boolean O2

Foo O3

Symtab hierarchy Global type table

A E1 : T[]

A E1.length : intType checking Additional semantic checks

Move tomatoes,R1

Move potatoes,R2

Add R2,R1

...

LIR

Page 15: Semantic Analysis III + Intermediate Representation I

1515

Low-level intermediate representation

Allows language-independent, machine-independent optimizations and transformations Easy to translate from AST Easy to translate to assembly Narrow interface

AST LIR

Pentium

Java bytecode

Sparc

optimize

Page 16: Semantic Analysis III + Intermediate Representation I

1616

Low-level IR (LIR)

Low-level representation is essentially an abstract machine language

Low-level language constructs jumps, conditional jumps, …

Allows optimizations specific to these constructs

Page 17: Semantic Analysis III + Intermediate Representation I

1717

Instruction Meaning

Move c,Rn Rn = c

Move x,Rn Rn = x

Move Rn,x x = Rn

Add Rm,Rn Rn = Rn + Rm

Sub Rm,Rn Rn = Rn – Rm

Mul Rm,Rn Rn = Rn * Rm

...

Note 1: rightmost operand = operation destinationNote 2: two register instr - second operand doubles as source and destination

LIR instructions

Immediate(constant)

Memory(variable)

Page 18: Semantic Analysis III + Intermediate Representation I

1818

Example

x = 42;

while (x > 0) {

x = x - 1;

}

Move 42,R1

Move R1,x

_test_label:

Move x,R1

Compare 0,R1

JumpLE _end_label

Move x,R1

Move 1,R2

Sub R2,R1

Move R1,x

Jump _test_label

_end_label:

Page 19: Semantic Analysis III + Intermediate Representation I

1919

Translation (IR lowering) How to translate AST to LIR?

(ignore non-computation nodes) Define how each AST node is translated Recursively translate AST (AST tree traversal)

TR[e] = LIR translation of AST construct e A sequence of LIR instructions Use temporary variables (LIR registers) to store

intermediate values during translation

Page 20: Semantic Analysis III + Intermediate Representation I

2020

TR[e1 OP e2]

R1 := TR[e1]

R2 := TR[e2]

R3 := R1 OP R2

TR[OP e] R1 := TR[e]

R2 := OP R1

Binary operations(arithmetic and comparisons)

Fresh virtual (LIR) register

generated by translation

Shortcut notationto indicate target

registerNOT LIR instruction

Unary operations

Translating expressions

Page 21: Semantic Analysis III + Intermediate Representation I

2121

LocationEx

id = x

AddExprleft right

ValueExpr

val = 42

visit

visit(left)

visit(right)

TR[x + 42]

Move x, R1

Move 42, R2

Add R2, R1

Move x, R1 Move 42, R2

Add R2, R1

Translating expressions – example

Page 22: Semantic Analysis III + Intermediate Representation I

2222

Translating (short-circuit) OR

TR[e1 OR e2]R1 := TR[e1]

Compare 1,R1

JumpTrue _end_label

R2 := T[e2]

Or R2,R1

_end_label:

(OR can be replaced by Move operation since R1 is 0)

Fresh labels generated

during translation

Page 23: Semantic Analysis III + Intermediate Representation I

2323

Translating (short-circuit) AND

TR[e1 AND e2]R1 := TR[e1]

Compare 0,R1

JumpTrue _end_label

R2 := T[e2]

And R2,R1

_end_label:

(AND can be replaced by Move operation since R1 is 1)

Page 24: Semantic Analysis III + Intermediate Representation I

2424

Translating array and field access

TR[e1[e2]]R1 := TR[e1]

R2 := TR[e2]

MoveArray R1[R2], R3

TR[e1.f] R1 := TR[e1]

MoveField R1.cf,R3

Page 25: Semantic Analysis III + Intermediate Representation I

2525

Translating array and field access

TR[e1[e2]]R1 := TR[e1]

R2 := TR[e2]

MoveArray R1[R2], R3

TR[e1.f] R1 := TR[e1]

MoveField R1.cf,R3Need to identify class type

of e1 from semantic analysis phase

Page 26: Semantic Analysis III + Intermediate Representation I

2626

Translating array and field access

TR[e1[e2]]R1 := TR[e1]

R2 := TR[e2]

MoveArray R1[R2], R3

TR[e1.f] R1 := TR[e1]

MoveField R1.cf,R3

Given class type of e1, need to compute offset of

field f

Need to identify class type of e1 from semantic

analysis phase

Page 27: Semantic Analysis III + Intermediate Representation I

2727

Translating array and field access

TR[e1[e2]]R1 := TR[e1]

R2 := TR[e2]

MoveArray R1[R2], R3

TR[e1.f] R1 := TR[e1]

MoveField R1.cf,R3

Constant representing offset of field f in objects of class type of e1

Given class type of e1, need to compute offset of

field f

Need to identify class type of e1 from semantic

analysis phase

Page 28: Semantic Analysis III + Intermediate Representation I

2828

Translating statement block

TR[s1; s2; … ; sN] TR[s1]

TR[s2]

TR[s3]

TR[sN]

Page 29: Semantic Analysis III + Intermediate Representation I

2929

Translating if-then-else

TR[if (e) then s1 else s2]

R1 := TR[e]

Compare 0,R1

JumpTrue _false_label

TR[s1]

Jump _end_label

_false_label:

TR[s2]

_end_label:

Page 30: Semantic Analysis III + Intermediate Representation I

3030

Translating if-then

TR[if (e) then s]R1 := TR[e]

Compare 0,R1

JumpTrue _end_label

TR[s]

_end_label:

Page 31: Semantic Analysis III + Intermediate Representation I

3131

Translating while

TR[while (e) s]_test_label:

R1 := TR[e]

Compare 0,R1

JumpTrue _end_label

TR[s]

Jump _test_label

_end_label