[發明專利]一種C++程序編譯方法和裝置有效
| 申請號: | 201811569117.6 | 申請日: | 2018-12-21 |
| 公開(公告)號: | CN109614106B | 公開(公告)日: | 2022-04-19 |
| 發明(設計)人: | 郭凱 | 申請(專利權)人: | 北京龍創悅動網絡科技有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41 |
| 代理公司: | 北京鼎真知識產權代理事務所(普通合伙) 11815 | 代理人: | 洪波 |
| 地址: | 100088 北京市*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 c++ 程序 編譯 方法 裝置 | ||
1.一種C++程序編譯方法,其特征在于,所述方法包括如下步驟:
獲取多個cpp文件;
對所述多個cpp文件進行合并算法處理,生成待編譯的目標cpp文件;所述合并算法處理包括如下步驟:采用include偽指令調用所述cpp文件;將調用的所述cpp文件添加至預先設置的cpp文件,生成待編譯的目標cpp文件;
對所述目標cpp文件進行編譯;
對所述cpp文件進行合并算法處理,生成待編譯的目標cpp文件之前,包括如下步驟:
將每個所述cpp文件生成抽象語法樹;判斷所述抽象語法樹之間是否包括相同的內部變量和/或函數,具體包括:獲取抽象語法樹的節點信息,所述節點信息包括:節點類型,節點鏈接類型,節點的名字,節點位置信息,節點所在的文件cpp文件名、行號及列號;遍歷所述節點信息并判斷其是否滿足預設的判斷條件;若滿足預設的判斷條件,則判定所述抽象語法樹之間包括相同的內部變量和/或函數;若所述抽象語法樹之間不包括相同的內部變量和/或函數,則對所述多個cpp文件進行合并算法處理,生成待編譯的目標cpp文件;其中,判斷節點信息是否滿足預設的判斷條件,包括:判斷節點是否為內部變量或者內部函數;若是,根據所述節點信息確定所述節點的鍵值對,判斷所述鍵值對的子鍵的數量是否滿足大于1;其中,鍵值對以節點的名字為鍵,以節點的cpp文件名為子鍵,值為行號和列號。
2.根據權利要求1所述的方法,其特征在于,所述方法還包括,
若所述抽象語法樹之間包括相同的內部變量和/或函數,則生成錯誤信息;
對所述錯誤信息進行修改;
其中,所述錯誤信息包括具有相同內部變量和/或函數的抽象對象樹所對應的文件的文件名、內部變量名和/或函數名、所述內部變量名和/或函數名所在文件的行數。
3.一種C++程序編譯裝置,其特征在于,該裝置包括,
獲取模塊,用于獲取多個cpp文件;
合并算法處理模塊,用于對獲取的所述多個cpp文件進行合并算法處理,并生成待編譯的目標cpp文件;
編譯模塊,用于對所述目標cpp文件進行編譯;
所述合并算法處理模塊還包括:
抽象語法樹生成模塊,用于對每個cpp文件生成抽象語法樹;
判斷模塊,用于判斷所述抽象語法樹之間是否包括相同的內部變量和/或函數;
所述判斷模塊還包括,
節點信息獲取模塊,用于獲取所述抽象語法樹中的節點信息;所述節點信息包括:節點類型,節點鏈接類型,節點的名字,節點位置信息,節點所在的文件cpp文件名、行號及列號;
節點信息判斷模塊,用于遍歷所述節點信息并判斷其是否滿足預設的判斷條件;若滿足預設的判斷條件,則判定所述抽象語法樹之間包括相同的內部變量和/或函數;若所述抽象語法樹之間不包括相同的內部變量和/或函數,則對所述多個cpp文件進行合并算法處理,生成待編譯的目標cpp文件;其中,判斷節點信息是否滿足預設的判斷條件,包括:判斷節點是否為內部變量或者內部函數;若是,根據所述節點信息確定所述節點的鍵值對,判斷所述鍵值對的子鍵的數量是否滿足大于1;其中,鍵值對以節點的名字為鍵,以節點的cpp文件名為子鍵,值為行號和列號;
所述合并算法處理模塊還包括,
include偽指令調用模塊,用于調用獲取的所述cpp文件;
cpp文件添加模塊,用于將所述cpp文件添加至預先設置的cpp文件,生成待編譯的目標cpp文件。
4.根據權利要求3所述的裝置,其特征在于,所述合并算法處理模塊還包括:
錯誤信息生成,用于在判斷出所述抽象語法樹之間包括相同的內部變量和/或函數時,生成錯誤信息;
錯誤修改模塊,用于對所述錯誤信息進行修改,并生成新的抽象語法樹。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京龍創悅動網絡科技有限公司,未經北京龍創悅動網絡科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811569117.6/1.html,轉載請聲明來源鉆瓜專利網。





