aboutsummaryrefslogtreecommitdiff
path: root/Sil/Util/Parser.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Util/Parser.dcl')
-rw-r--r--Sil/Util/Parser.dcl23
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