public static TAnalysisData Flow(DataFlowOperationVisitor <TAnalysisData, TAbstractAnalysisValue> operationVisitor, BasicBlock block, TAnalysisData data)
        {
            if (block.Kind == BasicBlockKind.Entry)
            {
                operationVisitor.OnEntry(block, data);
            }
            else if (block.Kind == BasicBlockKind.Exit)
            {
                operationVisitor.OnExit(block, data);
            }

            foreach (var statement in block.Statements)
            {
                data = operationVisitor.Flow(statement, block, data);
            }

            return(data);
        }
 protected DataFlowAnalysis(AbstractAnalysisDomain <TAnalysisData> analysisDomain, DataFlowOperationVisitor <TAnalysisData, TAbstractAnalysisValue> operationVisitor)
 {
     AnalysisDomain   = analysisDomain;
     OperationVisitor = operationVisitor;
 }
 protected BackwardDataFlowAnalysis(AbstractDomain <TAnalysisData> analysisDomain, DataFlowOperationVisitor <TAnalysisData, TAbstractAnalysisValue> operationVisitor)
     : base(analysisDomain, operationVisitor)
 {
 }