Changeset 6359

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

Location:
src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • src/DrIFT/Binary.hs

    r6257 r6359  
    108108-} 
    109109 
    110 -- #define SIZEOF_HSINT 4 
     110--  #define SIZEOF_HSINT 4 
    111111 
    112112type BinArray = IOUArray Int Word8 
     
    401401 
    402402instance Binary Int where 
    403 -- #if SIZEOF_HSINT == 4 
     403--  #if SIZEOF_HSINT == 4 
    404404    put_ bh i = put_ bh (fromIntegral i :: Int32) 
    405405    get  bh = do 
    406406        x <- get bh 
    407407        return $! (fromIntegral (x :: Int32)) 
    408 -- #elif SIZEOF_HSINT == 8 
     408--  #elif SIZEOF_HSINT == 8 
    409409--    put_ bh i = put_ bh (fromIntegral i :: Int64) 
    410410--    get  bh = do 
    411411--      x <- get bh 
    412412--      return $! (fromIntegral (x :: Int64)) 
    413 -- #else 
    414 -- #error "unsupported sizeof(HsInt)" 
    415 -- #endif 
     413--  #else 
     414--  #error "unsupported sizeof(HsInt)" 
     415--  #endif 
    416416 
    417417instance Binary ClockTime where 
     
    559559 
    560560-}  
    561 -- #ifdef __GLASGOW_HASKELL__ 
     561--  #ifdef __GLASGOW_HASKELL__ 
    562562 
    563563instance Binary Integer where 
     
    625625    put_ bh (a :% b) = do put_ bh a; put_ bh b 
    626626    get bh = do a <- get bh; b <- get bh; return (a :% b) 
    627 -- #endif 
     627--  #endif 
    628628 
    629629instance Binary (Bin a) where 
  • 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 '}') 
  • src/Pugs/Parser/Types.hs

    r4422 r6359  
    1313import Pugs.Internals 
    1414 
     15{-| 
     16Cache holding dynamically-generated parsers for user-defined operators.  This 
     17means we don't have to rebuild them for each token. 
     18 
     19The cache is generated inside 'Pugs.Parser.parseOpWith'. 
     20It is cleared each time we do compile-time evaluation with 
     21'Pugs.Parser.Unsafe.unsafeEvalExp', by calling 'clearDynParsers'. 
     22 
     23Stored inside 'RuleState', the state component of 'RuleParser'. 
     24-} 
    1525data DynParsers = MkDynParsersEmpty | MkDynParsers 
    1626    { dynParseOp       :: !(RuleParser Exp) 
     
    1929    } 
    2030 
     31{-| 
     32State object that gets passed around during the parsing process. 
     33-} 
    2134data RuleState = MkRuleState 
    2235    { ruleEnv           :: !Env 
    23     , ruleDynParsers    :: !DynParsers 
     36    , ruleDynParsers    :: !DynParsers -- ^ Cache for dynamically-generated 
     37                                       --     parsers 
    2438    } 
    2539 
     40{-| 
     41A parser that operates on @Char@s, and maintains state in a 'RuleState'. 
     42-} 
    2643type RuleParser a = GenParser Char RuleState a 
     44 
    2745data ParensOption = ParensMandatory | ParensOptional 
    2846    deriving (Show, Eq) 
     
    3553type RuleOperatorTable a = OperatorTable Char RuleState a 
    3654 
     55{-| 
     56Retrieve the 'Pugs.AST.Internals.Env' from the current state of the parser. 
     57-} 
    3758getRuleEnv :: RuleParser Env 
    3859getRuleEnv = gets ruleEnv 
    3960 
     61{-| 
     62Update the 'Pugs.AST.Internals.Env' in the parser's state by applying a transformation function. 
     63-} 
    4064modifyRuleEnv :: (MonadState RuleState m) => (Env -> Env) -> m () 
    4165modifyRuleEnv f = modify $ \state -> state{ ruleEnv = f (ruleEnv state) } 
    4266 
     67{-| 
     68Replace the 'Pugs.AST.Internals.Env' in the parser's state with a new one. 
     69-} 
    4370putRuleEnv :: Env -> RuleParser () 
    4471putRuleEnv = modifyRuleEnv . const 
    4572 
     73{-| 
     74Clear the parser's cache of dynamically-generated parsers for user-defined 
     75operators. 
     76 
     77These will be re-generated by 'Pugs.Parser.parseOpWith' when needed. 
     78-} 
    4679clearDynParsers :: RuleParser () 
    4780clearDynParsers = modify $ \state -> state{ ruleDynParsers = MkDynParsersEmpty }