Compiler Designs and Constructions Chapter 9: Translation Objectives: Translation Method Three Address Code Dr. Mohsen Chitsaz Chapter 9: Translation 1 Bottom-up evaluation of S-attributed: Definitions: Syntax-directed definition with only synthesized attributes is called S-attributed Use LR Parser Implementation: Stack to hold info about subtrees that have been parsed Chapter 9: Translation 2 Example: A.a:= F(X.x, Y.y, Z.z) for production A ---> XYZ State Value X X.x Y Y.y Z Z.z <--- Top After Parse ===> A A.a Value of Symbol Table Pointer to a State in LR(1) Parse Table Chapter 9: Translation 3 Example: Production Semantic Values (Code) L ---> E$ Print (Val[Top]) E ---> E + T Val[nTop]:= Val[Top – 2] + Val[Top] E ---> T T ---> T * F Val[nTop]:= Val[Top – 2] * Val[Top] T ---> F F ---> (E) Val[nTop]:=Val[Top – 1] F ---> digit Chapter 9: Translation 4 Cont. Using LR Parser: Parse 3 * 5 + 4 $ T.Val + = E.Val <--- Top Top – 1 Top - 2 E.Val Chapter 9: Translation <--- nTop 5 Input Stack Attribute 3*5+4$ - - *5+4$ 3 3 *5+4$ F 3 F ---> digit *5+4$ T 3 T ---> F T* 3 +4$ T*5 3 * 5 +4$ T*F 3 *5 F - digit +4$ T 15 T ---> T * F +4$ E 15 E ---> T E+ 15 $ E+4 15 + 4 $ E+F 15 + 4 F ---> digit $ E+T 15 4 T ---> F $ E 19 E ---> E + T E 19 L 19 5+4$ 4$ Production Used L ---> E $ Chapter 9: Translation 6 Parse 3 * 5 + 4 $ L E + E T T F 3 * $ T Show Stack F F 4 5 Chapter 9: Translation 7 Intermediate Code Generation: Type of intermediate code generation: 1. Graphical Representation a := b * c + b * c Syntax Tree := + a * * b c b Chapter 9: Translation c 8 Dag := + a * b Chapter 9: Translation c 9 Advantages? Disadvantages? Chapter 9: Translation 10 Representation of Syntax Tree: a:= + id a * id b id c * <--- b * c id b id c Chapter 9: Translation 11 b. Using array 0 id 1 id b c 2 3 4 5 6 7 8 0 b c 3 2 a 7 * id id * + id := 1 b*c 4 5 b*c 6 Chapter 9: Translation 12 2. Postfix notation ( a:= ((b * c) + (b * c))) a b c * b c * + := Advantages/Disadvantages? - No need for () No need for Temp Use Run-Time Stack Easy to reconstruct Parse Tree Chapter 9: Translation 13 Three Address Code: 3. Three address Code: General Form X := A op B X, A, B are Const, Name, or Temp Example: a := b * c + d T0 := b * c T1 := T0 + d a := T1 Chapter 9: Translation 14 Three Address Code: Advantages? Disadvantages? Chapter 9: Translation 15 Three Address Code: Assignment Operand:= Operand1 op Operand2 Unary Operation Operand:= Op Operand1 Copy Statement Operand:= Operand1 Procedure/Function Call Parm A,B Call P,n Chapter 9: Translation 16 Three Address Code Indexed Assignment Operand[I]:= B Pointer A:= Address B Unconditional Jump GOTO L Conditional Jump If A RelOp B GOTO L Chapter 9: Translation 17 Types of Three Address Codes: 1. Quadruples (Quad/Three Address Code) Record structure with 4 fields Arg1, Arg3, op, Result Example: a:= -b+c*d Chapter 9: Translation 18 Quadruples: op Arg1 Arg2 Result 0 U_Minus b 1 * c d T2 2 + T1 T2 T3 3 := T3 T1 a 4 Code: U_Minus Mul Add Assign b c T1 T3 d T2 a Chapter 9: Translation T1 T2 T3 19 Types of Three Address Codes: 2. Triples: (3 – Tuples/Triplest) Record with 3 fields Arg1, Arg2, op Example: a := -b + c * d op Arg1 Arg2 (0) U_Minus b (1) * c d (2) + (0) (1) (3) := (2) a Chapter 9: Translation 20 Triples: Arg1, Arg2 are either a pointer to Symbol Table (Name, Constant) or a pointer to Triple Structure This is a Two Address Instruction Most Assembly Languages are made up of Triples Chapter 9: Translation 21 3. Indirect Tuples: We use pointers to Triples Example: a:= -b + c * d Triple Address op Arg1 Arg2 0 14 14 U_Minus b 1 15 15 * c d 2 16 16 + (14) (15) 3 17 17 := (15) a Chapter 9: Translation 22 Indirect Tuples: Save Space: Why? Not good for optimizing code: Why? Not good for memory assignment prior to code generation Chapter 9: Translation 23