aboutsummaryrefslogtreecommitdiff
path: root/Sil/Parse
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Parse')
-rw-r--r--Sil/Parse/Parser.dcl33
-rw-r--r--Sil/Parse/Parser.icl93
2 files changed, 0 insertions, 126 deletions
diff --git a/Sil/Parse/Parser.dcl b/Sil/Parse/Parser.dcl
deleted file mode 100644
index cdeaf49..0000000
--- a/Sil/Parse/Parser.dcl
+++ /dev/null
@@ -1,33 +0,0 @@
-definition module Sil.Parse.Parser
-
-from StdOverloaded import class ==
-
-from Control.Applicative import class Applicative, class Alternative
-from Control.Monad import class Monad
-from Data.Error import :: MaybeError
-from Data.Functor import class Functor
-
-from Sil.Parse import :: ParseError
-
-:: Parser a b = Parser ([a] -> (MaybeError ParseError b, [a]))
-
-instance Functor (Parser a)
-instance Applicative (Parser a)
-instance Monad (Parser a)
-instance Alternative (Parser a)
-
-class name a :: a -> String
-instance name String
-
-runParser :: (Parser a b) [a] -> (MaybeError ParseError b, [a])
-(<?>) :: (Parser a b) ParseError -> Parser a b
-fail :: Parser a b
-top :: Parser a a
-peek :: Parser a a
-satisfy :: (a -> Bool) -> Parser a a
-check :: (a -> Bool) -> Parser a a
-(until) infix 2 :: (Parser a b) (Parser a c) -> Parser a [b]
-item :: a -> Parser a a | ==, name a
-list :: [a] -> Parser a [a] | ==, name a
-seplist :: a (Parser a b) -> Parser a [b] | ==, name a
-eof :: Parser a ()
diff --git a/Sil/Parse/Parser.icl b/Sil/Parse/Parser.icl
deleted file mode 100644
index 52956a3..0000000
--- a/Sil/Parse/Parser.icl
+++ /dev/null
@@ -1,93 +0,0 @@
-implementation module Sil.Parse.Parser
-
-import StdList
-import StdOverloaded
-
-import Control.Applicative
-import Control.Monad
-import Data.Error
-from Data.Func import $
-import Data.Functor
-import Data.List
-
-import Sil.Parse
-
-instance Functor (Parser a) where
- fmap f m = liftM f m
-
-instance Applicative (Parser a) where
- pure a = Parser \i -> (Ok a, i)
- (<*>) sf p = ap sf p
-
-instance Monad (Parser a) where
- bind p f = Parser \i -> case runParser p i of
- (Ok r, rest) -> runParser (f r) rest
- (Error e, _) -> (Error e, i)
-
-instance Alternative (Parser a) where
- empty = Parser \i -> (Error UnknownError, i)
- (<|>) p1 p2 = Parser \i -> case runParser p1 i of
- (Ok r, rest) -> (Ok r, rest)
- (Error e1, rest) -> case runParser p2 i of
- (Error e2, rest) -> (Error e2, i)
- (Ok r, rest) -> (Ok r, rest)
-
-instance name String where name s = s
-
-runParser :: (Parser a b) [a] -> (MaybeError ParseError b, [a])
-runParser (Parser f) i = f i
-
-(<?>) :: (Parser a b) ParseError -> Parser a b
-(<?>) p e = Parser \i -> case runParser p i of
- (Error _, rest) -> (Error e, rest)
- o -> o
-
-fail :: Parser a b
-fail = empty
-
-top :: Parser a a
-top = Parser \i -> case i of
- [] = (Error UnknownError, [])
- [x:xs] = (Ok x, xs)
-
-peek :: Parser a a
-peek = Parser \i -> case i of
- [] = (Error UnknownError, [])
- [x:xs] = (Ok x, [x:xs])
-
-satisfy :: (a -> Bool) -> Parser a a
-satisfy f = top >>= \r -> if (f r) (pure r) fail
-
-check :: (a -> Bool) -> Parser a a
-check f = peek >>= \r -> if (f r) (pure r) fail
-
-(until) infix 2 :: (Parser a b) (Parser a c) -> Parser a [b]
-(until) p guard = try $ until` p guard []
-where
- until` :: (Parser a b) (Parser a c) [b] -> Parser a [b]
- until` p guard acc = Parser \i -> case runParser guard i of
- (Ok _, rest) -> (Ok acc, rest)
- (Error _, _) -> case runParser p i of
- (Ok r, rest) -> runParser (until` p guard [r:acc]) rest
- (Error e, _) -> (Error e, i)
-
- try :: (Parser a b) -> Parser a b
- try p = Parser \i -> case runParser p i of
- (Error e, _) -> (Error e, i)
- (Ok r, rest) -> (Ok r, rest)
-
-item :: a -> Parser a a | ==, name a
-item a = satisfy ((==) a) <?> Expected (name a)
-
-list :: [a] -> Parser a [a] | ==, name a
-list as = mapM item as
-
-seplist :: a (Parser a b) -> Parser a [b] | ==, name a
-seplist sep p = liftM2 (\es e-> es ++ [e]) (some (p <* item sep)) p
- <|> liftM pure p
- <|> pure empty
-
-eof :: Parser a ()
-eof = Parser \i -> case i of
- [] = (Ok (), [])
- _ = (Error $ Expected "eof", i)