diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-03-14 12:41:34 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-03-14 12:41:34 +0100 |
| commit | 18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456 (patch) | |
| tree | 7ad79406c98e0ed520a852616e9d8d48de6ab54d /src/parser.hs | |
| parent | e0ade28ab642c043501493fe7192b626a6a68115 (diff) | |
| download | computorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.tar.gz computorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.tar.bz2 computorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.zip | |
Draft expr compatibility
Diffstat (limited to 'src/parser.hs')
| -rw-r--r-- | src/parser.hs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/parser.hs b/src/parser.hs index d708a6c..64f452a 100644 --- a/src/parser.hs +++ b/src/parser.hs @@ -106,6 +106,16 @@ matrixP = Matrix <$> (charP '[' *> (sepBy (charP ';') matrixRowP) <* charP ']') matrixRowP :: Parser (MatrixRow AExpr) matrixRowP = charP '[' *> (sepBy (charP ',') aExprP) <* charP ']' +varP :: Parser Var +varP = some alphaP + +funcExprP :: Parser FuncExpr +funcExprP = do name <- varP + charP '(' + arg <- aExprP + charP ')' + return (FuncExpr name arg) + aExprP :: Parser AExpr aExprP = do x <- termP charP '+' @@ -133,4 +143,21 @@ baseP = (charP '(' *> (Base <$> aExprP) <* charP ')') <|> (BaseSingle <$> ExprI <$> imagP) <|> (BaseSingle <$> ExprF <$> floatP) <|> (BaseSingle <$> ExprM <$> matrixP) + <|> (BaseSingle <$> ExprFE <$> funcExprP) + <|> (BaseSingle <$> ExprV <$> varP) + +funcDeclP :: Parser FuncDecl +funcDeclP = do name <- varP + charP '(' + argName <- varP + charP ')' + return (FuncDecl name argName) + +labelP :: Parser Label +labelP = varP <|> funcDeclP + +evalP :: Parser Eval +evalP = do labelP + charP '=' + (EvalDecl <$> exprP) <|> (EvalTry <$ charP '?') |
