aboutsummaryrefslogtreecommitdiff
path: root/src/parser.hs
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-03-14 12:41:34 +0100
committerCharles <sircharlesaze@gmail.com>2020-03-14 12:41:34 +0100
commit18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456 (patch)
tree7ad79406c98e0ed520a852616e9d8d48de6ab54d /src/parser.hs
parente0ade28ab642c043501493fe7192b626a6a68115 (diff)
downloadcomputorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.tar.gz
computorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.tar.bz2
computorv2-18c9cfd7c1fb4baf1789f178a8d56ddb8f0f1456.zip
Draft expr compatibility
Diffstat (limited to 'src/parser.hs')
-rw-r--r--src/parser.hs27
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 '?')