Exemplo n.º 1
0
        public static void CheckParentOrFollows(string firstArgument, string secondArgument, Func <TNODE, TNODE, bool> method)
        {
            EntityTypeEnum firstArgType;
            EntityTypeEnum secondArgType;

            if (int.TryParse(firstArgument, out _))
            {
                firstArgType = EntityTypeEnum.Statement;
            }
            else if (firstArgument == "_")
            {
                firstArgType = EntityTypeEnum.Statement;
            }
            else
            {
                firstArgType = QueryProcessor.GetVarEnumType(firstArgument);
            }

            if (int.TryParse(secondArgument, out _))
            {
                secondArgType = EntityTypeEnum.Statement;
            }
            else if (secondArgument == "_")
            {
                secondArgType = EntityTypeEnum.Statement;
            }
            else
            {
                secondArgType = QueryProcessor.GetVarEnumType(secondArgument);
            }

            List <int> firstArgIndexes  = QueryDataGetter.GetArgIndexes(firstArgument, firstArgType);
            List <int> secondArgIndexes = QueryDataGetter.GetArgIndexes(secondArgument, secondArgType);

            List <int> firstStayinIndexes  = new List <int>();
            List <int> secondStayinIndexes = new List <int>();

            TNODE first;
            TNODE second;

            foreach (int firstInd in firstArgIndexes)
            {
                foreach (int secondInd in secondArgIndexes)
                {
                    first  = GetNodeByType(firstArgType, firstInd);
                    second = GetNodeByType(secondArgType, secondInd);
                    if (method(first, second))
                    {
                        firstStayinIndexes.Add(firstInd);
                        secondStayinIndexes.Add(secondInd);
                    }
                }
            }

            QueryDataGetter.RemoveIndexesFromLists(firstArgument, secondArgument,
                                                   firstStayinIndexes,
                                                   secondStayinIndexes);
        }
Exemplo n.º 2
0
        private static void CheckStatementModifiesOrUses(string firstArgument, string secondArgument, Func <Variable, Statement, bool> IsModifiedOrUsedByStmt)
        {
            EntityTypeEnum secondArgType;
            EntityTypeEnum firstArgType;

            if (int.TryParse(firstArgument, out _))
            {
                firstArgType = EntityTypeEnum.Statement;
            }
            else if (firstArgument == "_")
            {
                firstArgType = EntityTypeEnum.Statement;
            }
            else
            {
                firstArgType = QueryProcessor.GetVarEnumType(firstArgument);
            }

            if ((secondArgument[0] == '\"' & secondArgument[secondArgument.Length - 1] == '\"'))
            {
                secondArgType = EntityTypeEnum.Variable;
            }
            else if (secondArgument == "_")
            {
                secondArgType = EntityTypeEnum.Variable;
            }
            else
            {
                secondArgType = QueryProcessor.GetVarEnumType(secondArgument);
            }

            List <int> firstArgIndexes  = QueryDataGetter.GetArgIndexes(firstArgument, firstArgType);
            List <int> secondArgIndexes = QueryDataGetter.GetArgIndexes(secondArgument, secondArgType);

            List <int> stmtStayinIndexes = new List <int>();
            List <int> varStayinIndexes  = new List <int>();

            Statement stmt;
            Variable  var;

            foreach (int firstInd in firstArgIndexes)
            {
                foreach (int secondInd in secondArgIndexes)
                {
                    stmt = StmtTable.StmtTable.Instance.GetStmt(firstInd);
                    var  = VarTable.VarTable.Instance.GetVar(secondInd);
                    //Modifies.Modifies.Instance.IsModified
                    if (IsModifiedOrUsedByStmt(var, stmt))
                    {
                        stmtStayinIndexes.Add(firstInd);
                        varStayinIndexes.Add(secondInd);
                    }
                }
            }
            QueryDataGetter.RemoveIndexesFromLists(firstArgument, secondArgument,
                                                   stmtStayinIndexes,
                                                   varStayinIndexes);
        }
Exemplo n.º 3
0
        private static void CheckProcedureModifiesOrUses(string firstArgument, string secondArgument, Func <Variable, Procedure, bool> IsModifiedOrUsedByProc)
        {
            EntityTypeEnum secondArgType;
            EntityTypeEnum firstArgType;

            if (firstArgument[0] == '\"' & firstArgument[firstArgument.Length - 1] == '\"')
            {
                firstArgType = EntityTypeEnum.Procedure;
            }
            else
            {
                firstArgType = QueryProcessor.GetVarEnumType(firstArgument);
            }

            if ((secondArgument[0] == '\"' & secondArgument[secondArgument.Length - 1] == '\"'))
            {
                secondArgType = EntityTypeEnum.Variable;
            }
            else if (secondArgument == "_")
            {
                secondArgType = EntityTypeEnum.Variable;
            }
            else
            {
                secondArgType = QueryProcessor.GetVarEnumType(secondArgument);
            }

            List <int> firstArgIndexes  = QueryDataGetter.GetArgIndexes(firstArgument, firstArgType);
            List <int> secondArgIndexes = QueryDataGetter.GetArgIndexes(secondArgument, secondArgType);

            List <int> procStayinIndexes = new List <int>();
            List <int> varStayinIndexes  = new List <int>();

            Procedure proc;
            Variable  var;

            foreach (int firstInd in firstArgIndexes)
            {
                foreach (int secondInd in secondArgIndexes)
                {
                    proc = ProcTable.ProcTable.Instance.GetProc(firstInd);
                    var  = VarTable.VarTable.Instance.GetVar(secondInd);
                    //Modifies.Modifies.Instance.IsModified
                    if (IsModifiedOrUsedByProc(var, proc))
                    {
                        procStayinIndexes.Add(firstInd);
                        varStayinIndexes.Add(secondInd);
                    }
                }
            }
            QueryDataGetter.RemoveIndexesFromLists(firstArgument, secondArgument,
                                                   procStayinIndexes,
                                                   varStayinIndexes);
        }
