Changeset 8724 for src/Pugs/Lexer.hs
- Timestamp:
- 01/17/06 12:55:27 (3 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Lexer.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Lexer.hs
r8722 r8724 22 22 rule, verbatimRule, literalRule, 23 23 tryRule, tryVerbatimRule, 24 tryChoice, 24 tryChoice, ruleComma, 25 25 26 26 ruleScope, ruleTrait, ruleTraitName, ruleBareTrait, ruleType, … … 61 61 maybeParens :: CharParser st a -> CharParser st a 62 62 maybeParens p = choice [ parens p, p ] 63 64 maybeVerbatimBrackets :: CharParser st a -> CharParser st a65 maybeVerbatimBrackets p = choice [ verbatimBrackets p, p ]66 63 67 64 parens :: CharParser st a -> CharParser st a … … 197 194 198 195 -- | Backslashed non-alphanumerics (except for @\^@) translate into themselves. 199 escapeCode :: GenParser Char st Char200 escapeCode = ch arEsc <|> charNum <|> charAscii <|> charControl <|>anyChar196 escapeCode :: GenParser Char st String 197 escapeCode = ch charEsc <|> charNum <|> ch charAscii <|> ch charControl <|> ch anyChar 201 198 <?> "escape code" 199 where 200 ch = fmap (:[]) 202 201 203 202 charControl :: GenParser Char st Char … … 207 206 } 208 207 209 charNum :: GenParser Char st Char 208 -- This is currently the only escape that can return multiples. 209 charNum :: GenParser Char st String 210 210 charNum = do 211 code <- choice212 [ decimal211 codes <- choice 212 [ fmap (:[]) decimal 213 213 , based 'o' 8 octDigit 214 214 , based 'x' 16 hexDigit 215 215 , based 'd' 10 digit 216 216 ] 217 return . toEnum $ fromInteger code217 return $ map (toEnum . fromInteger) codes 218 218 where 219 219 based ch num p = do 220 220 char ch 221 maybeVerbatimBrackets (number num p) 221 choice [ verbatimBrackets (number num p `sepEndBy1` ruleComma) 222 , fmap (:[]) (number num p) 223 ] 224 225 ruleComma :: GenParser Char st () 226 ruleComma = do 227 lexeme (char ',') 228 return () 222 229 223 230 number :: Integer -> GenParser tok st Char -> GenParser tok st Integer
