Download - Assignment 3 Solution Background
Assignment 3 Solution Background
• Constant Expression : Infix to postfix2 + 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) iload_0
iload_1
iload_2
imul
iadd
Byte code for i + j + k for static f(int i,j,k)
• Right associative “+”
iload_0
iload_1
iload_2
iadd
iadd
• Left associative “+”
iload_0
iload_1
iadd
iload_2
iadd
• Introducing numeric types with real variables a + b
Push a
Push b
Add
• Byte code generation for static f(double a,b) dload_0
dload_2
dadd
• 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
• 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