forked from simoneguidi94/gopapageno
/
tokens.go
78 lines (73 loc) · 1.6 KB
/
tokens.go
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
package regex
const _NUM_NONTERMINALS = 6
const _NUM_TERMINALS = 13
const (
CONCATENATION_RE_SIMPLE_RE = iota
NEW_AXIOM = iota
RE_SIMPLE_RE = iota
RE_UNION = iota
SET_ITEMS = iota
_EMPTY = iota
_TERM = 0x8000 + iota - _NUM_NONTERMINALS
any = 0x8000 + iota - _NUM_NONTERMINALS
caret = 0x8000 + iota - _NUM_NONTERMINALS
char = 0x8000 + iota - _NUM_NONTERMINALS
charinset = 0x8000 + iota - _NUM_NONTERMINALS
dash = 0x8000 + iota - _NUM_NONTERMINALS
lpar = 0x8000 + iota - _NUM_NONTERMINALS
pipe = 0x8000 + iota - _NUM_NONTERMINALS
plus = 0x8000 + iota - _NUM_NONTERMINALS
rpar = 0x8000 + iota - _NUM_NONTERMINALS
squarelpar = 0x8000 + iota - _NUM_NONTERMINALS
squarerpar = 0x8000 + iota - _NUM_NONTERMINALS
star = 0x8000 + iota - _NUM_NONTERMINALS
)
func tokenValue(token uint16) uint16 {
return 0x7FFF & token
}
func isTerminal(token uint16) bool {
return token >= 0x800
}
func tokenToString(token uint16) string {
switch token {
case CONCATENATION_RE_SIMPLE_RE:
return "CONCATENATION_RE_SIMPLE_RE"
case NEW_AXIOM:
return "NEW_AXIOM"
case RE_SIMPLE_RE:
return "RE_SIMPLE_RE"
case RE_UNION:
return "RE_UNION"
case SET_ITEMS:
return "SET_ITEMS"
case _EMPTY:
return "_EMPTY"
case _TERM:
return "_TERM"
case any:
return "any"
case caret:
return "caret"
case char:
return "char"
case charinset:
return "charinset"
case dash:
return "dash"
case lpar:
return "lpar"
case pipe:
return "pipe"
case plus:
return "plus"
case rpar:
return "rpar"
case squarelpar:
return "squarelpar"
case squarerpar:
return "squarerpar"
case star:
return "star"
}
return "UNKNOWN_TOKEN"
}