2012-11-15 90 views
2

這個問題是asked earlier但答案是非常通用的。我很想知道什麼上下文意味着在靜態代碼分析的上下文中,具體來說與Java和當與術語上下文(在)敏感分析結合使用。「上下文」在上下文敏感分析中究竟意味着什麼?

例如this paper在本上下文中廣泛使用「上下文」。事實上,我還沒有找到一個體面的上下文定義。

+0

我不確定它有一個明確的含義。上下文敏感的靜態分析可以考慮當前分析的函數的調用發生(或調用堆棧的一些抽象)。 –

+1

「上下文」的含義本身高度依賴於上下文。例如,可以在[數據流分析的維基百科條目](http://en.wikipedia.org/wiki/Data-flow_analysis)上找到一個相似的含義。 –

回答

7

您鏈接的問題中的「上下文」一詞似乎並未用於描述靜態分析,因此您的確是另一個問題。我不認爲問題的答案是「通用的」。但他們絕對不是你正在尋找的具體答案。

A context-sensitive analysis是在分析函數調用的目標時考慮調用上下文的過程間分析。

這裏是一個上下文敏感的分析可能是如何工作的一個例子:

int a,b; 

int *x; 

void f(void) 
{ 
    ++*x; 
} 

int main(){ 
    x = &a; 
    f(); 

    x = &b; 
    f(); 
} 

這不是Java,但是你的問題主要是關於上下文敏感的數據流分析,所以我希望它不會太令人不安。

上下文敏感分析器在此程序中分析f()(至少)兩次,因爲它是從呼叫站點調用的。這使得它很精確,因爲f()的效果每次都有很大的不同。上下文敏感分析可以推斷a==1b在第一次調用後沒有變化,並且在第二次調用之後ab都是1。情境敏感性也會使分析變得昂貴。

一個上下文敏感的分析只分析f()一次,通常只生產排序的信息「f()修改ab,從而f()任何呼叫後,這兩個變量的內容未知」。

+0

簡單而直接的+1 – berkay

相關問題