let rec genBoolean (a: bexp) (dect: dec_table) (proct: proc_table) (ic: intermediateCode): element = match a with
          B(b)              ->  if b then (Val(I(1))) else (Val(I(0)))
        | Equ(ex1,ex2)      ->  (
                             let reg = (ic#getReg) and 
                             (t1,t2) = (genArithmetical ex1 dect proct ic),(genArithmetical ex2 dect proct ic) in (
                                 ic#addInstr(CNE, t1, t2, (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )
        | LE(ex1,ex2)       ->  (
                             let reg = (ic#getReg) and 
                             (t1,t2) = (genArithmetical ex1 dect proct ic),(genArithmetical ex2 dect proct ic) in (
                                 ic#addInstr(CG, t1, t2, (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )
        | LT(ex1,ex2)       ->  (
                             let reg = (ic#getReg) and 
                             (t1,t2) = (genArithmetical ex1 dect proct ic),(genArithmetical ex2 dect proct ic) in (
                                 ic#addInstr(CGE, t1, t2, (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )
        | Not(b)            ->  (
                             let reg = (ic#getReg) in (
                                 ic#addInstr(NOT, (genBoolean b dect proct ic), Null, (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )
        | And(bex1,bex2)    ->  (
                             let reg = (ic#getReg) in (
                                 ic#addInstr(AND, (genBoolean bex1 dect proct ic), (genBoolean bex2 dect proct ic), (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )
        | Or(bex1,bex2)     ->  (
                             let reg = (ic#getReg) in (
                                 ic#addInstr(OR, (genBoolean bex1 dect proct ic), (genBoolean bex2 dect proct ic), (Reg(reg,DInt)));
                                 (Reg(reg,DInt))
                             )
                            )