LetExp( DecList( VarDec(N, IntExp(8), true), DecList( TypeDec(intArray, ArrayTy(int)), DecList( VarDec(row, ArrayExp(intArray, varExp( SimpleVar(N)), IntExp(0)), true), DecList( VarDec(col, ArrayExp(intArray, varExp( SimpleVar(N)), IntExp(0)), true), DecList( VarDec(diag1, ArrayExp(intArray, OpExp( PLUS, varExp( SimpleVar(N)), OpExp( MINUS, varExp( SimpleVar(N)), IntExp(1))), IntExp(0)), true), DecList( VarDec(diag2, ArrayExp(intArray, OpExp( PLUS, varExp( SimpleVar(N)), OpExp( MINUS, varExp( SimpleVar(N)), IntExp(1))), IntExp(0)), true), DecList( FunctionDec(printboard Fieldlist(), SeqExp( ExpList( ForExp( VarDec(i, IntExp(0), true), OpExp( MINUS, varExp( SimpleVar(N)), IntExp(1)), SeqExp( ExpList( ForExp( VarDec(j, IntExp(0), true), OpExp( MINUS, varExp( SimpleVar(N)), IntExp(1)), CallExp(print, ExpList( IfExp( OpExp( EQ, varExp( SubscriptVar( SimpleVar(col), varExp( SimpleVar(i)))), varExp( SimpleVar(j))), StringExp(" O"), StringExp(" ."))))), ExpList( CallExp(print, ExpList( StringExp("\n"))))))), ExpList( CallExp(print, ExpList( StringExp("\n")))))), FunctionDec()), DecList( FunctionDec(try Fieldlist( c int, true, Fieldlist()), SeqExp( ExpList( IfExp( OpExp( EQ, varExp( SimpleVar(c)), varExp( SimpleVar(N))), CallExp(printboard, ExpList()), ForExp( VarDec(r, IntExp(0), true), OpExp( MINUS, varExp( SimpleVar(N)), IntExp(1)), IfExp( OpExp( AND, OpExp( AND, OpExp( EQ, varExp( SubscriptVar( SimpleVar(row), varExp( SimpleVar(r)))), IntExp(0)), OpExp( EQ, varExp( SubscriptVar( SimpleVar(diag1), OpExp( PLUS, varExp( SimpleVar(r)), varExp( SimpleVar(c))))), IntExp(0))), OpExp( EQ, varExp( SubscriptVar( SimpleVar(diag2), OpExp( PLUS, varExp( SimpleVar(r)), OpExp( MINUS, IntExp(7), varExp( SimpleVar(c)))))), IntExp(0))), SeqExp( ExpList( AssignExp( SubscriptVar( SimpleVar(row), varExp( SimpleVar(r))), IntExp(1)), ExpList( AssignExp( SubscriptVar( SimpleVar(diag1), OpExp( PLUS, varExp( SimpleVar(r)), varExp( SimpleVar(c)))), IntExp(1)), ExpList( AssignExp( SubscriptVar( SimpleVar(diag2), OpExp( PLUS, varExp( SimpleVar(r)), OpExp( MINUS, IntExp(7), varExp( SimpleVar(c))))), IntExp(1)), ExpList( AssignExp( SubscriptVar( SimpleVar(col), varExp( SimpleVar(c))), varExp( SimpleVar(r))), ExpList( CallExp(try, ExpList( OpExp( PLUS, varExp( SimpleVar(c)), IntExp(1)))), ExpList( AssignExp( SubscriptVar( SimpleVar(row), varExp( SimpleVar(r))), IntExp(0)), ExpList( AssignExp( SubscriptVar( SimpleVar(diag1), OpExp( PLUS, varExp( SimpleVar(r)), varExp( SimpleVar(c)))), IntExp(0)), ExpList( AssignExp( SubscriptVar( SimpleVar(diag2), OpExp( PLUS, varExp( SimpleVar(r)), OpExp( MINUS, IntExp(7), varExp( SimpleVar(c))))), IntExp(0)))))))))))))))), FunctionDec()), DecList())))))))), SeqExp( ExpList( CallExp(try, ExpList( IntExp(0)))))) Nice tree, no?