Changeset 26 for src/Parser.hs

Show
Ignore:
Timestamp:
02/14/05 06:02:18 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
1041
Message:

* snapshot during monadic refactoring

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Parser.hs

    r25 r26  
    1717-- Lexical units -------------------------------------------------- 
    1818 
    19 ruleProgram :: RuleParser Exp 
     19ruleProgram :: RuleParser Env 
    2020ruleProgram = rule "program" $ do 
     21    whiteSpace 
    2122    many (symbol ";") 
    2223    rv <- option [] ruleStatementList 
    2324    eof 
    24     retSyn ";" rv 
     25    env <- getState 
     26    return $ env { envBody = (Syn ";" rv) } 
    2527 
    2628ruleBlock :: RuleParser Exp 
    2729ruleBlock = rule "block" $ braces $ do 
     30    whiteSpace 
    2831    many (symbol ";") 
    2932    rv <- option [] ruleStatementList 
     
    6366        return (scope, multi, name) 
    6467    pos     <- getPosition 
    65     cxt     <- option "Any" $ preSpace (ruleBareTrait "returns") 
     68    cxt     <- option "Any" $ ruleBareTrait "returns" 
    6669    formal  <- option Nothing $ return . Just =<< parens ruleSubParameters 
    6770    body    <- ruleBlock 
     
    8588ruleSubName = rule "subroutine name" $ do 
    8689    star    <- option "" $ string "*" 
    87     fixity  <- option "prefix:" $ choice (map string $ words fixities) 
     90    fixity  <- option "prefix:" $ choice (map (try . string) $ words fixities) 
    8891    c       <- wordAlpha 
    8992    cs      <- many wordAny 
     
    352355parseProgram = do { whiteSpace ; x <- parseOp ; eof ; return x } 
    353356 
    354 runRule :: Env -> (Exp -> a) -> RuleParser Exp -> String -> a 
    355 runRule env f p str = f $ case ( runParser ruleProgram (envPad env) "" str ) of 
    356     Left err    -> Val $ VError (showErr err) (NonTerm $ errorPos err) 
    357     Right ast   -> ast 
     357runRule :: Env -> (Env -> a) -> RuleParser Env -> String -> a 
     358runRule env f p str = f $ case ( runParser ruleProgram env "" str ) of 
     359    Left err    -> env { envBody = Val $ VError (showErr err) (NonTerm $ errorPos err) } 
     360    Right env'  -> env' 
    358361 
    359362showErr err =