Вроде считает нормально. Осталось поменять get_number_token, чтобы он ругался на числа с плавающей запятой, и добавить обработку InvalidToken