Example #1
0
        public void ExtractData(AST root)
        {
            if (root is IProcedureList)
            {
                foreach (Procedure procedure in root as IProcedureList)
                {
                    Procedures.AddProcedure(procedure);
                }
                foreach (Procedure procedure in root as IProcedureList)
                {
                    ExtractProcedure(procedure);
                }

                foreach (Procedure procedure in Procedures)
                {
                    IProcedureList calledProcedures = CallsTable.GetCalledBy(procedure);
                    if (calledProcedures.GetSize() == 0)
                    {
                        ExtractProcedureCalls(procedure);
                    }
                }

                ExtractAffects();
            }
        }
Example #2
0
 public Procedure(string name, IStatementList body)
 {
     Name      = name;
     Body      = body;
     Attribute = new Attribute("procName", Name);
     Modifying = ImplementationFactory.CreateVariableList();
     Using     = ImplementationFactory.CreateVariableList();
     CalledBy  = ImplementationFactory.CreateProcedureList();
     Calling   = ImplementationFactory.CreateProcedureList();
 }
Example #3
0
        public IProcedureList GetCallingT(Procedure procedure)
        {
            IProcedureList calling = GetCalling(procedure);

            for (int i = 0; i < calling.GetSize(); i++)
            {
                calling.Sum(GetCalling(calling[i]));
            }
            return(calling);
        }
Example #4
0
        public IProcedureList GetCalledByT(Procedure procedure)
        {
            IProcedureList called = GetCalledBy(procedure);

            for (int i = 0; i < called.GetSize(); i++)
            {
                called.Sum(GetCalledBy(called[i]));
            }
            return(called);
        }
Example #5
0
        private IProcedureList Procedures()
        {
            Procedure      procedure  = Procedure();
            IProcedureList procedures = ImplementationFactory.CreateProcedureList();

            procedures.AddProcedure(procedure);

            while (currentToken.Type == TokenType.PROCEDURE)
            {
                procedures.AddProcedure(Procedure());
            }
            return(procedures);
        }
Example #6
0
        private void ExtractProcedureCalls(Procedure procedure)
        {
            IProcedureList callingProcedures = CallsTable.GetCalling(procedure);

            foreach (Procedure callingProcedure in callingProcedures)
            {
                List <Call> procedureCalls = calls[callingProcedure].Where(x => x.Procedure == procedure).ToList();
                foreach (Call call in procedureCalls)
                {
                    IStatementList callParents = ParentTable.GetParentT(call);

                    IVariableList modifiedVariables = ModifiesTable.GetModifiedBy(procedure);
                    IVariableList usedVariables     = UsesTable.GetUsedBy(procedure);

                    foreach (Variable variable in modifiedVariables)
                    {
                        ModifiesTable.SetModifies(call, variable);
                        ModifiesTable.SetModifies(callingProcedure, variable);
                        foreach (Statement parent in callParents)
                        {
                            ModifiesTable.SetModifies(parent, variable);
                        }
                    }
                    foreach (Variable variable in usedVariables)
                    {
                        UsesTable.SetUses(call, variable);
                        UsesTable.SetUses(callingProcedure, variable);
                        foreach (Statement parent in callParents)
                        {
                            UsesTable.SetUses(parent, variable);
                        }
                    }
                    ExtractProcedureCalls(callingProcedure);
                }
            }
        }
Example #7
0
        public bool IsUses(Procedure procedure, Variable variable)
        {
            IProcedureList procedureList = GetUsesProcedures(variable);

            return(procedureList.Contains(procedure));
        }
Example #8
0
        private IProcedureList Root()
        {
            IProcedureList root = Procedures();

            return(root);
        }
Example #9
0
        public bool IsCallsT(Procedure procedure1, Procedure procedure2)
        {
            IProcedureList callingProcedures = GetCallingT(procedure2);

            return(callingProcedures.Contains(procedure1));
        }
Example #10
0
        public bool IsCalls(Procedure procedure1, Procedure procedure2)
        {
            IProcedureList procedureList = GetCalling(procedure2);

            return(procedureList.Contains(procedure1));
        }