From d04e943342182b4d66a23c8bc23e78a8db9bcba7 Mon Sep 17 00:00:00 2001 From: Charles Date: Sat, 29 Feb 2020 13:29:32 +0100 Subject: Basic lexer --- Makefile | 4 ++-- main.hs | 45 ++++++++++++++++++++++++++++++++++++++++++++- 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 +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # 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 -- cgit