EXAMPLES  
 
Ex 1.  
 
# Tig file  
 
(2-7 
;2+3)+3 
 
 
# Before canonicalization:  
EXP( 
 BINOP(PLUS, 
  ESEQ( 
   EXP( 
    BINOP(MINUS, 
     CONST 2, 
     CONST 7)), 
   BINOP(PLUS, 
    CONST 2, 
    CONST 3)), 
  CONST 3)) 
 
# After canonicalization:  
MOVE( 
 TEMP $fp, 
 TEMP $sp) 
MOVE( 
 TEMP $sp, 
 BINOP(PLUS, 
  TEMP $sp, 
  CONST -4)) 
 
 
EXP( 
 BINOP(MINUS, 
  CONST 2, 
  CONST 7)) 
EXP( 
 BINOP(PLUS, 
  BINOP(PLUS, 
   CONST 2, 
   CONST 3), 
  CONST 3)) 
JUMP( 
 TEMP $ra) 
 
 
# Instructions:  
.text 
.globl main 
.ent main 
main: 
 
move $fp,$sp 
addi $sp,$sp,-4 
sw $t0,($sp) 
addi $sp,$sp,-4 
addi $v0,$0,7 
move $t0,$v0 
addi $v0,$0,2 
sub $v0,$v0,$t0 
addi $sp,$sp,4 
lw $t0,($sp) 
addi $v0,$0,2 
addi $v0,$v0,3 
addi $v0,$v0,3 
jr $ra 
.end main 
 
Ex 2 : 
 
#  tig file 
 
let  
 var a :=3 
in 
 
a-7 
 
end 
 
 
# Before canonicalization:  
EXP( 
 ESEQ( 
  EXP( 
   ESEQ( 
    MOVE( 
     MEM( 
      BINOP(PLUS, 
       TEMP $fp, 
       CONST 4)), 
     CONST 3), 
    CONST 0)), 
  ESEQ( 
   MOVE( 
    TEMP $v0, 
    BINOP(MINUS, 
     MEM( 
      BINOP(PLUS, 
       TEMP $fp, 
       CONST 4)), 
     CONST 7)), 
   TEMP $v0))) 
 
# After canonicalization:  
MOVE( 
 TEMP $fp, 
 TEMP $sp) 
MOVE( 
 TEMP $sp, 
 BINOP(PLUS, 
  TEMP $sp, 
  CONST -8)) 
MOVE( 
 MEM( 
  BINOP(PLUS, 
   TEMP $fp, 
   CONST 4)), 
 CONST 3) 
MOVE( 
 TEMP $v0, 
 BINOP(MINUS, 
  MEM( 
   BINOP(PLUS, 
    TEMP $fp, 
    CONST 4)), 
  CONST 7)) 
EXP( 
 TEMP $v0) 
JUMP( 
 TEMP $ra) 
 
# Instructions:  
.text 
.globl main 
.ent main 
main: 
 
move $fp,$sp 
addi $sp,$sp,-8 
sw $t0,($sp) 
addi $sp,$sp,-4 
addi $v0,$0,3 
move $t0,$v0 
sw $t0,4($fp) 
addi $sp,$sp,4 
lw $t0,($sp) 
sw $t0,($sp) 
addi $sp,$sp,-4 
addi $v0,$0,7 
move $t0,$v0 
lw $v0,4($fp) 
sub $v0,$v0,$t0 
addi $sp,$sp,4 
lw $t0,($sp) 
jr $ra 
.end main 
 
 
Ex 3 . 
 
# tig file  
 
let  
 var a :=3 
 var b := 1 
in 
	if 2 then 
		a:=b	 
	else 
		4 
end 
 
 
# Before canonicalization:  
EXP( 
 ESEQ( 
  EXP( 
   ESEQ( 
    EXP( 
     ESEQ( 
      MOVE( 
       MEM( 
        BINOP(PLUS, 
         TEMP $fp, 
         CONST 4)), 
       CONST 3), 
      CONST 0)), 
    ESEQ( 
     MOVE( 
      MEM( 
       BINOP(PLUS, 
        TEMP $fp, 
        CONST 8)), 
      CONST 1), 
     CONST 0))), 
  ESEQ( 
   MOVE( 
    TEMP $v0, 
    ESEQ( 
     CJUMP(NE, 
      CONST 2, 
      CONST 0, 
      L1,L2), 
     ESEQ( 
      LABEL L1, 
      ESEQ( 
       MOVE( 
        TEMP $v0, 
        ESEQ( 
         MOVE( 
          MEM( 
           BINOP(PLUS, 
            TEMP $fp, 
            CONST 4)), 
          MEM( 
           BINOP(PLUS, 
            TEMP $fp, 
            CONST 8))), 
         CONST 0)), 
       ESEQ( 
        JUMP( 
         NAME L3), 
        ESEQ( 
         LABEL L2, 
         ESEQ( 
          MOVE( 
           TEMP $v0, 
           CONST 4), 
          ESEQ( 
           LABEL L3, 
           TEMP $v0)))))))), 
   TEMP $v0))) 
# After canonicalization:  
MOVE( 
 TEMP $fp, 
 TEMP $sp) 
MOVE( 
 TEMP $sp, 
 BINOP(PLUS, 
  TEMP $sp, 
  CONST -12)) 
MOVE( 
 MEM( 
  BINOP(PLUS, 
   TEMP $fp, 
   CONST 4)), 
 CONST 3) 
MOVE( 
 MEM( 
  BINOP(PLUS, 
   TEMP $fp, 
   CONST 8)), 
 CONST 1) 
CJUMP(NE, 
 CONST 2, 
 CONST 0, 
 L1,L2) 
LABEL L1 
MOVE( 
 MEM( 
  BINOP(PLUS, 
   TEMP $fp, 
   CONST 4)), 
 MEM( 
  BINOP(PLUS, 
   TEMP $fp, 
   CONST 8))) 
MOVE( 
 TEMP $v0, 
 CONST 0) 
JUMP( 
 NAME L3) 
LABEL L2 
MOVE( 
 TEMP $v0, 
 CONST 4) 
LABEL L3 
MOVE( 
 TEMP $v0, 
 TEMP $v0) 
EXP( 
 TEMP $v0) 
JUMP( 
 TEMP $ra) 
 
# Instructions:  
.text 
.globl main 
.ent main 
main: 
 
move $fp,$sp 
addi $sp,$sp,-12 
sw $t0,($sp) 
addi $sp,$sp,-4 
addi $v0,$0,3 
move $t0,$v0 
sw $t0,4($fp) 
addi $sp,$sp,4 
lw $t0,($sp) 
sw $t0,($sp) 
addi $sp,$sp,-4 
addi $v0,$0,1 
move $t0,$v0 
sw $t0,8($fp) 
addi $sp,$sp,4 
lw $t0,($sp) 
addi $v0,$0,2
move $t1,$v0 
addi $v0,$0,0
move $t2,$v0 
bne $t1,$t2,L1 
b L2 
L1: 
sw $t0,($sp) 
addi $sp,$sp,-4 
lw $v0,8($fp) 
move $t0,$v0 
sw $t0,4($fp) 
addi $sp,$sp,4 
lw $t0,($sp) 
j L3 
L2: 
addi $v0,$0,4
L3: 
move $v0,$v0 
jr $ra 
.end main