From 929285b5ef81b71a768d564320db93860864c7ce Mon Sep 17 00:00:00 2001 From: Laborratte5 Date: Wed, 17 Jul 2024 23:14:09 +0200 Subject: [PATCH] feat: Add high-level parse function to Parser --- app/Main.hs | 3 ++- app/Parser.hs | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index f3b2830..4eeddb7 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -1,8 +1,9 @@ module Main where import qualified Lexer +import qualified Parser main :: IO () main = do source <- readFile "arithmetic.txt" - putStr $ show (Lexer.lex source) + putStr $ show (Parser.parse $ Lexer.lex source) diff --git a/app/Parser.hs b/app/Parser.hs index d6faf95..c7b9431 100644 --- a/app/Parser.hs +++ b/app/Parser.hs @@ -4,7 +4,7 @@ import qualified Lexer as L import Control.Applicative as Applicative import Data.Void as Void -type AST = Expr +type CST = Expr data Expr = Add Term Expr | Sub Term Expr @@ -46,6 +46,12 @@ instance Alternative Parser where result -> result +parse :: Tokens -> Maybe CST +parse tokens = case runParser parseExpression tokens of + Just ([], cst) -> Just cst + _ -> Nothing + + parseAdd :: Parser Expr parseAdd = liftA2 Add (parseTerm <* expect L.Plus) parseExpression