From 7dd05d975c3f7b8eab2b3699dde7f5190cfcb70d Mon Sep 17 00:00:00 2001 From: Matthew Hall Date: Wed, 15 Feb 2023 16:34:28 +1300 Subject: Parser refactor --- DSL.hs | 28 +++++++++------------------- 1 file 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 -- cgit v1.2.1