Теория к заданиям
Версия от 17:44, 23 марта 2018; Admin (обсуждение | вклад)
Множества Gen и Kill
В лекциях определения этих множеств даются в рамках темы Достигающих определений (Тема №2. Построение множеств Input и Output).
- gen – множество определений, порождаемых инструкцией
- kill – множество определений, убиваемых инструкцией
Примечание от нерадивых студентов.
Попробуем сформулировать проще. Предположим в блоке Блок1
определена переменная с именем Переменная1
. Определим в качестве пары (Переменная1
, Блок1
). Тогда:
- множество
Gen
для блока - это множество всех переменных, которые объявляются в этом блоке; - множество
Kill
для блокаБлок1
определяется с помощью множестваGen
следующим образом. Для каждой переменной блокаБлок1
(в нашем случае это будет толькоПеременная1
), сопоставляя её с множествомGen
для блокаБлок1
, проверяется наличие переменной с таким же именем в множествахGen
всех других блоков программы, и, в случае, если вхождение присутствует, переменная (в нашем случаеПеременная1
) входит в множествоKill
блокаБлок1
.
Достигающие определения
Из лекций:
- Определением переменной x называется инструкция, которая
присваивает значение переменной х
.
- Использованием переменной x является инструкция, одним из
операндов которой является переменная х
.
- Каждое новое определение переменной x убивает ее предыдущее
определение.
- Определение
d
достигает точкиp
, если существует путь от точки, непосредственно следующей заd
, к точкеp
, такой, что вдоль этого путиd
остается живым.
Пример. (Из лекций). B1 i ← –, m, 1 j ← n a ← u1
B2 i ← +, i, 1 j ← -, j, 1 a
B3 a ← u2
B4 i ← u3
Начало блока B2 достигается определениями:
- (i, B1), (j, B1), (a, B1),
- (j, B2) (других определений j на пути от (j, B2) до начала блока B2 нет)
- (a, B3)
- (i, B4)
(i, B2) не достигает начала B2, так как его убивает (i, B4) (j, B2) убивает (j, B1), не позволяя ему достичь блоков B3 и B4
Примечание от нерадивых студентов. Возможно, Вам поможет статья на Wikipedia.