-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.sml
105 lines (98 loc) · 1.87 KB
/
token.sml
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
structure Token = struct
datatype token
= ONE
| CAP_TYPE
| CAP_EXT
| CAP_PI
| CAP_SIGMA
| S
| FUN
| FST
| SND
| FORALL
| EXIST
| POLY
| PACK
| UNPACK
| AS
| IN
| FIX
| LET
| CIRC
| RET
| BIND
| BOOL
| INT
| IF
| THEN
| ELSE
| LOWER_IDENT of string
| UPPER_IDENT of string
| QUOTE_IDENT of string
| NUMBER of int
| LPAREN
| RPAREN
| LBRACK
| RBRACK
| LWHITEPAREN
| RWHITEPAREN
| LWHITEANGLE
| RWHITEANGLE
| COLON
| SEAL
| RARROW
| LARROW
| STAR
| EQUAL
| SLASH
| DOT
| COMMA
val show =
fn ONE => "1"
| CAP_TYPE => "Type"
| CAP_EXT => "Ext"
| CAP_PI => "Π"
| CAP_SIGMA => "Σ"
| S => "S"
| FUN => "fun"
| FST => "fst"
| SND => "snd"
| FORALL => "forall"
| EXIST => "exist"
| POLY => "poly"
| PACK => "pack"
| UNPACK => "unpack"
| AS => "as"
| IN => "in"
| FIX => "fix"
| LET => "let"
| CIRC => "circ"
| RET => "ret"
| BIND => "bind"
| BOOL => "bool"
| INT => "int"
| IF => "if"
| THEN => "then"
| ELSE => "else"
| LOWER_IDENT s => s
| UPPER_IDENT s => s
| QUOTE_IDENT s => "'" ^ s
| NUMBER n => Int.toString n (* What about negative integers? *)
| LPAREN => "("
| RPAREN => ")"
| LBRACK => "["
| RBRACK => "]"
| LWHITEPAREN => "(|"
| RWHITEPAREN => "|)"
| LWHITEANGLE => "<|"
| RWHITEANGLE => "|>"
| COLON => ":"
| SEAL => ":>"
| RARROW => "->"
| LARROW => "<-"
| STAR => "*"
| EQUAL => "="
| SLASH => "/"
| DOT => "."
| COMMA => ","
end