summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--DSL.hs28
1 files changed, 9 insertions, 19 deletions
diff --git a/DSL.hs b/DSL.hs
index d3001fb..72e48fe 100644
--- a/DSL.hs
+++ b/DSL.hs
@@ -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