#! /usr/bin/env python



"""Token constants (from "token.h")."""



#  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/token.py



#--start constants--

ENDMARKER = 0

NAME = 1

NUMBER = 2

STRING = 3

NEWLINE = 4

INDENT = 5

DEDENT = 6

LPAR = 7

RPAR = 8

LSQB = 9

RSQB = 10

COLON = 11

COMMA = 12

SEMI = 13

PLUS = 14

MINUS = 15

STAR = 16

SLASH = 17

VBAR = 18

AMPER = 19

LESS = 20

GREATER = 21

EQUAL = 22

DOT = 23

PERCENT = 24

BACKQUOTE = 25

LBRACE = 26

RBRACE = 27

EQEQUAL = 28

NOTEQUAL = 29

LESSEQUAL = 30

GREATEREQUAL = 31

TILDE = 32

CIRCUMFLEX = 33

LEFTSHIFT = 34

RIGHTSHIFT = 35

DOUBLESTAR = 36

PLUSEQUAL = 37

MINEQUAL = 38

STAREQUAL = 39

SLASHEQUAL = 40

PERCENTEQUAL = 41

AMPEREQUAL = 42

VBAREQUAL = 43

CIRCUMFLEXEQUAL = 44

LEFTSHIFTEQUAL = 45

RIGHTSHIFTEQUAL = 46

DOUBLESTAREQUAL = 47

DOUBLESLASH = 48

DOUBLESLASHEQUAL = 49

AT = 50

OP = 51

ERRORTOKEN = 52

N_TOKENS = 53

NT_OFFSET = 256

#--end constants--



tok_name = {}

for _name, _value in globals().items():

    if type(_value) is type(0):

        tok_name[_value] = _name

del _name, _value





def ISTERMINAL(x):

    return x < NT_OFFSET



def ISNONTERMINAL(x):

    return x >= NT_OFFSET



def ISEOF(x):

    return x == ENDMARKER





def main():

    import re

    import sys

    args = sys.argv[1:]

    inFileName = args and args[0] or "Include/token.h"

    outFileName = "Lib/token.py"

    if len(args) > 1:

        outFileName = args[1]

    try:

        fp = open(inFileName)

    except IOError, err:

        sys.stdout.write("I/O error: %s\n" % str(err))

        sys.exit(1)

    lines = fp.read().split("\n")

    fp.close()

    prog = re.compile(

        "#define[ \t][ \t]*([A-Z0-9][A-Z0-9_]*)[ \t][ \t]*([0-9][0-9]*)",

        re.IGNORECASE)

    tokens = {}

    for line in lines:

        match = prog.match(line)

        if match:

            name, val = match.group(1, 2)

            val = int(val)

            tokens[val] = name          # reverse so we can sort them...

    keys = tokens.keys()

    keys.sort()

    # load the output skeleton from the target:

    try:

        fp = open(outFileName)

    except IOError, err:

        sys.stderr.write("I/O error: %s\n" % str(err))

        sys.exit(2)

    format = fp.read().split("\n")

    fp.close()

    try:

        start = format.index("#--start constants--") + 1

        end = format.index("#--end constants--")

    except ValueError:

        sys.stderr.write("target does not contain format markers")

        sys.exit(3)

    lines = []

    for val in keys:

        lines.append("%s = %d" % (tokens[val], val))

    format[start:end] = lines

    try:

        fp = open(outFileName, 'w')

    except IOError, err:

        sys.stderr.write("I/O error: %s\n" % str(err))

        sys.exit(4)

    fp.write("\n".join(format))

    fp.close()





if __name__ == "__main__":

    main()

