[發明專利]一種基于AST的Java代碼SSA單路徑的生成方法有效
| 申請號: | 201611233521.7 | 申請日: | 2016-12-28 |
| 公開(公告)號: | CN106649118B | 公開(公告)日: | 2019-02-19 |
| 發明(設計)人: | 張天;姜人和;潘敏學;陳鑫;吳少博 | 申請(專利權)人: | 南京大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 南京知識律師事務所 32207 | 代理人: | 張蘇沛 |
| 地址: | 210093 江*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 ast java 代碼 ssa 路徑 生成 方法 | ||
1.一種基于AST的Java代碼SSA單路徑的生成方法,其特征在于,包括如下步驟:
步驟10:輸入存放.java文件的src目錄的路徑;
步驟11:使用ASTParser獲得Java代碼的AST;
步驟12:使用ASTVisitor處理所有的MethodDeclaration,將每一個方法都拆分成若干條單路徑代碼;具體步驟包括:
步驟12-20:獲得MethodDeclaration的Body語句塊Block;
步驟12-21:依次處理Block中的每一條Statement,將條件分支語句IfStatement,WhileStatement,ForStatement拆分成一組平行的分支;
步驟12-22:在不同組的平行分支各選一條分支進行組合,得到一條單路徑;
步驟12-23:窮舉所有的分支間的組合情況,得到所有的單路徑;
步驟13:使用JDT AST修改單路徑代碼的AST,將單路徑轉化為SSA的格式;
步驟14:將SSA格式的單路徑封裝成符合Java語法規范的Java類,存放在path目錄下,作為輸出。
2.根據權利要求1所述的基于AST的Java代碼SSA單路徑的生成方法,其特征在于:所述步驟10所輸入的Java工程源代碼具有如下的目錄結構:
TestCase類的包名為testcase,有test和test2兩個方法,經過步驟14之后,最終的輸出結果如下,其中每一個類中均包含若干條path_no方法,其參數和返回值均與路徑所在方法相同,no為路徑編號:
3.根據權利要求1所述的基于AST的Java代碼SSA單路徑的生成方法,其特征在于:所述步驟12-21涉及到對Block的遞歸處理,最終得到相應的中間結構,中間結構采用多叉樹表示程序的控制流,便于進行路徑抽取。
4.根據權利要求1所述的基于AST的Java代碼SSA單路徑的生成方法,其特征在于:所述步驟12-22能夠對中間結構的不同層級的兄弟節點進行排列組合,得到其中的一條單路徑。
5.根據權利要求1所述的基于AST的Java代碼SSA單路徑的生成方法,其特征在于:所述步驟13中,將單路徑轉化為SSA的格式的過程包括:
步驟30:使用ASTParser獲得單路徑代碼的AST;
步驟31:使用ASTVisitor遍歷AST,收集變量的聲明、引用和賦值;
步驟32:使用ASTRewrite刪掉AST所有關于變量聲明的ASTNode;
步驟33:每當變量被賦值,就為該變量賦予一個新的變量名,對應AST中的SimpleName節點,使之成為一個新變量,該次賦值之后到下一次賦值之前對變量的引用均用新的變量名替換,在程序的開頭添加新變量的聲明;
步驟34:將上述修改操作寫回到源代碼。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京大學,未經南京大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611233521.7/1.html,轉載請聲明來源鉆瓜專利網。





