git @ Cat's Eye Technologies Oxcart / 5853b3b
Move Oxcart module. Chris Pressey 5 years ago
4 changed file(s) with 38 addition(s) and 38 deletion(s). Raw diff Collapse all Expand all
22 import Haste.DOM (withElems, getValue, setProp)
33 import Haste.Events (onEvent, MouseEvent(Click))
44
5 import Language.Oxcart (run)
5 import Language.Oxcart.ConcatEval (run)
66
77
88 main = withElems ["prog", "result", "run-button"] driver
0 module Language.Oxcart.ConcatEval where
1
2 import Language.Oxcart.Store
3
4
5 type Op = [Elem] -> ([Elem] -> [Elem]) -> [Elem]
6
7
8 nop xs k = k xs
9 push0 xs k = k ((Num 0):xs)
10 incr ((Num x):xs) k = k (Num (x+1):xs)
11 decr ((Num x):xs) k = k (Num (x-1):xs)
12 dbl ((Num x):xs) k = k (Num (x*2):xs)
13 save xs k = k (Cont k:xs)
14 rsr ((Cont j):xs) _ = j xs
15 cont xs@((Cont j):_) _ = j xs
16 swpk xs@((Cont j):_) k = j (Cont k:xs)
17
18
19 m [] = nop
20 m (x:xs) = (m' x) `composeCPS` (m xs)
21 where
22 m' '0' = push0
23 m' '+' = incr
24 m' '-' = decr
25 m' 'X' = dbl
26 m' '*' = save
27 m' '$' = rsr
28 m' '~' = cont
29 m' '_' = swpk
30 composeCPS f g = \x k -> (f x (\s -> (g s k)))
31
32
33 run s = m s [] id
34
35 test = run "0+XX"
+0
-36
src/Language/Oxcart.hs less more
0 module Language.Oxcart where
1
2 import Language.Oxcart.Store
3
4
5 type Op = [Elem] -> ([Elem] -> [Elem]) -> [Elem]
6
7
8 nop xs k = k xs
9 push0 xs k = k ((Num 0):xs)
10 incr ((Num x):xs) k = k (Num (x+1):xs)
11 decr ((Num x):xs) k = k (Num (x-1):xs)
12 dbl ((Num x):xs) k = k (Num (x*2):xs)
13 save xs k = k (Cont k:xs)
14 rsr ((Cont j):xs) _ = j xs
15 cont xs@((Cont j):_) _ = j xs
16 swpk xs@((Cont j):_) k = j (Cont k:xs)
17
18
19 m [] = nop
20 m (x:xs) = (m' x) `composeCPS` (m xs)
21 where
22 m' '0' = push0
23 m' '+' = incr
24 m' '-' = decr
25 m' 'X' = dbl
26 m' '*' = save
27 m' '$' = rsr
28 m' '~' = cont
29 m' '_' = swpk
30 composeCPS f g = \x k -> (f x (\s -> (g s k)))
31
32
33 run s = m s [] id
34
35 test = run "0+XX"
00 module Main where
11
22 import System.Environment
3 import Language.Oxcart (run)
3 import Language.Oxcart.ConcatEval (run)
44
55
66 main = do