From: simonpj Date: Fri, 4 Apr 2003 14:36:31 +0000 (+0000) Subject: [project @ 2003-04-04 14:36:31 by simonpj] X-Git-Tag: nhc98-1-18-release~704 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=5c72582ffd19df4906f800e073bea89d68bbb93b;p=ghc-base.git [project @ 2003-04-04 14:36:31 by simonpj] lexChar wibblifications --- diff --git a/Text/Read/Lex.hs b/Text/Read/Lex.hs index 14528c1..5905b12 100644 --- a/Text/Read/Lex.hs +++ b/Text/Read/Lex.hs @@ -15,16 +15,17 @@ module Text.Read.Lex -- lexing types - ( Lexeme(..) -- :: *; Show, Eq + ( Lexeme(..) -- :: *; Show, Eq + + -- lexer + , lex -- :: ReadP Lexeme Skips leading spaces + , hsLex -- :: ReadP String + , lexChar -- :: ReadP Char Reads just one char, with H98 escapes - -- lexer - , lex -- :: ReadP Lexeme -- Skips leading spaces - , hsLex -- :: ReadP String - - , readIntP -- :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadP a - , readOctP -- :: Num a => ReadP a - , readDecP -- :: Num a => ReadP a - , readHexP -- :: Num a => ReadP a + , readIntP -- :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadP a + , readOctP -- :: Num a => ReadP a + , readDecP -- :: Num a => ReadP a + , readHexP -- :: Num a => ReadP a ) where @@ -133,13 +134,16 @@ lexId = lexLitChar :: ReadP Lexeme lexLitChar = do char '\'' - (c,esc) <- lexChar - guard (esc || c /= '\'') + (c,esc) <- lexCharE + guard (esc || c /= '\'') -- Eliminate '' possibility char '\'' return (Char c) -lexChar :: ReadP (Char, Bool) -- "escaped or not"? -lexChar = +lexChar :: ReadP Char +lexChar = do { (c,_) <- lexCharE; return c } + +lexCharE :: ReadP (Char, Bool) -- "escaped or not"? +lexCharE = do c <- get if c == '\\' then do c <- lexEsc; return (c, True) @@ -276,9 +280,8 @@ lexString = else let s = f "" in return (String s) - lexStrItem = - (lexEmpty >> lexStrItem) - +++ lexChar + lexStrItem = (lexEmpty >> lexStrItem) + +++ lexCharE lexEmpty = do char '\\'