[發(fā)明專利]基于源代碼查詢的半自動(dòng)插樁方法無效
| 申請?zhí)枺?/td> | 201210532019.1 | 申請日: | 2012-12-11 |
| 公開(公告)號: | CN103049504A | 公開(公告)日: | 2013-04-17 |
| 發(fā)明(設(shè)計(jì))人: | 張?zhí)?/a>;何英;李宣東 | 申請(專利權(quán))人: | 南京大學(xué) |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 南京瑞弘專利商標(biāo)事務(wù)所(普通合伙) 32249 | 代理人: | 陳建和 |
| 地址: | 210093 江*** | 國省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 源代碼 查詢 半自動(dòng) 方法 | ||
1.基于源代碼查詢的半自動(dòng)插樁方法,其特征是采用如下步驟:
步驟10:打開一個(gè)被測源程序;
步驟11:通過在CppIns編輯器中輸入相應(yīng)的插樁命令;
步驟12:CppIns的工具解析并執(zhí)行插樁命令,得到所有符合條件的插樁點(diǎn)并生成對應(yīng)的插樁代碼;
步驟13:審查所有插樁點(diǎn)的定義:若發(fā)現(xiàn)帶有錯(cuò)誤的插樁點(diǎn),則進(jìn)入步驟14對其進(jìn)行修改;沒有發(fā)現(xiàn)帶有錯(cuò)誤的插樁點(diǎn),則直接進(jìn)入步驟15;
步驟14:修改插樁的定義至正確;
步驟15:將插樁代碼與原源文件合并生成新源文件;
在步驟11中,其中輸入相應(yīng)的CppIns插樁命令過程包括:
步驟30:打開CppIns命令編輯器;
步驟31:判斷是否需要對整個(gè)C++源文件工程或單個(gè)C++源文件進(jìn)行插樁,如果是,則跳轉(zhuǎn)到步驟32,如果不是,則跳轉(zhuǎn)到步驟35;
步驟32:按照CppIns命令語法規(guī)則給出目標(biāo)插樁點(diǎn)位置的CppIns命令描述;
步驟33:按照CppIns命令語法規(guī)則給出目標(biāo)插樁點(diǎn)插樁語句的模板描述;
步驟34:將步驟32和步驟33得到的命令描述和模板描述的字符串輸入到CppIns命令編輯器中;
步驟35:結(jié)束本次CppIns插樁命令;
在步驟12中,運(yùn)行相應(yīng)的CppIns插樁命令、得到所有的插樁點(diǎn)定義過程包括:
步驟40:從CppIns命令編輯器中獲得CppIns命令字符串,即查詢和插樁命令描述和插樁代碼模板描述的字符串;
步驟41:從已經(jīng)打開工程中的C++源代碼中生成相應(yīng)的代碼信息,這些代碼信息包括變量、語句、函數(shù)、類、表達(dá)式和運(yùn)算符信息;
步驟42:對步驟40中得到的CppIns查詢命令字符串進(jìn)行語法檢測和預(yù)處理得到檢索指令;
步驟43:按照檢索指令在步驟41中得到的代碼信息中進(jìn)行目標(biāo)元素檢索,得到相應(yīng)的目標(biāo)元素集合和相應(yīng)的輔助元素集合構(gòu)成的元素屬性值;
步驟44:將CppIns命令中插樁模板的參數(shù)替換成步驟43中的元素屬性值,得到相應(yīng)的插樁語句集合;
步驟45:從步驟43中得到插樁位置以及從步驟44中得到的插樁語句集合,生成相應(yīng)的插樁點(diǎn);
在步驟41中,從源代碼生成與CppIns命令字符串相應(yīng)的代碼信息的方式是:首先得到C++源代碼或源文件相應(yīng)的抽象語法樹,在將語法樹中的變量、語句、函數(shù)、類、表達(dá)式和運(yùn)算符信息依次從語法樹中抽取出來,形成表的數(shù)據(jù)結(jié)構(gòu);
步驟42中,其中檢測和預(yù)處理即檢查和檢索準(zhǔn)備工作的過程包括:
步驟601:匹配關(guān)鍵字find;
步驟602:匹配Target元素,并將其存放到對象target中;
步驟603:匹配關(guān)鍵satisfying;
步驟604:當(dāng)匹配關(guān)鍵字exist成功或者匹配關(guān)鍵字all成功,則跳轉(zhuǎn)步驟605,否則跳轉(zhuǎn)步驟608;
步驟605:構(gòu)造相應(yīng)的predicate;
步驟606:將predicate存放到list?predicates中;
步驟607:跳轉(zhuǎn)步驟604;
步驟608:匹配關(guān)鍵字where;
步驟609:當(dāng)掃描完整個(gè)字符串,則跳轉(zhuǎn)615;
步驟610:若匹配Att表達(dá)式成功,則生成AttrCondition對象,存放到attributionList隊(duì)列中,跳轉(zhuǎn)步驟609,否則跳轉(zhuǎn)步驟611;
步驟611:若匹配Rel表達(dá)式成功,則生成RelCondition對象,存放到relationshipList隊(duì)列中,跳轉(zhuǎn)步驟609,否則跳轉(zhuǎn)步驟612;
步驟612:,如果匹配運(yùn)算符成功,則生成Operator對象,存放到operatorList隊(duì)列中,跳轉(zhuǎn)步驟609,否則跳轉(zhuǎn)步驟613;
步驟613:返回出錯(cuò)狀態(tài);
步驟614:跳轉(zhuǎn)步驟609;
步驟615:返回查詢命令結(jié)構(gòu);
步驟43中,其中檢索過程包括:
步驟701:由語法檢查及檢索準(zhǔn)備工作即上述步驟42得到的查詢命令結(jié)構(gòu),根據(jù)邏輯運(yùn)算的優(yōu)先級構(gòu)造出匹配條件的二叉樹;
步驟702:如果節(jié)點(diǎn)是&&、||或!則跳轉(zhuǎn)步驟703,否則跳轉(zhuǎn)步驟706;
步驟703:如果節(jié)點(diǎn)是&&,則匹配結(jié)果result為該節(jié)點(diǎn)的左子樹返回值并上右子樹返回值,跳轉(zhuǎn)步驟707;
步驟704:如果節(jié)點(diǎn)是||,則匹配結(jié)果result為該節(jié)點(diǎn)的左子樹返回值及右子樹返回值取或運(yùn)算,跳轉(zhuǎn)步驟707;
步驟705:如果節(jié)點(diǎn)是!,則匹配結(jié)果result為該節(jié)點(diǎn)的右子樹返回值取非運(yùn)算,跳轉(zhuǎn)步驟707;
步驟706:如果節(jié)點(diǎn)是原子條件表達(dá)式,則匹配結(jié)果result為該條件的真假,跳轉(zhuǎn)步驟707;
步驟707:返回result值,若result為真,則匹配,反之,不匹配。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于南京大學(xué),未經(jīng)南京大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210532019.1/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F17-00 特別適用于特定功能的數(shù)字計(jì)算設(shè)備或數(shù)據(jù)處理設(shè)備或數(shù)據(jù)處理方法
G06F17-10 .復(fù)雜數(shù)學(xué)運(yùn)算的
G06F17-20 .處理自然語言數(shù)據(jù)的
G06F17-30 .信息檢索;及其數(shù)據(jù)庫結(jié)構(gòu)
G06F17-40 .數(shù)據(jù)的獲取和記錄
G06F17-50 .計(jì)算機(jī)輔助設(shè)計(jì)
- 帶有前處理和后處理的數(shù)據(jù)庫復(fù)合查詢系統(tǒng)及方法
- 數(shù)據(jù)庫查詢的方法和系統(tǒng)
- 查詢系統(tǒng)、查詢終端以及查詢方法
- 交易信息查詢方法、查詢裝置及查詢系統(tǒng)
- 數(shù)據(jù)查詢與結(jié)果生成方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 在RDF數(shù)據(jù)集上進(jìn)行OPTIONAL查詢的方法及存儲(chǔ)介質(zhì)
- 一種多表關(guān)聯(lián)查詢方法、裝置及設(shè)備
- 一種基于Impala的查詢方法和裝置
- 從查詢生成子查詢
- 一種基于通用查詢語言的查詢方法及查詢系統(tǒng)





