Added eof parser
authorpimjager <pim@pimjager.nl>
Mon, 29 Feb 2016 19:25:54 +0000 (20:25 +0100)
committerpimjager <pim@pimjager.nl>
Mon, 29 Feb 2016 19:25:54 +0000 (20:25 +0100)
src/yard.dcl
src/yard.icl

index cedf0df..a029c4b 100644 (file)
@@ -6,6 +6,7 @@ from StdClass import class Eq
 from Data.Functor import class Functor
 from Control.Monad import class Monad
 from Control.Applicative import class Applicative, class Alternative
 from Data.Functor import class Functor
 from Control.Monad import class Monad
 from Control.Applicative import class Applicative, class Alternative
+import Data.Void
 
 :: Error = ParseError | LexError String | Unexpected String Int
 :: Parser a b = Parser ([a] -> (Either Error b, [a]))
 
 :: Error = ParseError | LexError String | Unexpected String Int
 :: Parser a b = Parser ([a] -> (Either Error b, [a]))
@@ -26,3 +27,4 @@ satisfy :: (a -> Bool) -> Parser a a
 check :: (a -> Bool) -> Parser a a
 item :: a -> Parser a a | Eq a
 list :: [a] -> Parser a [a] | Eq a
 check :: (a -> Bool) -> Parser a a
 item :: a -> Parser a a | Eq a
 list :: [a] -> Parser a [a] | Eq a
+eof :: Parser a Void
index 81e5883..582ea1d 100644 (file)
@@ -12,6 +12,7 @@ import Data.Either
 import Control.Monad
 import Control.Applicative
 from Data.Func import $
 import Control.Monad
 import Control.Applicative
 from Data.Func import $
+import Data.Void
 
 instance toString Error where
        toString ParseError = "General parse error"
 
 instance toString Error where
        toString ParseError = "General parse error"
@@ -65,6 +66,11 @@ peek = Parser \i -> case i of
     []      = (Left ParseError, [])
     [x:xs]  = (Right x, [x:xs])
 
     []      = (Left ParseError, [])
     [x:xs]  = (Right x, [x:xs])
 
+eof :: Parser a Void
+eof = Parser \i -> case i of 
+    []      = (Right Void, [])
+    _       = (Left ParseError, i)
+
 satisfy :: (a -> Bool) -> Parser a a
 satisfy f = top >>= \r -> if (f r) (return r) fail
 
 satisfy :: (a -> Bool) -> Parser a a
 satisfy f = top >>= \r -> if (f r) (return r) fail
 
@@ -75,4 +81,4 @@ item :: a -> Parser a a | Eq a
 item a  = satisfy ((==)a)
 
 list :: [a] -> Parser a [a] | Eq a
 item a  = satisfy ((==)a)
 
 list :: [a] -> Parser a [a] | Eq a
-list as = mapM item as
+list as = mapM item as
\ No newline at end of file