Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2218 / 892 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 12:

Анализ потока управления

Фрагменты


Фрагментом называется произвольный подграф графа управления (под подграфом мы понимаем некоторое непустое подмножество вершин графа, содержащее все ребра графа между ними).

Для фрагмента F определяются четыре множества вершин:

  • входные вершины (entry (F)) - множество вершин F , до которых существует путь из start , не содержащий других вершин F
  • начальные вершины (begin(F)) - множество вершин F , в которые входит хотя бы одна дуга извне F
  • выходные вершины (exit(F)) - множество вершин F, из которых исходит хоть одна дуга вовне F
  • конечные вершины (end(F)) - множество вершин вовне F, в которые входит хоть одна дуга из F

Схематически соотношения между фрагментом и этими его множествами вершин показаны на слайде.

Фрагменты графа потока управления являются абстракциями конструкций управления языков программирования. Известно, что практически все языки программирования определяют сходный набор конструкций управления. Следовательно, перейдя от анализа конкретных конструкций к их обобщениям, можно разработать способы анализа свойств программ независимо от входных языков.

Далее мы рассмотрим некоторые виды фрагментов.

Альт


Альтом называется фрагмент, имеющий одну начальную вершину. Пример альтов показан на рисунке на слайде (дуги, принадлежащие альтам, выделены жирными линиями).

Легко могут быть доказаны следующие простейшие свойства альтов:

  • весь граф является альтом
  • произвольная вершина графа является альтом
  • начальная вершина альта обязательно предшествует любой его вершине
  • если пересечение двух альтов не пусто, то один из них содержит начальную вершину другого и их объединение также есть альт.

Выделение максимального альта


Приведем алгоритм выделения максимального альта, для которого данная вершина p является начальной.

Алгоритм состоит из трех шагов:

  • вначале все вершины графа помечаются как "черные"
  • затем все вершины, достижимые из p, помечаются как "серые"
  • если среди серых вершин найдется вершина v , которая отлична от p и имеет хотя бы одно входящее ребро, ведущее из "черной" вершины, то эта вершина красится в "черный" цвет.

Можно показать, что в конце работы алгоритма множество "серых" вершин и будет максимальным альтом, начинающимся в вершине p .

Пример работы алгоритма показан на слайде. Крайний левый граф - это граф после первого шага. Средний рисунок изображает граф после того, как все вершины, достижимые из p , покрашены в "серый" цвет. Здесь же стрелочкой обозначена вершина, имеющая своим предком "черную" вершину. Окончательный альт показан на крайнем правом рисунке.