Changeset 7317
- Timestamp:
- 10/05/05 20:17:28 (3 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Parser.hs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Parser.hs
r7311 r7317 1723 1723 parseNoParenParamList :: RuleParser (Maybe Exp, [Exp]) 1724 1724 parseNoParenParamList = do 1725 formal <- formalSegment argBlockish `sepEndBy` sep 1725 formal <- (<|> return []) $ do 1726 x <- formalSegment dotForbidden 1727 (<|> return [x]) $ do 1728 sep 1729 xs <- formalSegment dotAllowed `sepEndBy` sep 1730 return (x:xs) 1726 1731 processFormals formal 1727 1732 where 1728 1733 sep = symbol ":" 1729 formalSegment args= do1730 rv <- option Nothing (fmap Just $ tryChoice args)1734 formalSegment dot = do 1735 rv <- option Nothing (fmap Just $ tryChoice (argBlockish dot)) 1731 1736 case rv of 1732 1737 Nothing -> return [] 1733 1738 Just (exp, trail) -> do 1734 rest <- option [] $ do { trail; formalSegment args}1739 rest <- option [] $ do { trail; formalSegment dot } 1735 1740 return (exp ++ rest) 1736 argBlockish =1737 [ argBlockWith ruleBlockLiteral 1738 , argBlockWith pairOrBlockAdverb 1741 argBlockish dot = 1742 [ argBlockWith ruleBlockLiteral dot 1743 , argBlockWith pairOrBlockAdverb dot 1739 1744 , argVanilla 1740 1745 ] 1741 argBlockWith p= do1742 x <- p1743 lookAhead (satisfy (not . (`elem` ".,")))1746 argBlockWith rule pred = do 1747 x <- rule 1748 lookAhead $ satisfy pred 1744 1749 return ([x], return "") 1750 dotAllowed = (/= '.') 1751 dotForbidden = (not . (`elem` ".,")) 1745 1752 argVanilla = do 1746 1753 x <- parseTightOp
