main program
authorMart Lubbers <mart@martlubbers.net>
Wed, 18 Jul 2018 13:54:36 +0000 (15:54 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 18 Jul 2018 13:54:36 +0000 (15:54 +0200)
main.icl [new file with mode: 0644]
parse.dcl
parse.icl

diff --git a/main.icl b/main.icl
new file mode 100644 (file)
index 0000000..edf5b3a
--- /dev/null
+++ b/main.icl
@@ -0,0 +1,23 @@
+module main
+
+import StdEnv
+import System.CommandLine
+import Data.Func
+
+import ast
+import parse
+import infer
+
+readFile :: *File -> ([Char], *File)
+readFile f
+# (ok, c, f) = freadc f
+| not ok = ([], f)
+# (rest, f) = readFile f
+= ([c:rest], f)
+
+Start w
+# (io, w) = stdio w
+# ([argv0:argv], w) = getCommandLine w
+# (chars, io) = readFile io
+= parse zero
+       $ lex chars
index e059278..7327c57 100644 (file)
--- a/parse.dcl
+++ b/parse.dcl
@@ -10,4 +10,4 @@ from StdOverloaded import class zero
 instance zero ParseState
 
 lex   :: [Char] -> [Token]
-parse :: [Token] ParseState -> Either [String] AST
+parse :: ParseState [Token] -> Either [String] AST
index 4359629..00c5f44 100644 (file)
--- a/parse.icl
+++ b/parse.icl
@@ -94,8 +94,8 @@ token t :== parseIf ((=+?=)t) top
 (until) infix 5 :: (Parser a) (Parser b) -> Parser ([a], b)
 (until) p grd = (tuple [] <$> grd) <|> (appFst o 'SS'._cons <$> p <*> p until grd)
 
-parse :: [Token] ParseState -> Either [String] AST
-parse ts st = runStateT parseAST {st & tokens=ts} >>= uncurry parse2
+parse :: ParseState [Token] -> Either [String] AST
+parse st ts = runStateT parseAST {st & tokens=ts} >>= uncurry parse2
 
 parse2 :: AST ParseState -> Either [String] AST
 parse2 (AST fs) ps = AST <$> mapM pfun fs
@@ -171,24 +171,3 @@ parseIdent = (\(IdentToken s)->s) <$> token (IdentToken "")
 
 parseInt :: Parser Int
 parseInt = (\(IntToken i)->i) <$> token (IntToken 0)
-
-Start =
-       toString <$> parse (
-       lex $
-       ['id x = x;'] ++
-       ['const x y = x;'] ++
-       ['flip x y z = x z y;'] ++
-       ['twice f = f . f;'] ++
-       ['fix f x = let x = f x in x;'] ++
-       ['. infixr 9 f g x = f $ g x;'] ++
-       ['$ infixr 0 = id;'] ++
-       ['& infixr 0 = flip $;'] ++
-       ['+ infixr 6 = code add;'] ++
-       ['- infixr 6 = code sub;'] ++
-       ['* infixr 7 = code mul;'] ++
-       ['/ infixr 7 = code div;'] ++
-       ['&& infixl 3 = code and;'] ++
-       ['|| infixl 2 = code or;'] ++
-       ['ap = (1 +);'] ++
-       ['ap = (+ 1);']
-       ) zero