//---------------------
        // Парсер скобки [
        //---------------------

        private static ASTNode ParseBrackets(bool isCanValues)
        {
            ASTNode brackets = null;

            if (isCanValues)
            {
                GetNextToken();

                if (curTok.token == Tokens.Token.BRACKET_R)
                {
                    ConsoleHelper.WriteErrorAST("Expected '[X]'", curTok.y, curTok.x);
                }

                ASTNode exp = MemberBinOperation();

                if (curTok.token == Tokens.Token.BRACKET_L)
                {
                    exp = new BracketsAST(exp, ParseBrackets(true));
                }

                brackets = exp;
                if (curTok.token == Tokens.Token.OP)
                {
                    brackets = ParseBinaryOperation(exp);
                }
                else if (curTok.token != Tokens.Token.BRACKET_R)
                {
                    ConsoleHelper.WriteErrorAST("Expected ']'", curTok.y, curTok.x);
                }
            }
            else
            {
                GetNextToken();
                if (curTok.token != Tokens.Token.BRACKET_R)
                {
                    ConsoleHelper.WriteErrorAST("Expected ']'", curTok.y, curTok.x);
                }
                brackets = new BracketsAST();
            }
            GetNextToken();
            return(brackets);
        }
        //---------------------
        // Парсер id
        //---------------------

        private static ASTNode ParseId(string type, bool isArray)
        {
            bool   isCall = type == "";
            string idName = curTok.subString;
            string typeId = type == "" ? GetTypeID(idName) : type;

            ASTNode id = new IdentificatorAST(typeId, idName, new Point(curTok.y, curTok.x), isArray);

            GetNextToken();
            Point point = new Point(curTok.y, curTok.x);

            // массив
            if (curTok.token == Tokens.Token.BRACKET_L)
            {
                ASTNode memberBrackets = ParseBrackets(true);
                isArray = true;
                BracketsAST brackets = new BracketsAST(memberBrackets);
                if (curTok.token == Tokens.Token.ASSIGNMENT)
                {
                    return(new IdentificatorAST(typeId, idName, ParseInitID(), brackets, point, true));
                }
            }

            if (curTok.token == Tokens.Token.CREMENT)
            {
                return(ParseCrement(id));
            }
            if (curTok.token == Tokens.Token.PARENTHESIS_L)
            {
                return(ParseMethod("", idName, isCall));
            }
            else if (curTok.token == Tokens.Token.ASSIGNMENT)
            {
                return(new IdentificatorAST(typeId, idName, ParseInitID(), point, isArray));
            }
            return(id);
        }