Changeset 6392 for src/Pugs/Lexer.hs

Show
Ignore:
Timestamp:
08/21/05 12:05:16 (3 years ago)
Author:
scook0
svk:copy_cache_prev:
8581
Message:

* Merge some more parser redundancy
* Oops, ruleDelimitedIdentifier shouldn't use lexeme identifiers
* ruleDelimitedIdentifier now matches leading delimiters

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Lexer.hs

    r6359 r6392  
    1616    braces, brackets, angles, balanced, balancedDelim, decimal, 
    1717 
    18     ruleQualifiedIdentifier, ruleWhiteSpaceLine, 
     18    ruleDelimitedIdentifier, ruleQualifiedIdentifier, ruleWhiteSpaceLine, 
    1919 
    2020    symbol, interpolatingStringLiteral, escapeCode, 
     
    8383decimal    = P.decimal    perl6Lexer 
    8484 
     85{-| 
     86Match one or more identifiers, separated internally by the given delimiter 
     87(with an optional leading delimiter). 
     88 
     89Returns a list of the identifiers matched, discarding the delimiters.  You 
     90can always recreate them using \"@concat $ intersperse delim@\" if you want, 
     91or else use 'ruleQualifiedIdentifier'. 
     92-} 
     93ruleDelimitedIdentifier :: String -- ^ Delimiter (e.g. \'@::@\') 
     94                        -> GenParser Char st [String] 
     95ruleDelimitedIdentifier delim = verbatimRule "delimited identifier" $ do 
     96    option "" (try $ string delim) -- leading delimiter 
     97    ruleVerbatimIdentifier `sepBy1` (try $ string delim) 
     98 
    8599ruleQualifiedIdentifier :: GenParser Char st String 
    86100ruleQualifiedIdentifier = verbatimRule "qualified identifier" $ do 
    87     chunks  <- ruleVerbatimIdentifier `sepBy1` (try $ string "::") 
     101    chunks <- ruleDelimitedIdentifier "::" 
    88102    return $ concat (intersperse "::" chunks) 
    89103