我正在嘗試爲C構建一個抽象解釋器。可能不是整個語法,而只是它的一個子集。我以前曾問過要使用哪種語言。在我進一步討論之前,我想知道這個抽象解釋是如何工作的?抽象翻譯器如何工作?
我已經通過維基鏈接和講義註釋鏈接。我已經理解了它的理論基礎和理論。我已經分析了我的分析結果。我完全無法理解的部分是如何解釋代碼。也就是說,我有最初的代碼。我現在已經預處理了。我還對我的分析所需的代碼進行了一些標準化。現在,當我繼續執行代碼時,如何逐行執行代碼並提取數據? (請告訴我,如果這是不可能的,或者有一些方法來正確執行程序,這將實現我的目標)。我正在收集信息,如動態分配空間的內存地址,函數調用的返回地址。
我之前被推薦過CIL,CIL主要是一個轉換工具,將代碼轉換爲一些規範化的形式來處理許多異常,但我無法獲得任何有關我的問題的信息。
我的問題是如何逐行提取信息,哪種語言更適合?命令式語言還是功能性語言?關於這方面的信息,我一直在谷歌搜索了幾天,但沒用。任何鏈接也非常感謝。謝謝。
編輯:我仍然有一些疑惑。我得到了我們嘗試構建虛擬環境的部分。讓我解釋一下我正在嘗試做什麼,以便它有助於討論。我基本上試圖做指針分析,主要集中在指針算術上。現在假設我有一個整數指針,我做了一個指針算術,然後我不能確定指針是否仍然指向一個有效的數據。
從你的意思,我知道我們需要爲變量分配空間,但值是什麼。如果我有類似下面
int a=10;
int *p = &a;
p = p+4;
這裏的值和常量「4」是已知的。如果我從用戶或文件中獲得價值,該怎麼辦?在這種情況下,我需要執行實際的程序。同時,我需要捕獲像地址這樣的數據。下面,
int *p =(int *) malloc (sizeof(int));
*p= 15;
cout<<*p;
p = p+ino//some user input value;
cout<<*p;
所以基本上代碼必須被執行,但該溶液的後面部分就更像解析C文件。如果我錯了,請糾正我。
當你說「抽象解釋」時,你的意思是程序分析技術,你試圖建立一個程序可以做什麼的模型,或者是一種執行C代碼的方式,而不需要將它編譯成機器代碼?在前一種情況下,你想要進行哪些分析?在後一種情況下,你能否詳細說明是什麼讓你失望? – templatetypedef 2011-01-29 07:56:14