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
106
107
108
109
110
111
112
113
114
115
116
117
|
#! /usr/bin/env python
#
# Keywords (from "graminit.c")
#
# This file is automatically generated; please don't muck it up!
#
# To update the symbols in this file, 'cd' to the top directory of
# the python source tree after building the interpreter and run:
#
# PYTHONPATH=./Lib ./python Lib/keyword.py
#
# (this path allows the import of string.py and regexmodule.so
# for a site with no installation in place)
kwlist = [
#--start keywords--
'__assert__',
'and',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'exec',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'not',
'or',
'pass',
'print',
'raise',
'return',
'try',
'while',
#--end keywords--
]
kwdict = {}
for keyword in kwlist:
kwdict[keyword] = 1
iskeyword = kwdict.has_key
def main():
import sys, regex, string
args = sys.argv[1:]
iptfile = args and args[0] or "Python/graminit.c"
if len(args) > 1: optfile = args[1]
else: optfile = "Lib/keyword.py"
# scan the source file for keywords
try:
fp = open(iptfile)
except IOError, err:
sys.stderr.write("I/O error reading from %s: %s\n" % (optfile, err))
sys.exit(1)
strprog = regex.compile('"\([^"]+\)"')
labelprog = regex.compile('static[ \t]+label.*=[ \t]+{')
keywordlist = []
while 1:
line = fp.readline()
if not line: break
if labelprog.search(line) > -1: break
while line:
line = fp.readline()
if string.find(line, ';') > -1: break
if strprog.search(line) > -1: keywordlist.append(strprog.group(1))
fp.close()
keywordlist.sort()
keywordlist.remove("EMPTY")
# load the output skeleton from the target
try:
fp = open(optfile)
format = fp.readlines()
fp.close()
except IOError, err:
sys.stderr.write("I/O error reading from %s: %s\n" % (optfile, err))
sys.exit(2)
try:
start = format.index("#--start keywords--\n") + 1
end = format.index("#--end keywords--\n")
except ValueError:
sys.stderr.write("target does not contain format markers\n")
sys.exit(3)
# insert the lines of keywords
lines = []
for keyword in keywordlist:
lines.append(" '" + keyword + "',\n")
format[start:end] = lines
# write the output file
try:
fp = open(optfile, 'w')
except IOError, err:
sys.stderr.write("I/O error writing to %s: %s\n" % (optfile, err))
sys.exit(4)
fp.write(string.join(format, ''))
fp.close()
if __name__ == "__main__":
main()
|