diff options
| author | Matthew Hall <hallmatthew314@gmail.com> | 2023-02-15 16:34:28 +1300 |
|---|---|---|
| committer | Matthew Hall <hallmatthew314@gmail.com> | 2023-02-15 16:34:28 +1300 |
| commit | 7dd05d975c3f7b8eab2b3699dde7f5190cfcb70d (patch) | |
| tree | 6b8938bd7c9531d89a1e9e95631a8316575e325d | |
| parent | 7057209137185b0b18822a4f2156104eabd053c8 (diff) | |
Parser refactor
| -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 |
