feat: Add high-level parse function to Parser

This commit is contained in:
Laborratte 5 2024-07-17 23:14:09 +02:00
parent 9d1a80bf2b
commit 929285b5ef
Signed by: Laborratte5
GPG key ID: 3A30072E35202C02
2 changed files with 9 additions and 2 deletions

View file

@ -1,8 +1,9 @@
module Main where module Main where
import qualified Lexer import qualified Lexer
import qualified Parser
main :: IO () main :: IO ()
main = do main = do
source <- readFile "arithmetic.txt" source <- readFile "arithmetic.txt"
putStr $ show (Lexer.lex source) putStr $ show (Parser.parse $ Lexer.lex source)

View file

@ -4,7 +4,7 @@ import qualified Lexer as L
import Control.Applicative as Applicative import Control.Applicative as Applicative
import Data.Void as Void import Data.Void as Void
type AST = Expr type CST = Expr
data Expr = Add Term Expr data Expr = Add Term Expr
| Sub Term Expr | Sub Term Expr
@ -46,6 +46,12 @@ instance Alternative Parser where
result -> result result -> result
parse :: Tokens -> Maybe CST
parse tokens = case runParser parseExpression tokens of
Just ([], cst) -> Just cst
_ -> Nothing
parseAdd :: Parser Expr parseAdd :: Parser Expr
parseAdd = liftA2 Add (parseTerm <* expect L.Plus) parseExpression parseAdd = liftA2 Add (parseTerm <* expect L.Plus) parseExpression