aboutsummaryrefslogtreecommitdiff
path: root/test.icl
diff options
context:
space:
mode:
Diffstat (limited to 'test.icl')
-rw-r--r--test.icl34
1 files changed, 34 insertions, 0 deletions
diff --git a/test.icl b/test.icl
new file mode 100644
index 0000000..77e836c
--- /dev/null
+++ b/test.icl
@@ -0,0 +1,34 @@
+module test
+
+import StdEnv
+import Data.Maybe
+from Data.Func import $
+
+import Smurf
+import SmurfParse
+
+Start :: *World -> *World
+Start w
+# (io, w) = stdio w
+//# io = loop (prog reverse) zero io
+# (mbSt, io) = run (prog reverse) zero io
+# result = if (isNothing mbSt) "uh-oh." (toString $ fromJust mbSt)
+# io = io <<< "\n--------------------\n" <<< result <<< "\n"
+= snd $ fclose io w
+where
+ loop :: !Program State !*File -> *File
+ loop p st f
+ # (mbProgSt, f) = step p st f
+ | isNothing mbProgSt = f <<< "NOTHING!!!\n"
+ # (prog, st) = fromJust mbProgSt
+ | isEmpty prog = f <<< "\n---------------------------\n" <<< toString st
+ # f = f <<< "---> " <<< toString (hd prog) <<< " ? "
+ # (cmd, f) = freadline f
+ | cmd == "state\n" = loop prog st (f <<< toString st)
+ = loop prog st f
+
+ prog txt = fromJust $ parse txt
+
+ // From http://esolangs.org/wiki/Smurf
+ reverse = ['"+"i+""p""gtg""gt"i"p"\\"\\"p\\"i\\"gh\\"o\\"g+\\"o\\"p\\"i\\"gt\\"i\\"p\\"\\\\\\"+\\\\\\"\\\\\\"\\\\\\"p\\"\\"i\\"gq+\\"tg\\"+\\"i\\"gq+\\"\\\\\\"i\\\\\\"p\\"+\\"o\\"gq+\\"\\\\\\"o\\\\\\"p\\"+\\"\\"gq+\\"\\"g+\\"\\"p\\"o\\"gq\\"o\\"+\\"+\\"pgx"""p"\\"+\\"\\"\\"p""i"gq+"tg"+"i"gq+"\\"i\\"p\\"\\""+""gq+""g+""p"""+""i"g+pgx']
+