| #! /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() |