Presentation is loading. Please wait.

Presentation is loading. Please wait.

Semantic Analysis III + Intermediate Representation I.

Similar presentations


Presentation on theme: "Semantic Analysis III + Intermediate Representation I."— Presentation transcript:

1 Semantic Analysis III + Intermediate Representation I

2 Semantics Analysis Flow 2

3 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 3 ICClass name = A Field name = x … Method name = f Formal name = x … LocalVariable varName = y initExpr = null … fields[0] methods[0] body formals[0] AST Program file = … classes[0] ICClass name = B super = A classes[1] classes[2] … ICClass name = C … …

4 class A { int x; int f(int x) { boolean y;... } } class B extends A { boolean y; int t; } class C { A o; int z; } 4 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; } IntType BoolType A B C int->int … TypeTable Types

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

6 6 Type table implementation class TypeTable { // Maps element types to array types private Map uniqueArrayTypes; private Map 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; } }... }

7 Types 7 IntType BoolType... TypeTable ClassType name = A ClassType name = B ClassType name = C MethodType retType paramTypes super ICClass name = A Field name = x type = IntType Method name = f Formal name = x type = IntType LocalVariable name = y initExpr = null type = BoolType fields[0] methods[0] body formals[0] AST Program file = … classes[0] ICClass name = B super = A classes[1] classes[2] … ICClass name = C … …

8 Types Data Types Table Subtyping relation … Partial Correctness Acyclic Hierarchy No Redefinitions … 8

9 Symbol tables 9 ICClass name = A Field name = x type = IntType Method name = f Formal name = x type = IntType LocalVariable name = y initExpr = null type = BoolType fields[0] methods[0] body formals[0] AST Program file = … classes[0] ICClass name = B super = A classes[1] classes[2] … ICClass name = C … … ACLASS B C Global symtab xFIELDIntType fMETHODint->int A symtab oCLASSA zFIELDIntType C symtab tFIELDIntType yFIELDBoolType B symtab xPARAMIntType yVARBoolType thisVARA $retRET_VARIntType f symtab Location name = x type = ? … Resolve each id to a symbol check scope rules: illegal symbol re-definitions, illegal shadowing, illegal use of undefined symbols

10 Symbol tables 10 ICClass name = A Field name = x type = IntType Method name = f Formal name = x type = IntType LocalVariable name = y initExpr = null type = BoolType fields[0] methods[0] body formals[0] AST Program file = … classes[0] ICClass name = B super = A classes[1] classes[2] … ICClass name = C … … ACLASS B C Global symtab xFIELDIntType fMETHODint->int A symtab oCLASSA zFIELDIntType C symtab tFIELDIntType yFIELDBoolType B symtab xPARAMIntType yVARBoolType thisVARA $retRET_VARIntType f symtab Location name = x type = ? … this belongs to method scope $ret can be used later for type-checking return statements

11 Miscellaneous semantic checks Single main method break/continue inside loops return on every control path … 11

12 Intermediate Representation I 12

13 13 Compiler IC Program ic x86 executable exe Lexical Analysis Syntax Analysis Parsing ASTSymbol Table etc. Inter. Rep. (IR) Code Generation IC compiler

14 14 Lexical analyzer tomatoes + potatoes + carrots tomatoes,PLUS,potatoes,PLUS,carrots,EOF Parser symbolkindtype tomatoesvarint potatoesvarint carrotsvarint LocationExpr id=tomatoes AddExpr leftright AddExpr leftright LocationExpr id=potatoesid=carrots LocationExpr IdType obj intO1 booleanO2 FooO3 Symtab hierarchy Global type table A  E1 : T[] A  E1.length : int Type checking Additional semantic checks Move tomatoes,R1 Move potatoes,R2 Add R2,R1... LIR

15 15 Low-level intermediate representation Allows language-independent, machine- independent optimizations and transformations Easy to translate from AST Easy to translate to assembly Narrow interface ASTLIR Pentium Java bytecode Sparc optimize

16 16 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

17 17 InstructionMeaning Move c,RnRn = c Move x,RnRn = x Move Rn,xx = Rn Add Rm,RnRn = Rn + Rm Sub Rm,RnRn = Rn – Rm Mul Rm,RnRn = Rn * Rm... Note 1: rightmost operand = operation destination Note 2: two register instr - second operand doubles as source and destination LIR instructions Immediate (constant) Memory (variable)

18 18 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:

19 19 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

20 20 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 notation to indicate target register NOT LIR instruction Unary operations Translating expressions

21 21 LocationEx id = x AddExpr leftright ValueExpr val = 42 visit visit (left) visit (right) TR[x + 42] Move x, R1 Move 42, R2 Add R2, R1 Move x, R1Move 42, R2 Add R2, R1 Translating expressions – example

22 22 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

23 23 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)

24 24 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. c f,R3

25 25 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. c f,R3 Need to identify class type of e1 from semantic analysis phase

26 26 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. c f,R3 Given class type of e1, need to compute offset of field f Need to identify class type of e1 from semantic analysis phase

27 27 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. c f,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

28 28 Translating statement block TR[s1; s2; … ; sN] TR[s1] TR[s2] TR[s3] … TR[sN]

29 29 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:

30 30 Translating if-then TR[if (e) then s] R1 := TR[e] Compare 0,R1 JumpTrue _end_label TR[s] _end_label:

31 31 Translating while TR[while (e) s] _test_label: R1 := TR[e] Compare 0,R1 JumpTrue _end_label TR[s] Jump _test_label _end_label


Download ppt "Semantic Analysis III + Intermediate Representation I."

Similar presentations


Ads by Google