-
Notifications
You must be signed in to change notification settings - Fork 0
/
miniLEX.mll
54 lines (50 loc) · 1.32 KB
/
miniLEX.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
(*
Alex Halter
HPL Spring 14
File miniLEX.mll *)
{
open MiniYACC;;
exception Eof;;
}
let digit = ['0'-'9']
let digits = digit +
let lower_case = ['a'-'z']
let upper_case = ['A'-'Z']
let letter = upper_case | lower_case
rule token = parse
[' ' '\t'] { token lexbuf } (* skip blanks and tabs *)
| ['\n' ] { EOL }
| ';' { SEMI }
| ':' { COLON }
| '{' {LBRACK}
| '}' {RBRACK}
| '=''=' { EQUALS }
| '=' { ASSIGN }
| '+' { PLUS }
| '-' { MINUS }
| '.' { DOT }
| '*' { MULT }
| '/' { DIV }
| '(' { LPAR }
| ')' { RPAR }
| '<' { LT }
| "var" { VAR }
| "while" { WHILE }
| "then" { THEN }
| "proc" { PROC }
| "true" { TRUE }
| "false" { FALSE }
| "malloc" { MALLOC }
| "if" { IF }
| "else" { ELSE }
| '|''|''|' { CONCURR }
| "atom" { ATOM }
| "null" { NULL }
| "skip" { SKIP }
| (lower_case)(letter | digit)* as idt (*variables start with a lower case letter*)
{ IDENT idt}
| (upper_case)(letter | digit)* as fieldidt
{ FIELD fieldidt} (*fields start with an upper case letter*)
| digits as num
{ INTEGER (int_of_string num) }
| eof { raise Eof }