add top level parser

master
Rachel Lambda Samuelsson 2022-07-25 01:21:38 +02:00
parent cd8ee29281
commit fa384e2e26
2 changed files with 31 additions and 1 deletions

View File

@ -4,9 +4,24 @@ import Core.Check
import Core.Term import Core.Term
import Parser.Parse import Parser.Parse
import System
import System.File
ioStr : IO String
ioStr = getArgs >>= \case
[] => getLine
(x :: _) => do
r <- readFile x
case r of
Left e => do
print e
exitFailure
Right s => pure s
main : IO () main : IO ()
main = do main = do
str <- getLine str <- ioStr
case parse0 str of case parse0 str of
Left e => putStrLn e Left e => putStrLn e
Right t => print t Right t => print t

View File

@ -365,6 +365,21 @@ mutual
match PTRParen match PTRParen
pure e pure e
definitions : (n : Nat) -> Vect n String -> Grammar state PiToken True (Term n)
definitions n env = do
match PTLet
commit
arg <- match PTIdentifier
match PTColon
ty <- expr n env
match PTDefEq
tr <- expr n env
next <- definitions (S n) (arg :: env) <|> pure TStar
pure (TLet ty tr next)
toplevel : Grammar state PiToken True (Term 0)
toplevel = definitions 0 []
parsePi : (n : Nat) -> Vect n String -> List (WithBounds PiToken) -> Either String (Term n) parsePi : (n : Nat) -> Vect n String -> List (WithBounds PiToken) -> Either String (Term n)
parsePi n env toks = parsePi n env toks =
case parse (expr n env) $ filter (not . ignored) toks of case parse (expr n env) $ filter (not . ignored) toks of