System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請涉及計算機,具體而言,涉及一種源代碼到接口描述語言的轉換方法及裝置。
技術介紹
1、接口描述語言(interface?description?language,idl),是一種用來描述軟件組件接口的計算機語言,idl通過一種獨立于編程語言的方式來描述接口,使得在不同平臺上運行的對象和用不同語言編寫的程序可以相互通信交流。通常情況下,基于idl描述語言的代碼是用戶手動編寫完成的。
2、在不同的系統平臺或者技術棧平臺上,針對實際程序應用的單元組件功能,程序員在編碼或者平臺遷移時可能基于不同的編程語言,為了實現不同的編程語言的自動化生成與動態切換,往往會采用代碼生成器,通過解析idl描述語言來自動生成相應編程語言的代碼。
3、然而,在實際項目中,基于現有代碼反方向解讀或抽象idl輸入的工作也是非常常見的。比如在歷史軟件開發過程中沒有采用idl的方式去抽象定義軟件代碼,也沒有使用代碼引擎自動化生成多平臺適用的編程語言代碼,此時如果需要對開發過程規范方法論,或者切換新的技術棧和多平臺編程語言支持,那么針對新的項目需求,就需要研究如何將項目舊有代碼反向抽象為idl描述語言方式。針對此項反向工作,如果人工做抽象轉換工作,工作量將會很大,效率非常低,而且難以避免引入人工錯誤。
4、針對上述的問題,目前尚未提出有效的解決方案。
技術實現思路
1、本申請實施例提供了一種源代碼到接口描述語言的轉換方法及裝置,以至少解決人工將源代碼逆向轉換為接口描述語言效率較低、
2、根據本申請實施例的一個方面,提供了一種源代碼到接口描述語言的轉換方法,包括:獲取待轉換的源代碼;對源代碼進行語法樹解析,得到第一json模型;對第一json模型進行模型重構,得到第二json模型,其中,模型重構至少包括:將第一json模型中的匿名數據結構轉換為有名稱數據結構;利用模板引擎將第二json模型轉換為接口描述語言。
3、可選地,對源代碼進行語法樹解析,得到第一json模型,包括:調用目標編譯器對源代碼進行語法樹解析,得到第一json模型,其中,目標編譯器包括:clang編譯器,第一json模型中包括與源代碼定義的數據類型對應的多種數據結構,多種數據結構包括以下至少之一:數據類、數據名稱、數據包、數據元素、數據類別。
4、可選地,對第一json模型進行模型重構,包括:遍歷第一json模型中的各個數據結構,對于每個數據結構,遍歷數據結構中的各個數據元素,若存在數據類是匿名的數據類型,確定數據結構為匿名數據結構;確定數據類型的目標名稱,并依據目標名稱生成目標數據結構;利用目標數據結構替換匿名數據結構。
5、可選地,確定數據類型的目標名稱,包括:依據數據類型在第一json模型中的上下文信息,確定與數據類型對應的全局唯一的目標名稱。
6、可選地,依據先聲明后使用原則,對第二json模型中所有用于替換匿名數據結構的目標數據結構進行重新排序。
7、可選地,利用模板引擎將第二json模型轉換為接口描述語言,包括:將第二json模型輸入目標模板引擎,得到目標模板引擎輸出的接口描述語言,其中,目標模板引擎包括:mako模板引擎。
8、可選地,源代碼的類型為c++源代碼。
9、根據本申請實施例的另一方面,還提供了一種源代碼到接口描述語言的轉換裝置,包括:獲取模塊,用于獲取待轉換的源代碼;解析模塊,用于對源代碼進行語法樹解析,得到第一json模型;重構模塊,用于對第一json模型進行模型重構,得到第二json模型,其中,模型重構至少包括:將第一json模型中的匿名數據結構轉換為有名稱數據結構;轉換模塊,用于利用模板引擎將第二json模型轉換為接口描述語言。
10、根據本申請實施例的另一方面,還提供了一種非易失性存儲介質,該非易失性存儲介質包括存儲的計算機程序,其中,非易失性存儲介質所在設備通過運行該計算機程序執行上述的源代碼到接口描述語言的轉換方法。
11、根據本申請實施例的另一方面,還提供了一種電子設備,該電子設備包括:存儲器和處理器,其中,存儲器中存儲有計算機程序,處理器被配置為通過計算機程序執行上述的源代碼到接口描述語言的轉換方法。
12、在本申請實施例中,首先獲取待轉換的源代碼;然后對源代碼進行語法樹解析,得到第一json模型;再對第一json模型進行模型重構,得到第二json模型,其中,模型重構至少包括:將第一json模型中的匿名數據結構轉換為有名稱數據結構;最后利用模板引擎將第二json模型轉換為接口描述語言。本方案完全實現了從源代碼到接口描述語言的自動化轉換過程,并且通過中間json模型作為橋梁,還能夠實現對源代碼數據類型進行重構操作,提高轉換結果的準確率,相比于目前的手工編寫接口描述語言,質量和效率均大幅提高,即本方案有效解決了人工將源代碼逆向轉換為接口描述語言效率較低、準確性較差的技術問題。
本文檔來自技高網...【技術保護點】
1.一種源代碼到接口描述語言的轉換方法,其特征在于,包括:
2.根據權利要求1所述的方法,其特征在于,對所述源代碼進行語法樹解析,得到第一JSON模型,包括:
3.根據權利要求1所述的方法,其特征在于,對所述第一JSON模型進行模型重構,包括:
4.根據權利要求3所述的方法,其特征在于,確定所述數據類型的目標名稱,包括:
5.根據權利要求3所述的方法,其特征在于,所述方法還包括:
6.根據權利要求1所述的方法,其特征在于,利用模板引擎將所述第二JSON模型轉換為接口描述語言,包括:
7.根據權利要求1至6中任意一項所述的方法,其特征在于,所述源代碼的類型為C++源代碼。
8.一種源代碼到接口描述語言的轉換裝置,其特征在于,包括:
9.一種非易失性存儲介質,其特征在于,所述非易失性存儲介質包括存儲的計算機程序,其中,所述非易失性存儲介質所在設備通過運行所述計算機程序執行權利要求1至7中任意一項所述的源代碼到接口描述語言的轉換方法。
10.一種電子設備,其特征在于,包括:存儲器
...【技術特征摘要】
1.一種源代碼到接口描述語言的轉換方法,其特征在于,包括:
2.根據權利要求1所述的方法,其特征在于,對所述源代碼進行語法樹解析,得到第一json模型,包括:
3.根據權利要求1所述的方法,其特征在于,對所述第一json模型進行模型重構,包括:
4.根據權利要求3所述的方法,其特征在于,確定所述數據類型的目標名稱,包括:
5.根據權利要求3所述的方法,其特征在于,所述方法還包括:
6.根據權利要求1所述的方法,其特征在于,利用模板引擎將所述第二json模型轉換為接口描述語言,包括:
7.根據權利...
【專利技術屬性】
技術研發人員:單威強,董慶運,李東軍,
申請(專利權)人:蘇州摯途科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。