-
Notifications
You must be signed in to change notification settings - Fork 0
/
tokens.x
91 lines (81 loc) · 2.03 KB
/
tokens.x
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{
module AlexTokens where
}
%wrapper "basic"
tokens :-
--Ints
[0-9]+ { \s -> TokenInt (read s :: Int64)}
\-[0-9]+ { \s -> TokenInt (read (drop 1 s) :: Int64)}
-- Floats
[0-9]+\.[0-9]+ { \s -> TokenFloat (read s :: Double) }
[0-9]+\.[0-9]+ { \s -> TokenFloat (read (drop 1 s) :: Double) }
\.[0-9]+ { \s -> TokenFloat (read ("0" ++ s) :: Double) }
\.[0-9]+ { \s -> TokenFloat (read ("0" ++ (drop 1 s)) :: Double) }
-- Booleans
true { \s -> TokenBool True }
false { \s -> TokenBool False }
-- If While PrintLine
if { \s -> TokenIf }
elseif { \s -> TokenElseIf }
else { \s -> TokenElse }
while { \s -> TokenWhile }
end { \s -> TokenEnd }
println { \s -> TokenPrintLine }
-- Symbols
\+ { \s -> TokenAdd }
\- { \s -> TokenSub }
\* { \s -> TokenMult }
\/ { \s -> TokenDiv }
\\ { \s -> TokenReverseDiv }
\^ { \s -> TokenPower }
\% { \s -> TokenMod }
\( { \s -> TokenLPar }
\) { \s -> TokenRPar }
\! { \s -> TokenNot }
"==" { \s -> TokenEquals }
"!=" { \s -> TokenNotEquals }
\< { \s -> TokenLessThan }
\> { \s -> TokenGreaterThan }
"<=" { \s -> TokenLessEqual }
">=" { \s -> TokenGreatEqual }
\= { \s -> TokenAtrib }
\" { \s -> TokenQuotes }
\, { \s -> TokenComma }
\n+ { \s -> TokenNewLine }
-- Others
[a-zA-Z\_]+ { \s -> TokenString s }
\" [^\"]+ \" { \s -> TokenString (drop 1 (take ((length s)-1) s)) }
$white+ ;
{
data Token = TokenInt Int64
| TokenFloat Double
| TokenBool Bool
| TokenIf
| TokenElse
| TokenElseIf
| TokenWhile
| TokenEnd
| TokenAdd
| TokenSub
| TokenMult
| TokenDiv
| TokenReverseDiv
| TokenPower
| TokenMod
| TokenLPar
| TokenRPar
| TokenNot
| TokenEquals
| TokenNotEquals
| TokenLessThan
| TokenGreaterThan
| TokenLessEqual
| TokenGreatEqual
| TokenAtrib
| TokenQuotes
| TokenComma
| TokenPrintLine
| TokenString String
| TokenNewLine
deriving (Eq, Show)
}