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(); } }
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(); }
public IProcedureList GetCallingT(Procedure procedure) { IProcedureList calling = GetCalling(procedure); for (int i = 0; i < calling.GetSize(); i++) { calling.Sum(GetCalling(calling[i])); } return(calling); }
public IProcedureList GetCalledByT(Procedure procedure) { IProcedureList called = GetCalledBy(procedure); for (int i = 0; i < called.GetSize(); i++) { called.Sum(GetCalledBy(called[i])); } return(called); }
private IProcedureList Procedures() { Procedure procedure = Procedure(); IProcedureList procedures = ImplementationFactory.CreateProcedureList(); procedures.AddProcedure(procedure); while (currentToken.Type == TokenType.PROCEDURE) { procedures.AddProcedure(Procedure()); } return(procedures); }
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); } } }
public bool IsUses(Procedure procedure, Variable variable) { IProcedureList procedureList = GetUsesProcedures(variable); return(procedureList.Contains(procedure)); }
private IProcedureList Root() { IProcedureList root = Procedures(); return(root); }
public bool IsCallsT(Procedure procedure1, Procedure procedure2) { IProcedureList callingProcedures = GetCallingT(procedure2); return(callingProcedures.Contains(procedure1)); }
public bool IsCalls(Procedure procedure1, Procedure procedure2) { IProcedureList procedureList = GetCalling(procedure2); return(procedureList.Contains(procedure1)); }