Exemplo n.º 4
0
        public static void CheckNext(string firstArgument, string secondArgument, Func <int, int, bool> method)
        {
            EntityTypeEnum firstArgType;
            EntityTypeEnum secondArgType;

            if (int.TryParse(firstArgument, out _))
            {
                firstArgType = EntityTypeEnum.Prog_line;
            }
            else if (firstArgument == "_")
            {
                firstArgType = EntityTypeEnum.Prog_line;
            }
            else
            {
                firstArgType = QueryProcessor.GetVarEnumType(firstArgument);
            }

            if (int.TryParse(secondArgument, out _))
            {
                secondArgType = EntityTypeEnum.Prog_line;
            }
            else if (secondArgument == "_")
            {
                secondArgType = EntityTypeEnum.Prog_line;
            }
            else
            {
                secondArgType = QueryProcessor.GetVarEnumType(secondArgument);
            }

            List <int> firstArgIndexes  = QueryDataGetter.GetArgIndexes(firstArgument, firstArgType);
            List <int> secondArgIndexes = QueryDataGetter.GetArgIndexes(secondArgument, secondArgType);

            List <int> firstStayinIndexes  = new List <int>();
            List <int> secondStayinIndexes = new List <int>();

            foreach (int firstInd in firstArgIndexes)
            {
                foreach (int secondInd in secondArgIndexes)
                {
                    if (method(firstInd, secondInd))
                    {
                        firstStayinIndexes.Add(firstInd);
                        secondStayinIndexes.Add(secondInd);
                    }
                }
            }

            QueryDataGetter.RemoveIndexesFromLists(firstArgument, secondArgument,
                                                   firstStayinIndexes,
                                                   secondStayinIndexes);
        }
Exemplo n.º 5
0
        public static void CheckCalls(string firstArgument, string secondArgument, Func <string, string, bool> method)
        {
            EntityTypeEnum secondArgType;
            EntityTypeEnum firstArgType;

            if (firstArgument[0] == '\"' & firstArgument[firstArgument.Length - 1] == '\"')
            {
                firstArgType = EntityTypeEnum.Procedure;
            }
            else if (firstArgument == "_")
            {
                firstArgType = EntityTypeEnum.Procedure;
            }
            else
            {
                firstArgType = QueryProcessor.GetVarEnumType(firstArgument);
            }

            if ((secondArgument[0] == '\"' & secondArgument[secondArgument.Length - 1] == '\"'))
            {
                secondArgType = EntityTypeEnum.Procedure;
            }
            else if (secondArgument == "_")
            {
                secondArgType = EntityTypeEnum.Procedure;
            }
            else
            {
                secondArgType = QueryProcessor.GetVarEnumType(secondArgument);
            }

            List <int> firstArgIndexes  = QueryDataGetter.GetArgIndexes(firstArgument, firstArgType);
            List <int> secondArgIndexes = QueryDataGetter.GetArgIndexes(secondArgument, secondArgType);

            List <int> firstStayinIndexes  = new List <int>();
            List <int> secondStayinIndexes = new List <int>();

            if (firstArgType != EntityTypeEnum.Procedure)
            {
                throw new ArgumentException("Not a procedure: {0}", firstArgument);
            }
            else if (secondArgType != EntityTypeEnum.Procedure)
            {
                throw new ArgumentException("Not a procedure: {0}", secondArgument);
            }

            string    first, second;
            Procedure p1, p2;

            foreach (int firstInd in firstArgIndexes)
            {
                foreach (int secondInd in secondArgIndexes)
                {
                    p1 = ProcTable.ProcTable.Instance.GetProc(firstInd);
                    p2 = ProcTable.ProcTable.Instance.GetProc(secondInd);

                    first  = p1 == null ? "" : p1.Name;
                    second = p2 == null ? "" : p2.Name;

                    if (method(first, second))
                    {
                        firstStayinIndexes.Add(firstInd);
                        secondStayinIndexes.Add(secondInd);
                    }
                }
            }

            QueryDataGetter.RemoveIndexesFromLists(firstArgument, secondArgument,
                                                   firstStayinIndexes,
                                                   secondStayinIndexes);
        }