import System.Exit import Compiler import Optimiser import Parser import VM main :: IO () main = do -- let Right p = parseProgram "(print (lambda (n) ((lambda (helper) (if (<= n 0) 0 (if (<= n 2) 1 (helper helper 1 1 (- n 2))))) (lambda (recur a b n) (if (<= n 0) b (recur recur b (+ a b) (- n 1)))))))" -- let Right p = parseProgram "(print ((lambda (n) ((lambda (helper) (if (<= n 0) 0 (if (<= n 2) 1 (helper helper 1 1 (- n 2))))) (lambda (recur a b n) (if (<= n 0) b (recur recur b (+ a b) (- n 1)))))) 6))" let Right p = parseProgram "(do (define f (lambda (n) (+ n 1))) (print (f 10)))" prog <- either die return (compileProgram p) let opt = optimise prog print opt vmRun opt