3 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
通常,反射是程序分析某些代碼結(jié)構(gòu)的一種方式。此分析用于更改代碼的有效行為。
作為分析的反思通常非常薄弱;通常,它只能提供對(duì)函數(shù)和字段名稱的訪問。這種弱點(diǎn)來自于語(yǔ)言實(shí)現(xiàn)者基本上不希望在運(yùn)行時(shí)提供完整的源代碼,以及不希望從源代碼中提取所需內(nèi)容的適當(dāng)分析例程。
另一種方法是通過使用強(qiáng)大的程序分析工具來直接解決程序分析問題,例如,一種可以完全按照編譯器的方式分析源文本的工具。(通常人們建議濫用編譯器本身來執(zhí)行此操作,但這通常不起作用;編譯器機(jī)制希望成為編譯器,很難將其用于其他用途)。
需要一種工具,該工具:
解析語(yǔ)言源文本
構(gòu)建代表程序每個(gè)細(xì)節(jié)的抽象語(yǔ)法樹。(如果AST保留注釋和源代碼布局的其他詳細(xì)信息(例如列號(hào),文字基數(shù)值等),將很有幫助。)
建立符號(hào)表,顯示每個(gè)標(biāo)識(shí)符的范圍和含義
可以從功能中提取控制流
可以從代碼中提取數(shù)據(jù)流
可以為系統(tǒng)構(gòu)造一個(gè)調(diào)用圖
可以確定每個(gè)指針指向的內(nèi)容
利用上述事實(shí)來構(gòu)建自定義分析器
可以根據(jù)這種自定義分析來轉(zhuǎn)換代碼(通常通過修改代表已解析代碼的AST)
可以從修訂的AST重新生成源文本(包括布局和注釋)。
使用這樣的機(jī)制,可以在需要的任何細(xì)節(jié)級(jí)別上進(jìn)行分析,然后轉(zhuǎn)換代碼以實(shí)現(xiàn)運(yùn)行時(shí)反射將完成的效果。有幾個(gè)主要好處:
詳細(xì)程度或分析量是一個(gè)雄心壯志(例如,它不受運(yùn)行時(shí)反射只能做什么的限制)
沒有任何運(yùn)行時(shí)開銷來實(shí)現(xiàn)行為的反映變化
涉及的機(jī)制可以是通用的,可以跨多種語(yǔ)言應(yīng)用,而不僅限于特定語(yǔ)言實(shí)現(xiàn)所提供的機(jī)制。
這與C / C ++想法兼容,即您無需為不使用的東西付費(fèi)。如果不需要反射,則不需要這種機(jī)器。而且您的語(yǔ)言不需要內(nèi)置弱反射的智力包。
請(qǐng)參閱我們的DMS軟件再造工具包,以了解可以針對(duì)C,Java和COBOL進(jìn)行上述所有操作的系統(tǒng),以及大多數(shù)針對(duì)C ++的系統(tǒng)。
- 3 回答
- 0 關(guān)注
- 930 瀏覽
添加回答
舉報(bào)