Changeset 6377

Show
Ignore:
Timestamp:
08/20/05 15:55:47 (3 years ago)
Author:
scook0
svk:copy_cache_prev:
8581
Message:

Phase 1 of my 'use'-parser refactoring:
* Unified the 'lang' parser for JSAN & Perl packages
* JSAN & Perl paths now use similar code to parse the package name

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Parser.hs

    r6375 r6377  
    617617    symbol "use" 
    618618    tryChoice [ ruleUseVersion >> return emptyExp 
    619               , ruleUseJSANModule 
    620               , ruleUsePackage True >> return emptyExp 
     619              , ruleUsePackage True 
    621620              ] 
    622621 
     
    635634 
    636635{-| 
     636/This may now be obsolete.../ 
     637 
    637638Match the package-name and import-list part of a @use@ or @no@ declaration. 
    638639 
     
    646647-} 
    647648ruleUsePackage :: Bool -- ^ @True@ for @use@; @False@ for @no@ 
    648                -> RuleParser () 
     649               -> RuleParser Exp 
    649650ruleUsePackage use = rule "use package" $ do 
    650     lang    <- option "pugs" $ try $ do 
     651    lang <- ruleUsePackageLang 
     652    case lang of 
     653        "jsan" -> if use 
     654                      then ruleUseJSANModule 
     655                      else fail "can't 'no' a JSAN module" 
     656        _      -> ruleUsePerlPackage use lang 
     657    where 
     658    ruleUsePackageLang = option "pugs" $ try $ do 
    651659        lang <- identifier 
    652660        char ':' 
    653661        notFollowedBy (char ':') 
    654662        return lang 
     663 
     664ruleUsePerlPackage :: Bool -> String -> RuleParser Exp 
     665ruleUsePerlPackage use lang = rule "use perl package" $ do 
    655666    names   <- identifier `sepBy1` (try $ string "::") 
    656667    _       <- option "" $ ruleVersionPart 
     
    678689            ] 
    679690        return () 
    680     return () 
     691    return emptyExp 
    681692 
    682693{-| 
     694/This may now be obsolete.../ 
     695 
    683696Match a JSAN module name, preceded by \'@jsan:@\'.  Returns an appropriate 
    684697sub call 'Pugs.AST.Exp' that will load the module using subs defined in 
     
    694707ruleUseJSANModule :: RuleParser Exp 
    695708ruleUseJSANModule = do 
    696     string "jsan:" 
    697     name <- liftM (Val . VStr . concat) $ many1 $ do 
    698         part <- identifier 
    699         dot  <- choice [ try $ string ".", string "" ] 
    700         return $ part ++ dot 
     709    names <- identifier `sepBy1` (try $ string ".") 
     710    let name = Val . VStr . concat $ intersperse "." names 
    701711    choice 
    702712        [ try $ do