Проблема определения определений является одной из наиболее фундаментальных проблем анализа потоков данных.Учитывая график потока управления, который содержит определения и использования переменных, проблема приводит к вычислению того, какие определения переменных могут достигать определенного использования.
Например, рассмотрим график потока:
____________
1:| x <- ... |
------------
| \
| __________
| 2:| x <- ... |
| -----------
| /
____________
3:| ... <- x |
------------
Использованиепеременной x в блоке 3 можно получить либо из определений в блоке 1, либо из блока 2.
Алгоритм вычисления того, какие определения могут использовать, является классической проблемой потока данных.Используя нотацию из сборника драконов (новая редакция), проблема с потоком данных для определения определений выглядит следующим образом:
Область: наборы определений (например, {x <- .., ...})Направление: впередПередаточная функция: fb (x) = gen (B) U (x - kill (B)), где gen (B) - набор определений, которые генерирует блок B, и уничтожают (B) набор определений, которые убивает блок BГраница: OUT [ENTRY] = {} т.е. нет потока определений для входа в функциюОператор Meet: U (union), то есть определения, которые передаются в блок, представляют собой объединение определений из предшествующих блоков.Уравнения: OUT [B] = fb (IN [B]), IN [B] = U (P в пред.) OUT [P]Initialize: OUT [B] = {} </p>
Однако, не все определения одинаковы.Например, определение в блоке 1 может никогда не достичь использования в блоке 3, поскольку оно может быть уничтожено определением в блоке 2. С другой стороны, определение в блоке 2, если оно выполнится, сохранит свое значение до его использования в блоке.3.
Я хочу найти исчерпывающие определения использования, для которого нет определений убийства ни на одном пути от определения до использования.Мой вопрос заключается в том, существует ли подобная проблема с потоком данных (возможно, распространение и т. Д.).Как это можно решить с точки зрения анализа потока данных.
У меня есть одно возможное решение проблемы, но я бы не хотел изобретать велосипед, если решение уже существует.