Class AbstractCfgVisitor

java.lang.Object
com.github._1c_syntax.bsl.languageserver.cfg.AbstractCfgVisitor

public abstract class AbstractCfgVisitor extends Object
Абстрактный класс обхода графа управления. Переопределяйте методы-визиторы для обхода конкретных узлов графа управления
  • Field Details

    • graph

      protected final ControlFlowGraph graph
      Обходимый граф потока управления.
  • Constructor Details

    • AbstractCfgVisitor

      protected AbstractCfgVisitor(ControlFlowGraph graph)
      Конструктор.
      Parameters:
      graph - обходимый граф потока управления
  • Method Details

    • visitVertex

      public void visitVertex(CfgVertex v)
      Начинает обход графа с указанной вершины.
      Parameters:
      v - вершина, с которой начинается обход
    • visitBasicBlock

      protected void visitBasicBlock(BasicBlockVertex v)
      Обходит вершину линейного блока.
      Parameters:
      v - вершина линейного блока
    • visitBranchingVertex

      protected void visitBranchingVertex(BranchingVertex v)
      Метод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы ветвлений. Вызвать super, если надо диспетчеризовать визитор к более специальным листовым классам ветвлений
      Parameters:
      v - посещаемая ветка
    • visitLoopVertex

      protected void visitLoopVertex(LoopVertex v)
      Метод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы циклов. Вызвать super, если надо диспетчеризовать визитор к более специальным листовым классам циклов
      Parameters:
      v - посещаемая ветка
    • visitConditionalVertex

      protected void visitConditionalVertex(ConditionalVertex v)
      Обходит условную вершину (ветвление).
      Parameters:
      v - посещаемая условная вершина
    • visitWhileLoopVertex

      protected void visitWhileLoopVertex(WhileLoopVertex v)
      Обходит вершину цикла Пока.
      Parameters:
      v - посещаемая вершина цикла Пока
    • visitForLoopVertex

      protected void visitForLoopVertex(ForLoopVertex v)
      Обходит вершину цикла Для.
      Parameters:
      v - посещаемая вершина цикла Для
    • visitForeachLoopVertex

      protected void visitForeachLoopVertex(ForeachLoopVertex v)
      Обходит вершину цикла Для Каждого.
      Parameters:
      v - посещаемая вершина цикла Для Каждого
    • visitLabelVertex

      protected void visitLabelVertex(LabelVertex v)
      Обходит вершину метки.
      Parameters:
      v - посещаемая вершина метки
    • visitTryExceptVertex

      protected void visitTryExceptVertex(TryExceptVertex v)
      Обходит вершину конструкции Попытка…Исключение.
      Parameters:
      v - посещаемая вершина конструкции Попытка…Исключение
    • visitExitVertex

      protected void visitExitVertex(ExitVertex v)
      Обходит вершину выхода.
      Parameters:
      v - посещаемая вершина выхода
    • visitDirectEdge

      protected boolean visitDirectEdge(CfgEdge e)
      Обходит прямое ребро перехода по потоку управления.
      Parameters:
      e - ребро перехода по потоку управления
      Returns:
      true — если переход нужно совершить; false — если обход в этом направлении не нужен
    • visitTrueEdge

      protected boolean visitTrueEdge(CfgEdge e)
      Обходит ребро перехода по ветви «истина».
      Parameters:
      e - ребро перехода по потоку управления
      Returns:
      true — если переход нужно совершить; false — если обход в этом направлении не нужен
    • visitFalseEdge

      protected boolean visitFalseEdge(CfgEdge e)
      Обходит ребро перехода по ветви «ложь».
      Parameters:
      e - ребро перехода по потоку управления
      Returns:
      true — если переход нужно совершить; false — если обход в этом направлении не нужен
    • visitLoopIterationEdge

      protected boolean visitLoopIterationEdge(CfgEdge e)
      Обходит ребро итерации цикла (переход назад к началу цикла).
      Parameters:
      e - ребро перехода по потоку управления
      Returns:
      true — если переход нужно совершить; false — если обход в этом направлении не нужен
    • dispatchVertex

      protected final void dispatchVertex(CfgVertex v)
      Выполняет прямую диспетчеризацию вершины к соответствующему методу-визитору. Доступен подклассам для явного вызова диспетчеризации.
      Parameters:
      v - диспетчеризуемая вершина