-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.py
More file actions
100 lines (77 loc) · 2.5 KB
/
Copy pathparser.py
File metadata and controls
100 lines (77 loc) · 2.5 KB
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
from sly import Parser
from core.lexer import CCTRLexer
class CCTRParser(Parser):
tokens = CCTRLexer.tokens
@_('input token')
def input(self, p):
return p.input + p.token
@_('')
def input(self, p):
return []
@_('"[" ":" classname ":" "]" ')
def token(self, p):
return p.classname
@_('CHAR cont')
def token(self, p):
return [p.CHAR] + p.cont
@_('empty "-" CHAR')
def cont(self, p):
char_range = [ chr(char) for char in range(ord(p.empty) + 1, ord(p.CHAR)+1)]
return char_range
@_('')
def empty(self, p):
return p[-1]
@_('')
def cont(self, p):
return []
@_('ALNUM')
def classname(self, p):
return \
[chr(char) for char in range(ord('A'), ord('Z')+1)] \
+ \
[chr(char) for char in range(ord('a'), ord('z')+1)] \
+ \
[chr(char) for char in range(ord('0'), ord('9')+1)]
@_('ALPHA')
def classname(self, p):
return \
[chr(char) for char in range(ord('A'), ord('Z')+1)] \
+ \
[chr(char) for char in range(ord('a'), ord('z')+1)]
@_('BLANK')
def classname(self, p):
return ['', '\t']
@_('CNTRL')
def classname(self, p):
return [chr(char) for char in range(0, 31+1)] + [chr(127)]
@_('DIGIT')
def classname(self, p):
return [chr(char) for char in range(ord('0'), ord('9')+1)]
@_('LOWER')
def classname(self, p):
return [chr(char) for char in range(ord('a'), ord('z')+1)]
@_('PRINT')
def classname(self, p):
return [chr(char) for char in range(32, 126+1)]
@_('PUNCT')
def classname(self, p):
return \
[chr(char) for char in range(33, 47+1)] \
+ \
[chr(char) for char in range(58, 64+1)] \
+ \
[chr(char) for char in range(91, 96+1)] \
+ \
[chr(char) for char in range(123, 126+1)]
@_('RUNE')
def classname(self, p):
return [ord(char) for char in range(32, 127)]
@_('SPACE')
def classname(self, p):
return [chr(9), chr(10), chr(11), chr(12), chr(13), chr(32)]
@_('SPECIAL')
def classname(self, p):
return ['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '{', '|', '}', '~']
@_('UPPER')
def classname(self, p):
return [chr(char) for char in range(ord('A'), ord('Z')+1)]