LetExp([ TypeDec[ (intarr, ArrayTy(int))], VarDec(y,true,NONE, IntExp(4)), VarDec(x,true,NONE, IntExp(3)), FunctionDec[ (foo,[ (n,true,int)], NONE, ForExp( i,true, IntExp(1), IntExp(10), LetExp([ FunctionDec[ (bb,[ (z,true,int)], SOME(int), IfExp( VarExp( SimpleVar(z)), SeqExp[ VarExp( SimpleVar(n)), VarExp( SimpleVar(y))], VarExp( SimpleVar(i))))], VarDec(y,true,NONE, IntExp(3)), VarDec(a,true,NONE, ArrayExp(intarr, IntExp(10), IntExp(0)))], IfExp( OpExp(EqOp, VarExp( SimpleVar(n)), IntExp(0)), AssignExp( SimpleVar(y), CallExp(bb,[ VarExp( SimpleVar(n))])), AssignExp( SubscriptVar( SimpleVar(a), VarExp( SimpleVar(i))), OpExp(PlusOp, VarExp( SimpleVar(i)), VarExp( SimpleVar(x))))))))]], CallExp(foo,[ IntExp(10)]))