-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTokens.x
121 lines (113 loc) · 3.27 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{
module Tokens where
}
%wrapper "basic"
@integer = [0-9]+
@varName = [a-zA-Z_][a-zA-Z_0-9]*
@string = \"(\\.|[^\"\\])*\"
tokens :-
$white+ ;
@integer { \s -> TokenIntVal (read s) }
@string { \s -> TokenStrVal s }
\+ { \_ -> TokenPlus }
\- { \_ -> TokenMinus }
\* { \_ -> TokenTimes }
\/ { \_ -> TokenDiv }
\% { \_ -> TokenMod }
\( { \_ -> TokenLParen }
\) { \_ -> TokenRParen }
\= { \_ -> TokenAssign }
\< { \_ -> TokenLt }
\> { \_ -> TokenGt }
\<\= { \_ -> TokenLtE }
\>\= { \_ -> TokenGtE }
\!\= { \_ -> TokenNE }
\=\= { \_ -> TokenEq }
\. { \_ -> TokenDot }
begin { \_ -> TokenBegin }
end { \_ -> TokenEnd }
read { \_ -> TokenRead }
write { \_ -> TokenWrite }
alloc { \_ -> TokenAlloc }
free { \_ -> TokenFree }
if { \_ -> TokenIf }
then { \_ -> TokenThen }
else { \_ -> TokenElse }
endif { \_ -> TokenEndif }
while { \_ -> TokenWhile }
do { \_ -> TokenDo }
break { \_ -> TokenBreak }
continue { \_ -> TokenCont }
endwhile { \_ -> TokenEndwhile }
decl { \_ -> TokenDecl }
enddecl { \_ -> TokenEndDecl }
int { \_ -> TokenInt }
str { \_ -> TokenStr }
main { \_ -> TokenMain }
return { \_ -> TokenReturn }
type { \_ -> TokenType }
endtype { \_ -> TokenEndType }
null { \_ -> TokenNull }
initialize { \_ -> TokenInitialize }
@varName { \s -> TokenVar s }
\[ { \_ -> TokenLBox }
\] { \_ -> TokenRBox }
\{ { \_ -> TokenLCurly }
\} { \_ -> TokenRCurly }
\& { \_ -> TokenAddr }
\, { \_ -> TokenComma }
\; { \_ -> TokenStmtEnd }
{
data Token = TokenIntVal Int
| TokenStrVal String
| TokenVar String
| TokenPlus
| TokenMinus
| TokenTimes
| TokenDiv
| TokenMod
| TokenLt
| TokenLtE
| TokenGt
| TokenGtE
| TokenEq
| TokenNE
| TokenLParen
| TokenRParen
| TokenAssign
| TokenBegin
| TokenEnd
| TokenRead
| TokenWrite
| TokenAlloc
| TokenFree
| TokenIf
| TokenThen
| TokenElse
| TokenEndif
| TokenWhile
| TokenDo
| TokenBreak
| TokenCont
| TokenEndwhile
| TokenStmtEnd
| TokenDecl
| TokenEndDecl
| TokenInt
| TokenStr
| TokenLBox
| TokenRBox
| TokenLCurly
| TokenRCurly
| TokenAddr
| TokenMain
| TokenReturn
| TokenComma
| TokenDot
| TokenType
| TokenEndType
| TokenNull
| TokenInitialize
deriving (Show)
scanTokens = alexScanTokens
}