Changeset 6359 for src/Pugs/Lexer.hs

Show
Ignore:
Timestamp:
08/19/05 13:37:26 (3 years ago)
Author:
scook0
svk:copy_cache_prev:
8581
Message:

* Some docs for Lexer.hs and Parser/Types.hs
* Tweak DrIFT/Binary.hs so it doesn't confuse poor Haddock

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Lexer.hs

    r6187 r6359  
    136136    aheadSym x   y   = y `elem` ";!" || x /= y 
    137137 
    138 interpolatingStringLiteral :: RuleParser String    -- ^ Opening delimiter 
    139                               -> RuleParser String  -- ^ Closing delimiter  
    140                               -> RuleParser Exp -- ^ Interpolator 
    141                               -> RuleParser Exp -- ^ Entire string 
    142                                                 -- ^ (without delims) 
     138interpolatingStringLiteral :: RuleParser String -- ^ Opening delimiter 
     139                           -> RuleParser String -- ^ Closing delimiter  
     140                           -> RuleParser Exp    -- ^ Interpolator 
     141                           -> RuleParser Exp    -- ^ Entire string 
     142                                                --     (without delims) 
    143143interpolatingStringLiteral startrule endrule interpolator = do 
    144144    list <- stringList 0 
     
    154154     
    155155    stringList :: Int -> RuleParser [Exp] 
    156     stringList i = try (do 
    157                parse <- interpolator 
    158                rest  <- stringList i 
    159                return (parse:rest)) 
    160            <|> try (do 
    161                ch <- endrule 
    162                if i == 0 then return [] 
    163                          else do rest <- stringList (i-1) 
    164                                  return (Val (VStr ch):rest)) 
    165            <|> try (do 
    166                ch <- startrule 
    167                rest <- stringList (i+1) 
    168                return (Val (VStr ch):rest)) 
    169            <|> do 
    170                char <- anyChar 
    171                rest <- stringList i 
    172                return (Val (VStr [char]):rest) 
    173  
    174 -- | backslahed nonalphanumerics (except for \^) translate into themselves 
     156    stringList i = tryChoice 
     157        [ do 
     158            parse <- interpolator 
     159            rest  <- stringList i 
     160            return (parse:rest) 
     161        , do 
     162            ch <- endrule 
     163            if i == 0 
     164                then return [] 
     165                else do 
     166                    rest <- stringList (i-1) 
     167                    return (Val (VStr ch):rest) 
     168        , do 
     169            ch <- startrule 
     170            rest <- stringList (i+1) 
     171            return (Val (VStr ch):rest) 
     172        , do 
     173            char <- anyChar 
     174            rest <- stringList i 
     175            return (Val (VStr [char]):rest) 
     176        ] 
     177 
     178-- | Backslashed non-alphanumerics (except for @\^@) translate into themselves. 
    175179escapeCode      :: GenParser Char st Char 
    176180escapeCode      = charEsc <|> charNum <|> charAscii <|> charControl <|> anyChar 
     
    306310    return (lead:rest) 
    307311 
    308 tryChoice :: [GenParser tok st a] -> GenParser tok st a 
     312{-| 
     313Attempt each of the given parsers in turn until one succeeds, but if one of 
     314them fails we backtrack (i.e. retroactively consume no input) before trying 
     315the next one. 
     316-} 
     317tryChoice :: [GenParser tok st a] -- ^ List of candidate parsers 
     318          -> GenParser tok st a 
    309319tryChoice = choice . map try 
    310320 
     321{-| 
     322Match '@(@', followed by the given parser, followed by '@)@'. 
     323-} 
    311324verbatimParens :: GenParser Char st a -> GenParser Char st a 
    312325verbatimParens = between (lexeme $ char '(') (char ')') 
    313326 
     327{-| 
     328Match '@\[@', followed by the given parser, followed by '@\]@'. 
     329-} 
    314330verbatimBrackets :: GenParser Char st a -> GenParser Char st a 
    315331verbatimBrackets = between (lexeme $ char '[') (char ']') 
    316332 
     333{-| 
     334Match '@{@', followed by the given parser, followed by '@}@'. 
     335-} 
    317336verbatimBraces :: GenParser Char st a -> GenParser Char st a 
    318337verbatimBraces = between (lexeme $ char '{') (char '}')