Class AbstractCfgVisitor
java.lang.Object
com.github._1c_syntax.bsl.languageserver.cfg.AbstractCfgVisitor
Абстрактный класс обхода графа управления. Переопределяйте методы-визиторы для обхода
конкретных узлов графа управления
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ControlFlowGraphОбходимый граф потока управления. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final voidВыполняет прямую диспетчеризацию вершины к соответствующему методу-визитору.protected voidОбходит вершину линейного блока.protected voidМетод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы ветвлений.protected voidОбходит условную вершину (ветвление).protected booleanОбходит прямое ребро перехода по потоку управления.protected voidОбходит вершину выхода.protected booleanОбходит ребро перехода по ветви «ложь».protected voidОбходит вершину циклаДля Каждого.protected voidОбходит вершину циклаДля.protected voidОбходит вершину метки.protected booleanОбходит ребро итерации цикла (переход назад к началу цикла).protected voidМетод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы циклов.protected booleanОбходит ребро перехода по ветви «истина».protected voidОбходит вершину конструкцииПопытка…Исключение.voidНачинает обход графа с указанной вершины.protected voidОбходит вершину циклаПока.
-
Field Details
-
graph
Обходимый граф потока управления.
-
-
Constructor Details
-
AbstractCfgVisitor
Конструктор.- Parameters:
graph- обходимый граф потока управления
-
-
Method Details
-
visitVertex
Начинает обход графа с указанной вершины.- Parameters:
v- вершина, с которой начинается обход
-
visitBasicBlock
Обходит вершину линейного блока.- Parameters:
v- вершина линейного блока
-
visitBranchingVertex
Метод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы ветвлений. Вызвать super, если надо диспетчеризовать визитор к более специальным листовым классам ветвлений- Parameters:
v- посещаемая ветка
-
visitLoopVertex
Метод рекомендуется переопределять, если необходимо одним методом обрабатывать любые типы циклов. Вызвать super, если надо диспетчеризовать визитор к более специальным листовым классам циклов- Parameters:
v- посещаемая ветка
-
visitConditionalVertex
Обходит условную вершину (ветвление).- Parameters:
v- посещаемая условная вершина
-
visitWhileLoopVertex
Обходит вершину циклаПока.- Parameters:
v- посещаемая вершина циклаПока
-
visitForLoopVertex
Обходит вершину циклаДля.- Parameters:
v- посещаемая вершина циклаДля
-
visitForeachLoopVertex
Обходит вершину циклаДля Каждого.- Parameters:
v- посещаемая вершина циклаДля Каждого
-
visitLabelVertex
Обходит вершину метки.- Parameters:
v- посещаемая вершина метки
-
visitTryExceptVertex
Обходит вершину конструкцииПопытка…Исключение.- Parameters:
v- посещаемая вершина конструкцииПопытка…Исключение
-
visitExitVertex
Обходит вершину выхода.- Parameters:
v- посещаемая вершина выхода
-
visitDirectEdge
Обходит прямое ребро перехода по потоку управления.- Parameters:
e- ребро перехода по потоку управления- Returns:
true— если переход нужно совершить;false— если обход в этом направлении не нужен
-
visitTrueEdge
Обходит ребро перехода по ветви «истина».- Parameters:
e- ребро перехода по потоку управления- Returns:
true— если переход нужно совершить;false— если обход в этом направлении не нужен
-
visitFalseEdge
Обходит ребро перехода по ветви «ложь».- Parameters:
e- ребро перехода по потоку управления- Returns:
true— если переход нужно совершить;false— если обход в этом направлении не нужен
-
visitLoopIterationEdge
Обходит ребро итерации цикла (переход назад к началу цикла).- Parameters:
e- ребро перехода по потоку управления- Returns:
true— если переход нужно совершить;false— если обход в этом направлении не нужен
-
dispatchVertex
Выполняет прямую диспетчеризацию вершины к соответствующему методу-визитору. Доступен подклассам для явного вызова диспетчеризации.- Parameters:
v- диспетчеризуемая вершина
-