100 likes | 260 Views
Assignment Solution Sketch. Translation to MSIL and Javabyte Code. Constant Expression : Infix to postfix 2 + 3 * 4 ( 2 + (3 * 4 ) ) 2 3 4 * + Evaluating postfix expression using stack | 2 | | 2 | 3 | 4 | | 2 | 12 | |14|. Evaluating postfix expression using stack | 2 |
E N D
Assignment Solution Sketch Translation to MSIL and Javabyte Code
Constant Expression : Infix to postfix 2 + 3 * 4 ( 2 + (3 * 4 ) ) 2 3 4 * + • Evaluating postfix expression using stack | 2 | | 2 | 3 | 4 | | 2 | 12 | |14|
Evaluating postfix expression using stack | 2 | | 2 | 3 | 4 | | 2 | 12 | |14| • Compiling constant expression for a stack machine Push 2 Push 3 Push 4 Mul Add
Generalizing to expressions with variables i + j * k Push i Push j Push k Mul Add • Conversion to abstract syntax tree + i * j k
Generalizing to expressions with variables i + j * k Push i Push j Push k Mul Add • Byte code generation for static f(int i,j,k) ldarg.0 ldarg.1 ldarg.2 mul add
Right associative “+” ldarg.0 ldarg.1 ldarg.2 add add Left associative “+” ldarg.0 ldarg.1 add ldarg.2 add Byte code for i + j + k for static f(int i,j,k)
Introducing numeric types with real variables a + b Push a Push b Add • Byte code generation for static f(double a,b) ldarg.0 ldarg.1 add
Mixing int and double variables (requiring coercion code) for static f(double a,int i, j) i + j * a ldarg.1 conv.r8 ldarg.2 conv.r8 ldarg.0 mul add
Translation algorithm essence trans (e1 * e2) = trans(e1) [type coercion code?] trans(e2) [type coercion code?] trans(*) • Map grammar rules to control structures • E.g., alternatives, while-loop, etc
Mixing int and double variables (requiring coercion code) for static f(double a,int i, j) i + j * a iload_2 i2d iload_3 i2d dload_0 dmul dadd