diff options
Diffstat (limited to 'DSL.hs')
| -rw-r--r-- | DSL.hs | 28 |
1 files changed, 9 insertions, 19 deletions
@@ -154,12 +154,11 @@ stripWhitespace = filter $ not . (==T_WHITESPACE) . tData -- Parsing ------------------------------------------------------------------------------ +tokenDataP :: TokenData -> DSLParser DSLToken +tokenDataP t = satisfy $ (==t) . tData + wsP :: DSLParser () -wsP = do - t <- anyToken - case tData t of - T_WHITESPACE -> result () - _ -> flunk +wsP = () <$ tokenDataP T_WHITESPACE dataLiteralP :: DSLParser StackData dataLiteralP = do @@ -189,25 +188,16 @@ linearP = BLinear <$> mult1 operationP ifP :: DSLParser Block ifP = do - _ <- satisfy $ (==T_IF) . tData - c <- cond - _ <- satisfy $ (==T_DO) . tData - b <- body - _ <- satisfy $ (==T_END) . tData + c <- tokenDataP T_IF *> mult blockP <* tokenDataP T_DO + b <- mult blockP <* tokenDataP T_END return $ BIf c b - where - cond = mult blockP - body = mult blockP ifElseP :: DSLParser Block ifElseP = do - c <- satisfy ((==T_IF) . tData) *> cond <* satisfy ((==T_DO) . tData) - b1 <- body <* satisfy ((==T_ELSE) . tData) - b2 <- body <* satisfy ((==T_END) . tData) + c <- tokenDataP T_IF *> mult blockP <* tokenDataP T_DO + b1 <- mult blockP <* tokenDataP T_ELSE + b2 <- mult blockP <* tokenDataP T_END return $ BIfElse c b1 b2 - where - cond = mult blockP - body = mult blockP blockP :: DSLParser Block blockP = firstOf [ ifElseP |
