1"""Token constants (from "token.h").""" 2 3__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF'] 4 5# This file is automatically generated; please don't muck it up! 6# 7# To update the symbols in this file, 'cd' to the top directory of 8# the python source tree after building the interpreter and run: 9# 10# ./python Lib/token.py 11 12#--start constants-- 13ENDMARKER = 0 14NAME = 1 15NUMBER = 2 16STRING = 3 17NEWLINE = 4 18INDENT = 5 19DEDENT = 6 20LPAR = 7 21RPAR = 8 22LSQB = 9 23RSQB = 10 24COLON = 11 25COMMA = 12 26SEMI = 13 27PLUS = 14 28MINUS = 15 29STAR = 16 30SLASH = 17 31VBAR = 18 32AMPER = 19 33LESS = 20 34GREATER = 21 35EQUAL = 22 36DOT = 23 37PERCENT = 24 38LBRACE = 25 39RBRACE = 26 40EQEQUAL = 27 41NOTEQUAL = 28 42LESSEQUAL = 29 43GREATEREQUAL = 30 44TILDE = 31 45CIRCUMFLEX = 32 46LEFTSHIFT = 33 47RIGHTSHIFT = 34 48DOUBLESTAR = 35 49PLUSEQUAL = 36 50MINEQUAL = 37 51STAREQUAL = 38 52SLASHEQUAL = 39 53PERCENTEQUAL = 40 54AMPEREQUAL = 41 55VBAREQUAL = 42 56CIRCUMFLEXEQUAL = 43 57LEFTSHIFTEQUAL = 44 58RIGHTSHIFTEQUAL = 45 59DOUBLESTAREQUAL = 46 60DOUBLESLASH = 47 61DOUBLESLASHEQUAL = 48 62AT = 49 63ATEQUAL = 50 64RARROW = 51 65ELLIPSIS = 52 66OP = 53 67AWAIT = 54 68ASYNC = 55 69ERRORTOKEN = 56 70N_TOKENS = 57 71NT_OFFSET = 256 72#--end constants-- 73 74tok_name = {value: name 75 for name, value in globals().items() 76 if isinstance(value, int) and not name.startswith('_')} 77__all__.extend(tok_name.values()) 78 79def ISTERMINAL(x): 80 return x < NT_OFFSET 81 82def ISNONTERMINAL(x): 83 return x >= NT_OFFSET 84 85def ISEOF(x): 86 return x == ENDMARKER 87 88 89def _main(): 90 import re 91 import sys 92 args = sys.argv[1:] 93 inFileName = args and args[0] or "Include/token.h" 94 outFileName = "Lib/token.py" 95 if len(args) > 1: 96 outFileName = args[1] 97 try: 98 fp = open(inFileName) 99 except OSError as err: 100 sys.stdout.write("I/O error: %s\n" % str(err)) 101 sys.exit(1) 102 with fp: 103 lines = fp.read().split("\n") 104 prog = re.compile( 105 "#define[ \t][ \t]*([A-Z0-9][A-Z0-9_]*)[ \t][ \t]*([0-9][0-9]*)", 106 re.IGNORECASE) 107 tokens = {} 108 for line in lines: 109 match = prog.match(line) 110 if match: 111 name, val = match.group(1, 2) 112 val = int(val) 113 tokens[val] = name # reverse so we can sort them... 114 keys = sorted(tokens.keys()) 115 # load the output skeleton from the target: 116 try: 117 fp = open(outFileName) 118 except OSError as err: 119 sys.stderr.write("I/O error: %s\n" % str(err)) 120 sys.exit(2) 121 with fp: 122 format = fp.read().split("\n") 123 try: 124 start = format.index("#--start constants--") + 1 125 end = format.index("#--end constants--") 126 except ValueError: 127 sys.stderr.write("target does not contain format markers") 128 sys.exit(3) 129 lines = [] 130 for val in keys: 131 lines.append("%s = %d" % (tokens[val], val)) 132 format[start:end] = lines 133 try: 134 fp = open(outFileName, 'w') 135 except OSError as err: 136 sys.stderr.write("I/O error: %s\n" % str(err)) 137 sys.exit(4) 138 with fp: 139 fp.write("\n".join(format)) 140 141 142if __name__ == "__main__": 143 _main() 144