class State: OPERATOR, NAME, *_ = range(100) class TokenType: ( LEFT_PARENTHESIS, RIGHT_PARENTHESIS, NUMBER, OPERATOR, SEMICOLON, COMMA, SYMBOL, *_ ) = range(100) UNARY = "unary" FUNCALL = "funcall" PRECEDENCE = { "+": 10, "-": 10, "*": 20, "^": 30, UNARY: 40, } OPERATOR_CHARS = "*+-/%&~^|#$.:<=>@" NUMBER_CHARS = "0123456789" SYMBOL_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?"