diff options
author | Greg Brown <greg.brown01@ed.ac.uk> | 2022-12-17 17:45:02 +0000 |
---|---|---|
committer | Greg Brown <greg.brown01@ed.ac.uk> | 2022-12-17 17:45:02 +0000 |
commit | 95de9b2913be536972f3921d41c24d9c0458c538 (patch) | |
tree | a70dda818ec01fc1162a86a17da8da6f38f5267d /src/Obs/Parser.idr | |
parent | 421d664a18cea3abe729dd7becd7edadec1afaf1 (diff) |
Add totality annotations.
The parser is unfortunately not classified as total.
Diffstat (limited to 'src/Obs/Parser.idr')
-rw-r--r-- | src/Obs/Parser.idr | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Obs/Parser.idr b/src/Obs/Parser.idr index 2802690..278ff0f 100644 --- a/src/Obs/Parser.idr +++ b/src/Obs/Parser.idr @@ -11,6 +11,8 @@ import System.File import Text.Lexer import Text.Parser +%default total + Error : Type -> Type -> Type Error tok = Either (List1 (ParsingError tok)) @@ -120,18 +122,23 @@ sort = do sort <- prop <|> set pure (Sort sort.bounds sort.val) +partial exp : Grammar state ObsToken True Syntax +partial term : Grammar state ObsToken True Syntax exp = term term = var <|> sort <|> parens exp +partial decl : Grammar state ObsToken True (WithBounds String, Syntax) decl = [| MkPair ident (match OTColon *> exp) |] +partial def : Grammar state ObsToken True (WithBounds String, Syntax) def = [| MkPair ident (match OTEqual *> exp) |] +partial fullDef : Grammar state ObsToken True Definition fullDef = seq @@ -141,9 +148,11 @@ fullDef = then pure (MkDefinition {bounds = name.bounds, name = name.val, ty, tm}) else fatalLoc name.bounds "name mismatch for declaration and definition") +partial file : Grammar state ObsToken False (List Definition) file = many (match OTNewline) *> sepEndBy (some (match OTNewline)) fullDef +partial export parse : String -> Error ObsToken (List Definition) parse str = do @@ -164,6 +173,7 @@ reportErrs (e :: errs) = do () <- printErr e reportErrs errs +partial export parseFile : (fname : String) -> IO (List Definition) parseFile fname = do |