From 5c72582ffd19df4906f800e073bea89d68bbb93b Mon Sep 17 00:00:00 2001 From: simonpj Date: Fri, 4 Apr 2003 14:36:31 +0000 Subject: [PATCH] [project @ 2003-04-04 14:36:31 by simonpj] lexChar wibblifications --- Text/Read/Lex.hs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) 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 '\\' -- 1.7.10.4