[發明專利]代碼索引生成方法、裝置、設備及計算機存儲介質在審
| 申請號: | 202210724301.3 | 申請日: | 2022-06-23 |
| 公開(公告)號: | CN115114287A | 公開(公告)日: | 2022-09-27 |
| 發明(設計)人: | 魏昭;許勇;畢彰謙;萬瑤 | 申請(專利權)人: | 深圳市騰訊計算機系統有限公司;華中科技大學 |
| 主分類號: | G06F16/22 | 分類號: | G06F16/22;G06F16/23;G06F8/41 |
| 代理公司: | 北京同達信恒知識產權代理有限公司 11291 | 代理人: | 朱佳 |
| 地址: | 518000 廣東省深圳市南*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 代碼 索引 生成 方法 裝置 設備 計算機 存儲 介質 | ||
本申請公開了一種代碼索引生成方法、裝置、設備及計算機存儲介質,涉及代碼管理技術領域,針對企業海量倉庫等編譯環境情況復雜等場景,提出了一種結合編譯器前端技術與輕量級語義符號增強分析機制的全量精準代碼導航索引生成方法,在該方法中,通過對源代碼進行語法分析和語義分析,構建定義、引用關系圖,并對標識符分析出錯的文件進行符號增強分析,以更新之前生成的定義、引用關系圖,來獲得目標項目更為完整的代碼索引,有效的解決了編譯型語言在編譯錯誤情況下無法生成代碼導航索引的技術問題,提升了生成的代碼導航索引的召回率。
技術領域
本申請涉及計算機技術領域,尤其涉及代碼管理技術領域,提供一種代碼索引生成方法、裝置、設備及計算機存儲介質。
背景技術
代碼倉庫針對其支持的語言提供了相應的代碼查詢功能,例如:定義、引用關系查詢、變量聲明跳轉、函數聲明跳轉以及類聲明跳轉等,這些功能依賴于代碼的導航索引(index)來實現,導航索引是指代碼中可以被索引的對象的元數據,因此,準確的生成代碼索引是實現這些功能的前提。
在相關技術中,導航索引的生成通常是調用相應語言的編譯器的前端分析技術對源代碼進行語法分析和語義分析,得到定義、引用關系,然后采用圖的方式構建出整個項目的定義、引用關系圖,例如Java語言(一種面向對象的編程語言)調用Java編譯器(Javacompiler)應用程序編程接口(Application Programming Interface,API)進行分析,C語言或者C++語言調用clang(一種用于C語言、C++、Objective-C語言等的輕量級編譯器)進行分析。
但是,上述方法均采用了基于底層的編譯器獲取代碼的定義、引用關系,但在海量代碼倉庫場景中,代碼的編譯環境情況復雜,無法實現大量編譯環境的模擬,從而調用底層編譯器的方式受到很多限制,例如:三方依賴找不到、條件編譯中符號找不到會導致宏沒展開產生定義獲取不全,clang中的函數與GCC函數(GCC為GNU Compiler Collection,由GNU開發的編程語言編譯器)不兼容等問題,以上問題均會導致標識符解析出錯,無法獲取到一些代碼的定義、引用關系,以導致代碼倉庫的導航索引無法建立,或者,即使能夠建立代碼索引,但出錯的大量標識符由于無法解析,無法建立代碼索引,使得建立得到的代碼索引也是不完整的。
發明內容
本申請實施例提供一種代碼索引生成方法、裝置、設備及計算機存儲介質,用于解決編譯型語言在編譯錯誤情況下導航索引無法生成或者生成不全的技術問題。
一方面,提供一種代碼索引生成方法,所述方法包括:
基于目標項目的源代碼的語法分析結果和語義分析結果,生成所述目標項目對應的定義引用關系圖,所述定義引用關系圖用于指示:各符號定義對應的第一引用集合,每個第一引用集合包括一個符號定義對應的被引用標識符;
確定所述目標項目中標識符解析出錯的至少一個代碼文件,并對所述至少一個代碼文件各自對應的抽象語法樹進行定義引用關系分析,獲得多個引用關系對,每個引用關系對包含:每個標識符引用節點中被引用標識符與相應的符號定義之間的跳轉鏈接信息;
基于所述多個引用關系對,對所述定義引用關系圖進行更新,并基于更新后的定義引用關系圖,獲得所述目標項目對應的代碼索引。
一方面,提供一種代碼索引生成裝置,所述裝置包括:
關系圖生成單元,用于基于目標項目的源代碼的語法分析結果和語義分析結果,生成所述目標項目對應的定義引用關系圖,所述定義引用關系圖用于指示:各符號定義對應的第一引用集合,每個第一引用集合包括一個符號定義對應的被引用標識符;
增強分析單元,用于確定所述目標項目中標識符解析出錯的至少一個代碼文件,并對所述至少一個代碼文件各自對應的抽象語法樹進行定義引用關系分析,獲得多個引用關系對,每個引用關系對包含:每個標識符引用節點中被引用標識符與相應的符號定義之間的跳轉鏈接信息;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于深圳市騰訊計算機系統有限公司;華中科技大學,未經深圳市騰訊計算機系統有限公司;華中科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210724301.3/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種智能化自動抹灰機
- 下一篇:一種可主動驅動變形的薄膜式柔性壓力傳感器





