Changeset 6392
- Timestamp:
- 08/21/05 12:05:16 (3 years ago)
- svk:copy_cache_prev:
- 8581
- Location:
- src/Pugs
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Lexer.hs
r6359 r6392 16 16 braces, brackets, angles, balanced, balancedDelim, decimal, 17 17 18 rule QualifiedIdentifier, ruleWhiteSpaceLine,18 ruleDelimitedIdentifier, ruleQualifiedIdentifier, ruleWhiteSpaceLine, 19 19 20 20 symbol, interpolatingStringLiteral, escapeCode, … … 83 83 decimal = P.decimal perl6Lexer 84 84 85 {-| 86 Match one or more identifiers, separated internally by the given delimiter 87 (with an optional leading delimiter). 88 89 Returns a list of the identifiers matched, discarding the delimiters. You 90 can always recreate them using \"@concat $ intersperse delim@\" if you want, 91 or else use 'ruleQualifiedIdentifier'. 92 -} 93 ruleDelimitedIdentifier :: String -- ^ Delimiter (e.g. \'@::@\') 94 -> GenParser Char st [String] 95 ruleDelimitedIdentifier delim = verbatimRule "delimited identifier" $ do 96 option "" (try $ string delim) -- leading delimiter 97 ruleVerbatimIdentifier `sepBy1` (try $ string delim) 98 85 99 ruleQualifiedIdentifier :: GenParser Char st String 86 100 ruleQualifiedIdentifier = verbatimRule "qualified identifier" $ do 87 chunks <- ruleVerbatimIdentifier `sepBy1` (try $ string "::")101 chunks <- ruleDelimitedIdentifier "::" 88 102 return $ concat (intersperse "::" chunks) 89 103 -
src/Pugs/Parser.hs
r6390 r6392 545 545 scope <- ruleScope 546 546 typename <- choice 547 [ do { name <- ruleQualifiedIdentifier ; whiteSpace ; return name }547 [ lexeme ruleQualifiedIdentifier 548 548 , return "" 549 549 ] -- Type … … 661 661 662 662 {-| 663 Match one or more identifiers, separated internally by the given delimiter.664 665 Returns a list of the identifiers matched, discarding the delimiters. You666 can always recreate them using \"@concat $ intersperse delim@\" if you want.667 668 If you want to match leading or trailing delimiters, you'll have to do that669 yourself.670 -}671 ruleDelimitedIdentifier :: String -- ^ Delimiter (e.g. \'@::@\')672 -> RuleParser [String]673 ruleDelimitedIdentifier delim =674 (<?> "delimited identifier") $ identifier `sepBy1` (try $ string delim)675 676 {-|677 663 Match the package-name and import-list part of a (non-JSAN) @use@ or @no@ 678 664 declaration, then perform the actual import. … … 753 739 ruleAuthorPart = do -- author - XXX 754 740 char '-' 741 -- this will break if you specify an author AND an imports list 755 742 str <- many1 (satisfy (/= ';')) 756 743 return ('-':str) … … 776 763 ruleRequireDeclaration = tryRule "require declaration" $ do 777 764 symbol "require" 778 names <- identifier `sepBy1` (try $ string "::") 779 _ <- option "" $ do -- version - XXX 780 char '-' 781 many1 (choice [ digit, char '.' ]) 765 names <- ruleDelimitedIdentifier "::" 766 _ <- option "" $ ruleVersionPart 767 _ <- option "" $ ruleAuthorPart 782 768 return $ App (Var "&require") Nothing [Val . VStr $ concat (intersperse "/" names) ++ ".pm"] 783 769 … … 1655 1641 twigil <- ruleTwigil 1656 1642 -- doesn't handle names /beginning/ with "::" 1657 name s <- ruleDelimitedIdentifier "::"1658 return $ (sigil:twigil) ++ concat (intersperse "::" names)1643 name <- ruleQualifiedIdentifier 1644 return $ (sigil:twigil) ++ name 1659 1645 1660 1646 ruleTwigil :: RuleParser String
