-
Notifications
You must be signed in to change notification settings - Fork 0
/
token.yz
49 lines (45 loc) · 994 Bytes
/
token.yz
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
open Printf
type t:
def EOF
def Newline
def Undent
def Int(int)
def String(string)
def Char(string)
def LowId(string)
def CapId(string)
def Reserved(string)
def AssignOp(string)
def OrOp(string)
def AndOp(string)
def CmpOp(string)
def ConsOp(string)
def AddOp(string)
def MulOp(string)
def PowOp(string)
def get_op(token):
match token:
case AssignOp(str) | OrOp(str) | AndOp(str) | CmpOp(str) | ConsOp(str) | AddOp(str) | MulOp(str) | PowOp(str):
Some(str)
case _:
None
def show(token):
match token:
case EOF:
"EOF"
case Newline:
"newline"
case Undent:
"undent"
case Int(_):
"integer"
case String(_):
"string"
case Char(_):
"character"
case LowId(_):
"lowercase identifier"
case CapId(_):
"capitalized identifier"
case Reserved(s) | AssignOp(s) | OrOp(s) | AndOp(s) | CmpOp(s) | ConsOp(s) | AddOp(s) | MulOp(s) | PowOp(s):
sprintf("'%s'", s)