達到定義的問題是數據流分析中最根本的問題之一。給定一個包含變量定義和用途的控制流程圖,問題導致計算出哪些變量定義可能達到特定用途。達到定義數據流問題的特殊情況
例如,考慮流圖:
____________
1:| x <- ... |
------------
| \
| __________
| 2:| x <- ... |
| -----------
| /
____________
3:| ... <- x |
------------
在塊3的用途變量x可從任一定義在塊1或到達方框2.
該算法用於計算其定義可以達到使用是經典的數據流問題。使用從龍書編譯的符號(新版)的到達定義數據流的問題如下:
域:定義設置(例如{X < - ...,...})
方向:正向傳遞函數:fb(x)= gen(B)U(x-kill(B))其中gen(B)是塊B生成和殺死的定義的集合(B)阻止B殺死的定義的集合
邊界:OUT [ENTRY] = {}即沒有定義流程用於輸入函數
符合運算符:U(聯合),即流入塊的定義是定義中的前一個塊的聯合。
方程:OUT [B] = FB(IN [B]),IN [B] = U(在PRED P)OUT [P]
初始化:OUT [B] = {}
然而,並非所有的定義都是一樣的。例如,塊1中的定義可能永遠達不到塊3中的使用,因爲它可能被塊2中的定義所殺死。另一方面,塊2中的定義(如果被執行的話)將保留其值直到其在塊中的使用3.
我想找到在定義和使用情況的任何路徑上沒有查殺定義的用法的擴展定義。我的問題是是否存在類似的數據流問題(可能是傳播等)。在數據流分析方面如何解決它。
我確實有一個可能的解決方案,但如果解決方案已經存在,我不想重新發明輪子。
你的意思是這樣的「保證到達定義」?因爲有些情況下,塊3可能會直接跟隨塊1(根據您的圖)。 – Jus12 2014-03-21 05:52:36