diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-03 22:57:10 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-03 22:57:10 +0200 |
| commit | 2b0b62b44a87536597050c525322c7bcc745bdb2 (patch) | |
| tree | 56ee143d427c66cb1f0583c07beec5f181abc983 /src/Main.hs | |
| parent | 5e7d3a5ff586ac75b768a9a1c1f2d5b80960e821 (diff) | |
| download | computorv2-2b0b62b44a87536597050c525322c7bcc745bdb2.tar.gz computorv2-2b0b62b44a87536597050c525322c7bcc745bdb2.tar.bz2 computorv2-2b0b62b44a87536597050c525322c7bcc745bdb2.zip | |
Added polynom solver from computorv1, Added matrix multipilcation
Diffstat (limited to 'src/Main.hs')
| -rw-r--r-- | src/Main.hs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/Main.hs b/src/Main.hs new file mode 100644 index 0000000..1f99b39 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1,61 @@ +import Data.Char +import qualified Data.Map as M +import System.IO + +import Expr as E +import Parser.Core +import Parser.Statement + + +main :: IO () +main = promptLoop (Context M.empty M.empty) + +promptLoop :: Context -> IO () +promptLoop context = do + putStr "> " + hFlush stdout + eof <- isEOF + if eof + then return () + else do line <- getLine + if line /= "exit" + then loop line context >>= promptLoop + else return () + +loop :: String -> Context -> IO Context +loop input context = + do + case runParserStrict statementP (filter (not . isSpace) input) of + Left err -> putStrLn ("Error parsing: " ++ err) >> return context + Right s -> Main.eval s context + + + +eval :: Statement -> Context -> IO Context + +eval (Evaluation e) c = do case E.eval e c of + Just evaluated -> putStrLn $ show evaluated + Nothing -> putStrLn "Error: couldn't evaluate expression" + return c + +eval (VariableDeclaration name value) (Context vars funcs) = + case E.eval value context of + Just e -> do putStrLn $ show e + return $ Context (M.insert name e vars) funcs + Nothing -> putStrLn "Error: couldn't evaluate expression" >> return context + where context = Context vars funcs + +eval (FunctionDeclaration name argName e) (Context vars funcs) = + -- case evalIgnore e context argName of + -- Just e -> do putStrLn $ show e + -- return $ Context vars (M.insert name (argName, e) funcs) + -- Nothing -> putStrLn "Error: couldn't evaluate expression" >> return context + -- + -- where context = Context vars funcs + return $ Context vars (M.insert name (argName, e) funcs) + +eval _ c = return c +-- eval (PolynomEvaluation left right) c = do l <- eval left -- count number of unknoewn +-- r <- eval right + + |
