|  | #! /usr/bin/env python3 | 
|  |  | 
|  | """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: | 
|  |  | 
|  | ./python Lib/keyword.py | 
|  | """ | 
|  |  | 
|  | __all__ = ["iskeyword", "kwlist"] | 
|  |  | 
|  | kwlist = [ | 
|  | #--start keywords-- | 
|  | 'False', | 
|  | 'None', | 
|  | 'True', | 
|  | 'and', | 
|  | 'as', | 
|  | 'assert', | 
|  | 'async', | 
|  | 'await', | 
|  | 'break', | 
|  | 'class', | 
|  | 'continue', | 
|  | 'def', | 
|  | 'del', | 
|  | 'elif', | 
|  | 'else', | 
|  | 'except', | 
|  | 'finally', | 
|  | 'for', | 
|  | 'from', | 
|  | 'global', | 
|  | 'if', | 
|  | 'import', | 
|  | 'in', | 
|  | 'is', | 
|  | 'lambda', | 
|  | 'nonlocal', | 
|  | 'not', | 
|  | 'or', | 
|  | 'pass', | 
|  | 'raise', | 
|  | 'return', | 
|  | 'try', | 
|  | 'while', | 
|  | 'with', | 
|  | 'yield', | 
|  | #--end keywords-- | 
|  | ] | 
|  |  | 
|  | iskeyword = frozenset(kwlist).__contains__ | 
|  |  | 
|  | def main(): | 
|  | import sys, re | 
|  |  | 
|  | 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" | 
|  |  | 
|  | # load the output skeleton from the target, taking care to preserve its | 
|  | # newline convention. | 
|  | with open(optfile, newline='') as fp: | 
|  | format = fp.readlines() | 
|  | nl = format[0][len(format[0].strip()):] if format else '\n' | 
|  |  | 
|  | # scan the source file for keywords | 
|  | with open(iptfile) as fp: | 
|  | strprog = re.compile('"([^"]+)"') | 
|  | lines = [] | 
|  | for line in fp: | 
|  | if '{1, "' in line: | 
|  | match = strprog.search(line) | 
|  | if match: | 
|  | lines.append("        '" + match.group(1) + "'," + nl) | 
|  | lines.sort() | 
|  |  | 
|  | # insert the lines of keywords into the skeleton | 
|  | try: | 
|  | start = format.index("#--start keywords--" + nl) + 1 | 
|  | end = format.index("#--end keywords--" + nl) | 
|  | format[start:end] = lines | 
|  | except ValueError: | 
|  | sys.stderr.write("target does not contain format markers\n") | 
|  | sys.exit(1) | 
|  |  | 
|  | # write the output file | 
|  | with open(optfile, 'w', newline='') as fp: | 
|  | fp.writelines(format) | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main() |