public bool LookUpContructor(CLASSMEMBER obj)
 {
     for (int j = 0; j < globalSymbolTable[globalSymbolTable.Count - 1].classes.Count; j++)
     {
         if (globalSymbolTable.Last().classes[j].name == obj.type)
         {
             foreach (CLASSMEMBER i in globalSymbolTable.Last().classes[j].members)
             {
                 if (obj.type == i.name)
                 {
                     string memberParam = i.param;
                     string objParam    = obj.param;
                     if (objParam == memberParam)
                     {
                         return(true);
                     }
                 }
             }
             if (obj.param == "")
             {
                 return(true);
             }
         }
     }
     return(false);
 }
 public bool insertConstructor(CLASSMEMBER obj)
 {
     if (obj.name == globalSymbolTable.Last().classes.Last().name)
     {
         bool RT = insertMember(obj);
         return(RT);
     }
     else
     {
         errors.Add("Constructor Redeclaration " + obj.name + " " + obj.param + " " + obj.type);
         //obj.name = "ERROR-" + obj.name;
         //insertMember(obj);
         return(false);
     }
 }
        public bool LookUpMember(CLASSMEMBER obj)
        {
            bool paramNotMatch = false;

            if (obj.isMethod)
            {
                for (int i = 0; i < globalSymbolTable.Last().classes.Last().members.Count; i++)
                {
                    if (globalSymbolTable.Last().classes.Last().members[i].isMethod &&
                        globalSymbolTable.Last().classes.Last().members[i].name == obj.name)
                    {
                        string memberParam = globalSymbolTable.Last().classes.Last().members[i].param;
                        string objParam    = obj.param;
                        if (objParam == memberParam)
                        {
                            paramNotMatch = true;
                        }
                        else
                        {
                            paramNotMatch = false;
                            break;
                        }
                    }
                }

                if (paramNotMatch)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                for (int i = 0; i < globalSymbolTable.Last().classes.Last().members.Count; i++)
                {
                    if (!globalSymbolTable.Last().classes.Last().members[i].isMethod &&
                        globalSymbolTable.Last().classes.Last().members[i].name == obj.name)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        public bool insertMember(CLASSMEMBER obj)
        {
            CLASSMEMBER currentMember = (CLASSMEMBER)obj.ShallowCopy();

            if (LookUpMember(currentMember))
            {
                errors.Add("Method Redeclaration Error " + currentMember.name + " " + currentMember.param + " " + currentMember.type);
                //currentMember.name = "ERROR-" + currentMember.name;
                //globalSymbolTable.Last().classes.Last().members.Add(currentMember);
                return(false);
            }
            else
            {
                globalSymbolTable.Last().classes.Last().members.Add(currentMember);
                return(true);
            }
        }
        public string SearchMember(string classType, CLASSMEMBER obj)
        {
            for (int i = 0; i < globalSymbolTable.Last().classes.Count; i++)
            {
                if (globalSymbolTable.Last().classes[i].name == classType)
                {
                    CLASS currentClass = globalSymbolTable.Last().classes[i];

                    for (int j = 0; j < currentClass.members.Count; j++)
                    {
                        if (currentClass.members[j].name == obj.name)
                        {
                            CLASSMEMBER currentMember = currentClass.members[j];
                            if (!obj.isMethod && !currentMember.isMethod) // check if both obj and currentMember are feilds of a class , NOT METHOD
                            {
                                obj.type = currentMember.type;
                                return(obj.type);
                            }

                            else if (obj.isMethod && currentMember.isMethod) // check if both obj and currentMember are methods of a class , NOT feilds
                            {
                                if (obj.param == currentMember.param)
                                {
                                    obj.type = currentMember.type;
                                    return(obj.type);
                                }
                            }
                            else
                            {
                                return("invalid");
                            }
                        }
                    }
                    return("invalid");
                }
            }
            return("invalid");
        }
        private bool obj_arr_dec2()
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<obj_arr_dec2>) = { new , Null}
            if (tokenList[index].classStr == Singleton.SingletonEnums._new.ToString())
            {
                //<obj_arr_dec2>  new ID (<Param>)<obj_arr_dec3> | null
                if (tokenList[index].classStr == Singleton.SingletonEnums._new.ToString())
                {
                    index++;
                    if (tokenList[index].classStr == Singleton.nonKeywords.IDENTIFIER.ToString())
                    {
                        string N = tokenList[index].wordStr;
                        if (!semanticAnalyzer.LookUpClass(N))
                        {
                            addError("Class unspecified");
                        }
                        index++;
                        if (tokenList[index].classStr == "(")
                        {
                            string PL = "", AL = "", NPL = "", NAL = "";
                            index++;
                            if (Param(ref AL, PL, ref NAL, NPL))
                            {
                                if (tokenList[index].classStr == ")")
                                {
                                    CLASSMEMBER cm = new CLASSMEMBER();
                                    cm.accessModifier = Singleton.defaultAccessModifier;
                                    cm.name = N;
                                    cm.type = N;
                                    cm.isMethod = false;
                                    cm.param = AL;
                                    if (semanticAnalyzer.LookUpContructor(cm))
                                    {
                                        addError("Constructor Not Found");
                                    }
                                    index++;
                                    if (obj_arr_dec3())
                                    {
                                        currentNode = currentNode.Parent; return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            ///FOLLOW(<obj_arr_dec2>) = { access_modifier , static, DT , void , ID , class  , jabtak , barbar , agar , return , inc_dec ,
            ///break , continue , this ,} }
            else if (tokenList[index].classStr == Singleton.SingletonEnums._Access_Modifier.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._static.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._DT.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._void.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._class.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._jabtak.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._barbar.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._agar.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._return.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._break.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums.IncDec.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._continue.ToString() ||
                tokenList[index].classStr == Singleton.SingletonEnums._this.ToString())
            {
                currentNode = currentNode.Parent; return true;
            }
            currentNode = currentNode.Parent; return false;
        }
        private bool Object_Creation_Exp(string  N, string N1, string AM)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<Object_Creation_Exp>) = {= , , , ;}
            //FIRST(<Object_Creation_Exp>) = {=  , ;}
            if (tokenList[index].wordStr == "=" ||
                tokenList[index].classStr == ";")
            {
                //<Object_Creation_Exp>  = new ID  (<List_Const>) <Object_List>  |<Object_List>
                //<Object_Creation_Exp> = new ID  (<Param>) <Object_List>  |;
                if (tokenList[index].wordStr == "=")
                {
                    index++;
                    if (tokenList[index].classStr == Singleton.SingletonEnums._new.ToString())
                    {
                        index++;
                        if (tokenList[index].classStr == Singleton.nonKeywords.IDENTIFIER.ToString())
                        {
                            string N2 = tokenList[index].wordStr;

                            if (!semanticAnalyzer.LookUpClass(N2))
                            {
                                addError("Class unspecified");
                            }
                            index++;
                            if (tokenList[index].classStr == "(")
                            {

                                index++;
                                string PL = "", AL = "", NAL="",NPL="";
                                if (Param(ref AL, PL, ref NAL, NPL))
                                {
                                    if (tokenList[index].classStr == ")")
                                    {
                                        if (N != N2)
                                        {
                                            addError(N + " is not equal " + N2);
                                        }
                                        else
                                        {
                                            CLASSMEMBER cm = new CLASSMEMBER();
                                            cm.accessModifier = AM;
                                            cm.name = N1;
                                            cm.type = N;
                                            cm.isMethod = false;
                                            cm.param = AL;
                                            if (semanticAnalyzer.LookUpContructor(cm))
                                            {
                                                if (isMethodStart)
                                                {
                                                    semanticAnalyzer.insertVariables(N1, N, semanticAnalyzer.currentScope());
                                                }
                                                else
                                                {
                                                    //cm.param = "";
                                                    semanticAnalyzer.insertMember(cm);
                                                }
                                            }
                                            else
                                            {
                                                addError("Constructor not found in class " + N);
                                            }
                                        }
                                        index++;
                                        if (Object_List(N, AM))
                                        {
                                            currentNode = currentNode.Parent; return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            currentNode = currentNode.Parent; return false;
        }
        private bool object_array_dec(string  N, string N1, string AM)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<object_array_dec>) = { = }
            if (tokenList[index].wordStr == "=")
            {
                //<object_array_dec>  = new ID[<Exp>]<obj_arr_dec1>
                if (tokenList[index].wordStr == "=")
                {
                    index++;
                    if (tokenList[index].classStr == Singleton.SingletonEnums._new.ToString())
                    {
                        index++;
                        if (tokenList[index].classStr == Singleton.nonKeywords.IDENTIFIER.ToString())
                        {
                            string N2 = tokenList[index].wordStr;
                            if (!semanticAnalyzer.LookUpClass(N2))
                            {
                                addError("Class unspecified");
                            }
                            index++;
                            if (tokenList[index].classStr == "[")
                            {
                                currentNode.Nodes.Add("(" + tokenList[index].classStr + ")", "( " + tokenList[index].classStr + " )");
                                //currentNode = currentNode.Parent;
                                index++;
                                string ET = "";
                                string NET = "";
                                if (Exp(ref ET, ref NET))
                                {
                                    if (tokenList[index].classStr == "]")
                                    {
                                        currentNode.Nodes.Add("(" + tokenList[index].classStr + ")", "( " + tokenList[index].classStr + " )");
                                       // currentNode = currentNode.Parent;

                                        index++;
                                        if (isMethodStart)
                                        {
                                            semanticAnalyzer.insertVariables(N, N1, semanticAnalyzer.currentScope());
                                        }
                                        else
                                        {
                                            CLASSMEMBER cm = new CLASSMEMBER();
                                            cm.accessModifier = AM;
                                            cm.name = N;
                                            cm.type = N1;
                                            cm.isMethod = false;
                                            cm.param = "";
                                            semanticAnalyzer.insertMember(cm);
                                        }
                                        //semanticAnalyzer.insertVariables(N, N1, semanticAnalyzer.currentScope(), AM, "");
                                        if (obj_arr_dec1())
                                        {
                                            currentNode = currentNode.Parent; return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            currentNode = currentNode.Parent; return false;
        }
        private bool Method_Link3(string AM, string TM, string RT, string N)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<Method_Link 3>) = { ( }
            if (tokenList[index].classStr == "(")
            {
                //<Method_Link 3>   (<List_Param>) {<M_St>}
                if (tokenList[index].classStr == "(")
                {

                    index++;
                    string PL = "", NPL = "" ;
                    string AL = "", NAL = "" ;
                    if (List_Param(ref AL, PL, ref NAL, NPL))
                    {
                        if (tokenList[index].classStr == ")")
                        {

                            index++;
                            CLASSMEMBER mem = new CLASSMEMBER();
                            mem.isMethod = true;
                            mem.name = N;
                            mem.type = RT;
                            mem.param = AL;
                            mem.accessModifier = AM;

                            semanticAnalyzer.insertMember(mem);
                            if (AL != "")
                            {
                                string[] splitOp = { "," };
                                string[] ALArr = AL.Split(splitOp, StringSplitOptions.None);
                                string[] NALArr = NAL.Split(splitOp, StringSplitOptions.None);
                                for (int i = 0; i < ALArr.Length; i++)
                                {
                                    semanticAnalyzer.insertVariables(NALArr[i], ALArr[i], semanticAnalyzer.currentScope());
                                }
                            }

                            isMethodStart = true;

                            if (tokenList[index].classStr == "{")
                            {
                                index++;
                                semanticAnalyzer.createScope();
                                if (AL != "")
                                {
                                    string[] splitOp = { "," };
                                    string[] ALArr = AL.Split(splitOp, StringSplitOptions.None);
                                    string[] NALArr = NAL.Split(splitOp, StringSplitOptions.None);
                                    for (int i = ALArr.Length - 1; i >= 0; i--)
                                    {
                                        icg.GenerateCode("pop " + NALArr[i]);
                                    }
                                }
                                icg.GenerateCode(semanticAnalyzer.getCurrentClass() + "_" + N + "_" + AL +" Proc");
                                string MT = "";
                                if (M_ST())
                                {
                                    //if (RT == "" || RT == "void")
                                    //{
                                    //    if (!(MT == "" || MT == "void"))
                                    //    {
                                    //        addError("Return type error");
                                    //    }
                                    //}
                                    //else
                                    //{
                                    //    if (MT != RT)
                                    //    {
                                    //        addError("Return Type Error");
                                    //    }
                                    //}
                                    Console.WriteLine("MT = " + MT);
                                    Console.WriteLine("RT = " + RT);
                                    if (tokenList[index].classStr == "}")
                                    {

                                        isMethodStart = false;
                                        semanticAnalyzer.deleteScope();
                                        icg.GenerateCode(semanticAnalyzer.getCurrentClass() + "_" + N + "_" + AL + " endP");
                                        index++;
                                        currentNode = currentNode.Parent; return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            currentNode = currentNode.Parent; return false;
        }
        /*LEFT*/
        private bool Method_Call_1(ref string RT, string N)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<Method_Call_1>) = { ( }
            if (tokenList[index].classStr == "(")
            {
                //<Method_Call_1>  (<Param>)
                if (tokenList[index].classStr == "(")
                {
                    string AL = "", NAL = "";
                    string PL = "", NPL = "";
                    index++;
                    if (Param(ref AL, PL, ref NAL, NPL))
                    {
                        if (AL != "")
                        {
                            string[] splitOp = { "," };
                            string[] ALArr = AL.Split(splitOp, StringSplitOptions.None);
                            string[] NALArr = NAL.Split(splitOp, StringSplitOptions.None);
                            for (int i = 0; i < NALArr.Length; i++)
                            {
                                icg.GenerateCode("param " + NALArr[i]);
                            }
                        }
                        if (isObjectCalling)
                        {
                            icg.GenerateCode("call " + OC + "_" + N + "_" + AL);
                        }
                        else
                        {
                            icg.GenerateCode("call " + semanticAnalyzer.getCurrentClass() + "_" + N + "_" + AL);
                        }
                        if (tokenList[index].classStr == ")")
                        {
                            //RT = Search_GetType(N, "Undeclared Method");
                            CLASSMEMBER cm = new CLASSMEMBER();
                            cm.name = N;
                            cm.param = AL;
                            cm.isMethod = true;
                            if (!isObjectCalling)
                            {
                                RT = semanticAnalyzer.SearchMember(semanticAnalyzer.getCurrentClass(), cm);
                            }
                            else
                            {
                                RT = semanticAnalyzer.SearchMember(OC, cm);
                            }
                            if (RT == "invalid")
                            {
                                addError("Undeclared Method");
                            }
                            index++;
                            currentNode = currentNode.Parent; return true;
                        }
                    }
                }
            }
            currentNode = currentNode.Parent; return false;
        }
        private bool ID_1(string  AM, string RT, string N)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<ID_1>) = {( , =} //TEMP
            //FIRST(<ID_1>) = {( , AOP , , , ; }
            if (tokenList[index].classStr == "(" ||
                tokenList[index].classStr == Singleton.SingletonEnums.AssignmentOp.ToString() ||
                tokenList[index].classStr == "," ||
                tokenList[index].classStr == ";")
            {
                //<ID_1><Varaiable_Link2> | <Method_Link 3>
                if (Variable_Link2(RT, N))
                {
                    CLASSMEMBER cm = new CLASSMEMBER();
                    cm.accessModifier = Singleton.defaultAccessModifier;
                    cm.name = N;
                    cm.type = RT;
                    cm.isMethod = false;
                    cm.param = "";
                    semanticAnalyzer.insertMember(cm);
                    currentNode = currentNode.Parent; return true;
                }
                else if (Method_Link3(AM, "", RT, N))
                {
                    currentNode = currentNode.Parent; return true;
                }
            }
            currentNode = currentNode.Parent; return false;
        }
 public bool insertMember(CLASSMEMBER obj)
 {
     CLASSMEMBER currentMember = (CLASSMEMBER)obj.ShallowCopy();
     if (LookUpMember(currentMember))
     {
         errors.Add("Method Redeclaration Error " + currentMember.name + " " + currentMember.param + " " + currentMember.type);
         //currentMember.name = "ERROR-" + currentMember.name;
         //globalSymbolTable.Last().classes.Last().members.Add(currentMember);
         return false;
     }
     else
     {
         globalSymbolTable.Last().classes.Last().members.Add(currentMember);
         return true;
     }
 }
        public string SearchMember(string classType, CLASSMEMBER obj)
        {
            for (int i = 0; i < globalSymbolTable.Last().classes.Count; i++)
            {

                if (globalSymbolTable.Last().classes[i].name == classType)
                {
                    CLASS currentClass = globalSymbolTable.Last().classes[i];

                    for (int j = 0; j < currentClass.members.Count; j++)
                    {
                        if (currentClass.members[j].name == obj.name)
                        {
                            CLASSMEMBER currentMember = currentClass.members[j];
                            if (!obj.isMethod && !currentMember.isMethod) // check if both obj and currentMember are feilds of a class , NOT METHOD
                            {
                                obj.type = currentMember.type;
                                return obj.type;
                            }

                            else if (obj.isMethod && currentMember.isMethod) // check if both obj and currentMember are methods of a class , NOT feilds
                            {
                                if (obj.param == currentMember.param)
                                {
                                    obj.type = currentMember.type;
                                    return obj.type;
                                }
                            }
                            else
                            {
                                return "invalid";
                            }
                        }
                    }
                    return "invalid";
                }
            }
            return "invalid";
        }
        public bool LookUpMember(CLASSMEMBER obj)
        {
            bool paramNotMatch = false;
            if (obj.isMethod)
            {
                for (int i = 0; i < globalSymbolTable.Last().classes.Last().members.Count; i++)
                {
                    if (globalSymbolTable.Last().classes.Last().members[i].isMethod &&
                        globalSymbolTable.Last().classes.Last().members[i].name == obj.name)
                    {
                        string memberParam = globalSymbolTable.Last().classes.Last().members[i].param;
                        string objParam = obj.param;
                        if (objParam == memberParam)
                        {
                            paramNotMatch = true;
                        }
                        else
                        {
                            paramNotMatch = false;
                            break;
                        }
                    }
                }

                if (paramNotMatch)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                for (int i = 0; i < globalSymbolTable.Last().classes.Last().members.Count; i++)
                {
                    if (!globalSymbolTable.Last().classes.Last().members[i].isMethod &&
                        globalSymbolTable.Last().classes.Last().members[i].name == obj.name)
                    {
                        return true;
                    }
                }
            }

            return false;
        }
 public bool LookUpContructor(CLASSMEMBER obj)
 {
     for (int j = 0; j < globalSymbolTable[globalSymbolTable.Count - 1].classes.Count; j++)
     {
         if (globalSymbolTable.Last().classes[j].name == obj.type)
         {
             foreach (CLASSMEMBER i in globalSymbolTable.Last().classes[j].members)
             {
                 if (obj.type == i.name)
                 {
                     string memberParam = i.param;
                     string objParam = obj.param;
                     if (objParam == memberParam)
                     {
                         return true;
                     }
                 }
             }
             if (obj.param == "")
             {
                 return true;
             }
         }
     }
     return false;
 }
        private bool Array_DEC(string  AM, string TM, string RT)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<Array_DEC>) = {[}
            if (tokenList[index].classStr == "[")
            {
                //<Array_DEC>   [] ID <INIT_Array>
                if (tokenList[index].classStr == "[")
                {
                    currentNode.Nodes.Add("(" + tokenList[index].classStr + ")", "( " + tokenList[index].classStr + " )");
                    //currentNode = currentNode.Parent;
                    index++;
                    if (tokenList[index].classStr == "]")
                    {
                        currentNode.Nodes.Add("(" + tokenList[index].classStr + ")", "( " + tokenList[index].classStr + " )");
                        //currentNode = currentNode.Parent;
                        index++;
                        RT += "[]";
                        if (tokenList[index].classStr == Singleton.nonKeywords.IDENTIFIER.ToString())
                        {
                            string N = tokenList[index].wordStr;
                            index++;

                            if (isMethodStart)
                            {
                                semanticAnalyzer.insertVariables(N, RT, semanticAnalyzer.currentScope());
                            }
                            else
                            {
                                CLASSMEMBER cm = new CLASSMEMBER();
                                cm.name = N;
                                cm.type = RT;
                                cm.isMethod = false;
                                cm.category = TM;
                                cm.param = "";
                                semanticAnalyzer.insertMember(cm);
                            }
                            //semanticAnalyzer.insertVariables(N, RT, semanticAnalyzer.currentScope());
                            //semanticAnalyzer.insertVariables(N, RT, semanticAnalyzer.currentScope());
                            if (INIT_Array(RT))
                            {
                                currentNode = currentNode.Parent; return true;
                            }
                        }
                    }
                }
            }
            currentNode = currentNode.Parent; return false;
        }
        private bool Constructor_DEC(string  AM, string N)
        {
            currentNode = currentNode.Nodes.Add("<" + System.Reflection.MethodBase.GetCurrentMethod().Name + ">", "< " + System.Reflection.MethodBase.GetCurrentMethod().Name + " >");

            //FIRST(<Constructor_DEC>) = {ID}
            //FIRST(<Constructor_DEC>) = { ( }
            if (tokenList[index].classStr == "(")
            {
                //<Constructor_DEC>   ID (<List_Param>) {<M-St>}
                //<Constructor_DEC> (<List_Param>) {<M-St>}
                if (tokenList[index].classStr == "(")
                {
                    string AL = "", PL = "", NAL = "", NPL = "";
                    index++;
                    if (List_Param(ref AL, PL, ref NAL, NPL))
                    {
                        if (tokenList[index].classStr == ")")
                        {
                            CLASSMEMBER cons = new CLASSMEMBER();
                            cons.name = N;
                            cons.type = semanticAnalyzer.getCurrentClass();
                            cons.param = AL;
                            cons.isMethod = true;
                            cons.accessModifier = AM;
                            semanticAnalyzer.insertConstructor(cons);
                            if (AL != "")
                            {
                                string[] splitOp = { "," };
                                string[] ALArr = AL.Split(splitOp, StringSplitOptions.None);
                                string[] NALArr = NAL.Split(splitOp, StringSplitOptions.None);
                                for (int i = 0; i < ALArr.Length; i++)
                                {
                                    semanticAnalyzer.insertVariables(NALArr[i], ALArr[i], semanticAnalyzer.currentScope());
                                }
                            }
                            index++;
                            if (tokenList[index].classStr == "{")
                            {

                                index++;
                                semanticAnalyzer.createScope();
                                string MT = "";
                                if (M_ST())
                                {
                                    if (tokenList[index].classStr == "}")
                                    {

                                        index++;
                                        semanticAnalyzer.deleteScope();
                                        currentNode = currentNode.Parent; return true;
                                    }
                                }
                            }
                        }
                    }

                }

            }
            currentNode = currentNode.Parent; return false;
        }
 public bool insertConstructor(CLASSMEMBER obj)
 {
     if (obj.name == globalSymbolTable.Last().classes.Last().name)
     {
         bool RT = insertMember(obj);
         return RT;
     }
     else
     {
         errors.Add("Constructor Redeclaration " + obj.name + " " + obj.param + " " + obj.type);
         //obj.name = "ERROR-" + obj.name;
         //insertMember(obj);
         return false;
     }
 }