-
Notifications
You must be signed in to change notification settings - Fork 0
/
a2.mll
98 lines (95 loc) · 1.75 KB
/
a2.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
{
open A3
exception InvalidTokenstartingwith of char ;;
}
(*
Below is a dummy implementation. Please note the following
- Tokens are defined in A3.mly
- Return type is token and not token list
- End of buffer is indicated by EOF token below
- There is no trailer. The scanner function is written in the wrapper file (test_a3.ml)
*)
let digit = ['0'-'9']
let fi = ['1'- '9']
let digits = digit*
let if = "if"
let else = "else"
let then = "then"
let and_ = "/\\"
let or_ = "\\/"
let nott = "not"
let abd = "abs"
let mod = "mod"
let ex = ['^']
let t = ['T']
let f = ['F']
let m = ['*']
let e = ['=']
let gt = ['>']
let lt = ['<']
let geq = ">="
let leq = "<="
let d = "div"
let ud = ['_']
let ap = ['\'']
let letter = ['a'-'z' 'A'-'Z']
let alpha = ['A'-'Z'] (letter*|digits|ud|ap)*
let lpar = ['(']
let rpar = [')']
let comma = [',']
let finish = "fi"
let til = ['~']
let proj = "proj"
let def = "def"
let local = "local"
let lett = "let"
let dot = '.'
let semi = ';'
let endd = "end"
let integer = ( fi digits)|( ['0'])
let id = letter+
let spl_char = ['*' '.' '$']
let letter_or_spl_char = letter|spl_char
rule read = parse
eof {EOF}
|integer as n {(INT (int_of_string n))}
| '+' {PLUS}
| m {TIMES}
| ':' {COLON}
| "Tint" {TINT}
| "Tbool" {TBOOL}
| "Tunit" {TUNIT}
| '-' {MINUS}
| "->" {ARROW}
| mod {REM}
| "in" {IN}
| d {DIV}
|gt {GT}
|lt {LT}
| e {EQ}
| t {(BOOL true)}
| f {(BOOL false)}
|abd {ABS}
| nott {NOT}
| dot {DOT}
| semi {SEMICOLON}
|"\\" { BACKSLASH }
|"||" { PARALLEL }
| endd {END}
| def {DEF}
| local {LOCAL}
| lett {LET}
|lpar {LP}
|rpar {RP}
| and_ {CONJ}
| or_ {DISJ}
| if {IF}
| else {ELSE}
| then {THEN}
|" " {read lexbuf}
| finish {FI}
| til {TILDA}
| proj {PROJ}
| comma {COMMA}
|alpha as s {(ID s)}
| _ as u {raise (InvalidTokenstartingwith u)}