110 likes | 232 Views
Assignment 3 Solution Background. 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|
E N D
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) iload_0 iload_1 iload_2 imul iadd
Right associative “+” iload_0 iload_1 iload_2 iadd iadd Left associative “+” iload_0 iload_1 iadd iload_2 iadd 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) 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
Scanner Spec (define the-lexical-spec '((whitespace (whitespace) skip) (identifier ((or "i" "j" "k")) symbol) (number (digit (arbno digit)) number)) )
Parser Spec (define the-grammar '((expression (term (arbno "+" term)) add-exps) … (factor ("(" expression ")") paren-exp) ) )