Source program: --------------- let var x : int := 2 var y : int := 7 in x+y end After lexical analysis: ----------------------- [ Let, Var, Id "x", Colon, Id "int", Assign, Intliteral 2, Var, Id "y", Colon, Id "int", Assign, Intliteral 7, In, Id "x", Plus, Id "y", End ] After parsing: -------------- LetExp { decs = [ VarDec { init = IntExp 2, typ = SOME (-,15), var = { escape = ref true, name = - } pos = 7, }, VarDec { init = IntExp 7, pos = 28, typ = SOME (-,36), var = { escape = ref true, name = - } } ], body = SeqExp [ (OpExp { left = VarExp (SimpleVar (-,48)), oper = PlusOp, pos = 48, right = VarExp (SimpleVar (-,50)) }, 48) ], pos=3 } Intermediate Code 1: -------------------- MOVE(TEMP T101, ESEQ(SEQ(MOVE(MEM[4](BINOP(PLUS,TEMP T100,CONST ~4)), CONST 2), MOVE(MEM[4]( BINOP(PLUS,TEMP T100,CONST ~8)), CONST 7)), BINOP(PLUS, MEM[4](BINOP(PLUS,TEMP T100,CONST ~4)), MEM[4](BINOP(PLUS,TEMP T100,CONST ~8))))) Intermediate Code 2: -------------------- LABEL L19 MOVE(MEM[4](BINOP(PLUS,TEMP T100,CONST ~4)), CONST 2) MOVE(MEM[4](BINOP(PLUS,TEMP T100,CONST ~8)), CONST 7) MOVE(TEMP T101, BINOP(PLUS, MEM[4](BINOP(PLUS,TEMP T100,CONST ~4)), MEM[4](BINOP(PLUS,TEMP T100,CONST ~8)))) JUMP(NAME L18) LABEL L18 SPARC Assembly: --------------- .global toymain .section ".text" toymain: save %sp, -136,%sp L19: mov 2 , %g2 st %g2, [%fp-16] ld [%fp-16] , %g3 st %g3, [%fp+-4] mov 7 , %g2 st %g2, [%fp-24] ld [%fp-24] , %g3 st %g3, [%fp+-8] ld [%fp+-4], %g2 st %g2, [%fp-32] ld [%fp+-8], %g2 st %g2, [%fp-36] ld [%fp-32], %g2 ld [%fp-36], %g3 add %g2, %g3, %g2 st %g2, [%fp-28] ld [%fp-28], %i0 ba L18 nop L18: jmp %i7+8 restore