This is the output of compiling "fac.txt" // factorial fac(n){ if( n == 0 ) return 1; else return n * fac(n-1); } main(){ print(fac(3)); } ----------------------- The parse-tree looks like: fac main (fun main (print (call fac 3 ))) (fun fac (else (== #1 0 )(return 1 )(return (* #1 (call fac (- #1 1 )))))) ------------------------ Now the linear-code: ;; fun main, arity 0, fs 0 :fun1 lit.3 call fun2 print ret ;; fun fac, arity 1, fs 1 :fun2 local.1 lit.0 eq jf L101 lit.1 ret jmp L102 :L101 local.1 local.1 lit.1 sub call fun2 mul ret :L102 ret