Syntactic Production Rules (seen before) (Revised Notation) R1: j -> //as sequence of letters and/or digits that begins with a letter// "i" for identifier R2: i -> j "e" for expression R3: , -> j := i "s" for statement R4: i -> ( j + k ) R5: i -> ( j * k ) Example ANS := (X + (Y * Z)) s1 R3: s1 -> i2 := e3 i2 := e3 R1: i2 -> ANS ANS := e3 R4: e3 -> (e4 + e5) ANS := (e4 + e5) R2: e4 -> i6 ANS := (i6 + e5) R1: i6 -> X ANS := (X + e5) R5: e5 -> (e7 * e8) ANS := (X + (e7 * e8) R2: e7 -> i9 ANS := (X + (i9 * e8) R1: i9 -> Y ANS := (X + (Y * e8) R2: e8 -> i10 ANS := (X + (Y * i10) R1: i10 -> Z ANS := (X + (Y * Z)) NOTE: Used simplified notation where, for example, i2 means 2 and 2 is really a subscript. Semantic Rules SYNTAX SEMANTICS R1: j -> w M(i) = w R2: i -> j M(i) = M(j) code (i) = //nothing// (no code generated!) R3: k -> j := i code (k) = code (i) COPY AX,M(i) COPY M(j), AX R4: i -> (j+k) M(i) = createname code(i) = code (j) code (k) copy ax, M(j) add ax,M(k) copy M(i),ax R5: i -> (j*k) M(i) = createname code(i) = code (j) code (k) copy ax, M(j) mul ax,M(k) copy M(i),ax MORE ADVANCED FEATURES: Looping (need 4 more rules) sequence of statements: R6: i -> j ; code(i) = code(j) k code(k) R7: i -> j ; code(i) = code(j) compound statement: R8: i -> begin code(i) = code(j) j end while statement: R9: i -> while j < k do M(i) = createname h M'(i) = createname code(i) = M(i) code(k) COPY AX, M(j) CMP AX, M(k) JNB M'(s) code(h) JMP M(i) M'(i) NO-OP