blob: c327d2bdd45960091197c63a21b4625056d2645c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
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
|