-
Notifications
You must be signed in to change notification settings - Fork 0
/
scanner.mll
124 lines (96 loc) · 2.57 KB
/
scanner.mll
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
122
123
124
{ open Parser }
rule token = parse
(* Parses as another token *)
[' ' '\t' '\r' '\n'] { token lexbuf }
(* Starts treating text as comments *)
| "/*" { comment lexbuf }
(* Starts treating text as a line comment *)
| "//" {linecomment lexbuf}
(*Grouping: Parenthesis, Braces, and Brackets*)
| '(' { LPAREN }
| ')' { RPAREN }
| '{' { LBRACE }
| '}' { RBRACE }
| '[' { LBRACKET }
| ']' { RBRACKET }
| '|' { PIPE }
| "::(" { LCSUB }
| ">>" { RCSUB }
(* Matrix Begin Bracket *)
| "m[" { MATRIX }
(*(* Literla Lists *)
| "n{" { NUMLIST }
| "s{" { STRLIST }
| "f{" { FUNLIST }*)
(* Terminator: Semi-colon*)
| ';' { SEMI }
(* Term Separator: Comma*)
| ',' { COMMA }
(* Arithmatic Operations: Addition, Subtratction, Multiplicaiton, Division, Modulation, and Matrix Multiplication*)
| '+' { PLUS }
| '-' { MINUS }
| '*' { TIMES }
| '/' { DIVIDE }
| '^' { EXP }
| '%' { MOD }
| '#' { MATMULT }
(* Special Functions For Functions *)
| "log" { FLOG }
| "ln" { FLN }
| "cos" { FCOS }
| "sin" { FSIN }
(* Assignment *)
| '=' { ASSIGN }
(* Logic: Equals, Not Equals, Negation, Less Than, Less than or Equal, Greater Than, and Greater Than or Equal *)
| "==" { EQ }
| "!=" { NEQ }
| '!' { NOT }
| '<' { LT }
| "<=" { LEQ }
| '>' { GT }
| ">=" { GEQ }
(* Concatenation *)
| "." { CONCAT }
(* Control Flow *)
| "match" { MATCH }
| '?' { QMARK }
(* Control Flow Actions: done, continue, and loop*)
| "done:" { DONE }
| "cont:" { CONT }
| "loop:" { LOOP }
(* Control Flow Match Conditions: Any, True *)
| "any" { ANY }
| "true" { TRUE }
(* Control Flow *)
(* Null Statement*)
| "pass" { PASS }
(* Type Declaration: num, string, func, and sub, + const *)
| "num" { NUM }
| "string" { STRING }
| "func" { FUNC }
| "list" { LIST }
| "sub" { SUB }
| "const" { CONST }
| "extern" { EXTERN }
(* Inculde statement*)
| "include" { INCLUDE }
(* Function mapping *)
| '-''>' { POINT }
(* End of File *)
| eof { EOF }
(* Float Literal *)
| ['0'-'9']+ '.' ['0'-'9']+ as lxm { LITFLOAT(lxm) }
(* Int Literal *)
| ['0'-'9']+ as lxm { LITINT(lxm) }
(* String Literal *)
| '"'((([^'"''\\'])|('\\''t')|('\\''r')|('\\''n')|('\\''\\')|('\\''"'))* as s)'"' { LITSTRING(s) }
| ['a'-'z' 'A'-'Z']['a'-'z' 'A'-'Z' '0'-'9' '_']* as lxm { ID(lxm) }
(* Handles Comments*)
and comment = parse
"*/" { token lexbuf }
| _ { comment lexbuf }
(*I added in an part for single-line comment. You guys think we should do it? - Dan*)
and linecomment = parse
'\r' { token lexbuf }
| '\n' { token lexbuf }
| _ { linecomment lexbuf}