summaryrefslogtreecommitdiff
path: root/test.hs
blob: a76352485ca2aa826ad6e1a6c29ae5443e16ff5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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