aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--main.hs45
2 files changed, 46 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 89e8add..48f7007 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
# By: cacharle <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/02/29 11:54:31 by cacharle #+# #+# #
-# Updated: 2020/02/29 12:00:11 by cacharle ### ########.fr #
+# Updated: 2020/02/29 12:01:42 by cacharle ### ########.fr #
# #
# **************************************************************************** #
@@ -18,7 +18,7 @@ SRC = $(shell find . -name "*.hs")
all: $(NAME)
-$(NAME):
+$(NAME): $(SRC)
$(CC) -o $(NAME) $(SRC)
clean:
diff --git a/main.hs b/main.hs
index e49065a..c327d2b 100644
--- a/main.hs
+++ b/main.hs
@@ -1,2 +1,45 @@
+import System.Environment
+import Data.Char
+
+data TokenType = Number | Add | Sub | Mul | Exp | Equal deriving (Show)
+data Token = Token TokenType Float deriving (Show)
+
main = do
- putStr "HelloWorld"
+ args <- getArgs
+ -- putStr $ show args
+ let l = lexer $ (head args)
+ putStrLn $ show l
+
+
+lexer :: String -> [Token]
+lexer "" = []
+lexer (c:rest)
+ | c == ' ' = lexer rest
+ | isDigit c = (Token Number (read (isolateFloat (c:rest)) :: Float)) : lexer (afterFloat (c:rest))
+ | c == '+' = (Token Add 0.0) : lexer rest
+ | c == '-' = (Token Sub 0.0) : lexer rest
+ | c == '*' = (Token Mul 0.0) : lexer rest
+ | c == '^' = (Token Exp 0.0) : lexer rest
+ | c == '=' = (Token Equal 0.0) : lexer rest
+
+ where isolateFloat :: String -> String
+ isolateFloat "" = ""
+ isolateFloat (c:cs)
+ | isDigit c = c : isolateFloat cs
+ | c == '.' = c : isolateFloat cs
+ | otherwise = ""
+
+ afterFloat :: String -> String
+ afterFloat "" = ""
+ afterFloat (c:cs)
+ | isDigit c = afterFloat cs
+ | c == '.' = afterFloat cs
+ | otherwise = (c:cs)
+
+
+-- parse :: Lexing -> SyntaxTree
+-- parse s = 2
+--
+--
+-- eval :: SyntaxTree -> Maybe [Float]
+-- eval _ = 0.0