diff options
Diffstat (limited to 'Sil/Util/Parser.dcl')
-rw-r--r-- | Sil/Util/Parser.dcl | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/Sil/Util/Parser.dcl b/Sil/Util/Parser.dcl index 65b050e..8474b78 100644 --- a/Sil/Util/Parser.dcl +++ b/Sil/Util/Parser.dcl @@ -6,10 +6,26 @@ 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 Data.Maybe import :: Maybe -from Sil.Parse import :: Error +from Sil.Error import :: Error -:: Parser a b = Parser ([a] -> (MaybeError Error b, [a])) +:: Positioned a = + { pos_line :: Int + , pos_val :: a + } + +fromPositioned :: (Positioned a) -> a + +:: ParseState a + +:: ParseInput a + = PI_NewLine + | PI_Token a + +makeParseState :: [ParseInput a] -> ParseState a + +:: Parser a b = Parser ((ParseState a) -> (MaybeError Error b, ParseState a)) instance Functor (Parser a) instance Applicative (Parser a) @@ -19,7 +35,8 @@ instance Alternative (Parser a) class name a :: a -> String instance name String -runParser :: (Parser a b) [a] -> (MaybeError Error b, [a]) +runParser :: (Parser a b) (ParseState a) -> (MaybeError Error b, ParseState a) +getPositioner :: Parser a (b -> Positioned b) (<?>) :: (Parser a b) Error -> Parser a b fail :: Parser a b top :: Parser a a |