-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlexer.mll
50 lines (49 loc) · 1002 Bytes
/
lexer.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
{
open Parser
}
let digit = ['0' - '9']
let lower_letter = ['a' - 'z']
let upper_letter = ['A' - 'Z']
let letter = ['a' - 'z' 'A' - 'Z']
rule token =
parse
| '(' {OPAR}
| ')' {CPAR}
| ',' {COMMA}
| '+' {PLUS}
| '-' {MINUS}
| '=' {EQUALS}
| '>' {GREATER}
| '<' {LESS}
| ">=" {GREATEREQ}
| "<=" {LESSEQ}
| "->" {ARROW}
| ">>" {JUMP}
| "==" {EQUALS2}
| '|' {BAR}
| digit+ as num {INT (int_of_string num)}
| (lower_letter | '_') (letter | digit | '_')* as s
{
match s with
| "let" -> LET
| "where" -> WHERE
| "in" -> IN
| "fun" -> FUN
| "end" -> END
| "true" -> TRUE
| "false" -> FALSE
| _ -> NAME s
}
| (upper_letter) (letter | digit | '_')* as s
{
match s with
| _ -> LABEL s
}
| [' ' '\t' '\n'] {token lexbuf}
| eof { EOF }
| _ { token lexbuf }
and skip =
parse
| ['\n'] {token lexbuf}
| _ { skip lexbuf }
| eof { raise End_of_file }