, satisfy
) where
+import Prelude
import Data.Char
import Text.ParserCombinators.Parsec.Pos( updatePosChar, updatePosString )
import Text.ParserCombinators.Parsec.Prim
(\c -> if f c then Just c else Nothing)
string :: String -> CharParser st String
-string s = tokens show updatePosString s
\ No newline at end of file
+string s = tokens show updatePosString s
where
+import Prelude
import Data.List (nub,sortBy)
import Text.ParserCombinators.Parsec.Pos
Expect _ -> 2
Message _ -> 3
+messageCompare :: Message -> Message -> Ordering
messageCompare msg1 msg2
= compare (messageToEnum msg1) (messageToEnum msg2)
+messageString :: Message -> String
messageString msg
= case msg of SysUnExpect s -> s
UnExpect s -> s
Expect s -> s
Message s -> s
+messageEq :: Message -> Message -> Bool
messageEq msg1 msg2
= (messageCompare msg1 msg2 == EQ)
-----------------------------------------------------------
-- Create parse errors
-----------------------------------------------------------
+newErrorUnknown :: SourcePos -> ParseError
newErrorUnknown pos
= ParseError pos []
+newErrorMessage :: Message -> SourcePos -> ParseError
newErrorMessage msg pos
= ParseError pos [msg]
+addErrorMessage :: Message -> ParseError -> ParseError
addErrorMessage msg (ParseError pos msgs)
= ParseError pos (msg:msgs)
+setErrorPos :: SourcePos -> ParseError -> ParseError
setErrorPos pos (ParseError _ msgs)
= ParseError pos msgs
+setErrorMessage :: Message -> ParseError -> ParseError
setErrorMessage msg (ParseError pos msgs)
= ParseError pos (msg:filter (not . messageEq msg) msgs)
, getParserState, setParserState
) where
+import Prelude
import Text.ParserCombinators.Parsec.Pos
import Text.ParserCombinators.Parsec.Error
import Control.Monad
; return ()
}
-getParserState = updateParserState id
+getParserState :: GenParser tok st (State tok st)
+getParserState = updateParserState id
+
+setParserState :: State tok st -> GenParser tok st (State tok st)
setParserState st = updateParserState (const st)
Right x -> print x
+parse :: GenParser tok () a -> SourceName -> [tok] -> Either ParseError a
parse p name input
= runParser p () name input
label p msg
= labels p [msg]
+labels :: GenParser tok st a -> [String] -> GenParser tok st a
labels (Parser p) msgs
= Parser (\state ->
case (p state) of