本申請(qǐng)涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,更具體地說(shuō),涉及一種代碼生成方法及裝置。
背景技術(shù):
用戶根據(jù)業(yè)務(wù)流程的需要,可以編寫(xiě)出一些描述業(yè)務(wù)邏輯(如,業(yè)務(wù)執(zhí)行流程或業(yè)務(wù)控制流程)的業(yè)務(wù)邏輯語(yǔ)言,該類(lèi)業(yè)務(wù)邏輯語(yǔ)言一般是由用戶使用解釋性語(yǔ)言編寫(xiě)而成。為了將包含業(yè)務(wù)邏輯語(yǔ)言的文件資源轉(zhuǎn)換為計(jì)算機(jī)可執(zhí)行的可執(zhí)行文件,則需要先將業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換為計(jì)算機(jī)編程語(yǔ)言對(duì)應(yīng)的源代碼,如,c語(yǔ)言或c++語(yǔ)言的代碼。
目前,如果需要將用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換為計(jì)算機(jī)編程語(yǔ)言對(duì)應(yīng)的源代碼時(shí),需要用戶對(duì)c語(yǔ)言或c++語(yǔ)言非常了解,才能夠根據(jù)該業(yè)務(wù)邏輯語(yǔ)言,人工編寫(xiě)出相應(yīng)的源代碼,對(duì)開(kāi)發(fā)人員的技術(shù)要求較高,導(dǎo)致代碼開(kāi)發(fā)過(guò)程難度大,開(kāi)發(fā)效率低。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┝艘环N代碼生成方法及裝置,以實(shí)現(xiàn)基于業(yè)務(wù)邏輯語(yǔ)言,高效、便捷的生成代碼。
為了實(shí)現(xiàn)上述目的,現(xiàn)提出的方案如下:
一種代碼生成方法,包括:
獲取待轉(zhuǎn)換為代碼的目標(biāo)文件,所述目標(biāo)文件包括至少一段用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言;
對(duì)應(yīng)任意一段業(yè)務(wù)邏輯語(yǔ)言,對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成所述業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元,所述語(yǔ)言單元為注釋、采用計(jì)算機(jī)編程語(yǔ)言描述的初始源代碼段或者用于描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言;
如果所述語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將所述業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段,所述目標(biāo)源代碼段包括目標(biāo)代碼段和注釋中的一種或兩種;
將確定出的所述注釋、初始源代碼段以及所述目標(biāo)源代碼段進(jìn)行組合,得到所述業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合;
將所述至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件中,得到所述目標(biāo)文件轉(zhuǎn)換出源文件,所述源文件中包括所述至少一個(gè)源代碼集合。
可選的,所述對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析之前,還包括:
確定所述目標(biāo)文件的文件類(lèi)型;
根據(jù)所述目標(biāo)文件的文件類(lèi)型,加載與所述文件類(lèi)型對(duì)應(yīng)的解析引擎;
所述對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,包括:
利用所述解析引擎對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析。
可選的,在所述對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析之前,還包括:
檢測(cè)是否預(yù)置有與所述目標(biāo)文件的文件類(lèi)型對(duì)應(yīng)的配置信息,所述配置信息用于變更所述業(yè)務(wù)邏輯語(yǔ)言所轉(zhuǎn)換出的源文件中源代碼的組成形式;
如果存在所述配置信息,則向所述目標(biāo)文件的業(yè)務(wù)邏輯語(yǔ)言中加載所述配置信息。
可選的,所述對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成所述業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元,包括:
基于所述業(yè)務(wù)邏輯語(yǔ)言中所包含的指定標(biāo)簽標(biāo)志,將所述業(yè)務(wù)邏輯語(yǔ)言解析為由所述指定標(biāo)簽標(biāo)志分隔出的多個(gè)語(yǔ)言單元。
可選的,所述依據(jù)與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將所述業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段,包括:
依據(jù)預(yù)置的分支名稱與參數(shù)轉(zhuǎn)換規(guī)則的對(duì)應(yīng)關(guān)系,確定與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則;
將所述業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的代碼參數(shù);
將所述業(yè)務(wù)分支語(yǔ)言中的所述待轉(zhuǎn)換參數(shù)所關(guān)聯(lián)的數(shù)值設(shè)置為所述待轉(zhuǎn)換參數(shù)轉(zhuǎn)換出的代碼參數(shù)所關(guān)聯(lián)的數(shù)值。
可選的,還包括:
如果不存在與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則,則將所述業(yè)務(wù)分支語(yǔ)言標(biāo)記為注釋。
可選的,在所述得到所述目標(biāo)文件轉(zhuǎn)換出源文件之后,還包括:
依據(jù)所述目標(biāo)文件的存儲(chǔ)路徑,確定編譯所述源文件的操作系統(tǒng);
在確定出的所述操作系統(tǒng)上編譯所述源文件,以得到可運(yùn)行的可執(zhí)行文件。
另一方面,本申請(qǐng)實(shí)施例還提供了一種代碼生成裝置,包括:
文件獲取單元,用于獲取待轉(zhuǎn)換為代碼的目標(biāo)文件,所述目標(biāo)文件包括至少一段用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言;
語(yǔ)言解析單元,用于對(duì)應(yīng)任意一段業(yè)務(wù)邏輯語(yǔ)言,對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成所述業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元,所述語(yǔ)言單元為注釋、采用計(jì)算機(jī)編程語(yǔ)言描述的初始源代碼段或者用于描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言;
分支轉(zhuǎn)換單元,用于如果所述語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將所述業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段,所述目標(biāo)源代碼段包括目標(biāo)代碼段和注釋中的一種或兩種;
代碼組合單元,用于將所述注釋、初始源代碼以及所述目標(biāo)源代碼段進(jìn)行組合,得到所述業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合;
源文件生成單元,用于將所述至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件中,得到所述目標(biāo)文件轉(zhuǎn)換出源文件,所述源文件中包括所述至少一個(gè)源代碼集合。
可選的,還包括:
類(lèi)型確定單元,用于在所述語(yǔ)言解析單元對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析之前,確定所述目標(biāo)文件的文件類(lèi)型;
解析引擎加載單元,用于根據(jù)所述目標(biāo)文件的文件類(lèi)型,加載與所述文件類(lèi)型對(duì)應(yīng)的解析引擎;
所述語(yǔ)言解析單元在對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析時(shí),具體用于利用所述解析引擎對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析。
可選的,分支轉(zhuǎn)換單元,包括:
規(guī)則確定單元,用于如果所述語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)預(yù)置的分支名稱與參數(shù)轉(zhuǎn)換規(guī)則的對(duì)應(yīng)關(guān)系,確定與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則;
參數(shù)轉(zhuǎn)換單元,用于將所述業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的代碼參數(shù);
數(shù)值關(guān)聯(lián)單元,用于將所述業(yè)務(wù)分支語(yǔ)言中的所述待轉(zhuǎn)換參數(shù)所關(guān)聯(lián)的數(shù)值設(shè)置為所述待轉(zhuǎn)換參數(shù)轉(zhuǎn)換出的代碼參數(shù)所關(guān)聯(lián)的數(shù)值。
注釋識(shí)別單元,用于如果不存在與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則,則將所述業(yè)務(wù)分支語(yǔ)言標(biāo)記為注釋。
由以上內(nèi)容可知,在本申請(qǐng)實(shí)施例中,獲取到待轉(zhuǎn)換為代碼的目標(biāo)文件之后,會(huì)依次對(duì)每段業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成該業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元,該語(yǔ)言單元為注釋、采用計(jì)算機(jī)編程語(yǔ)言描述的初始源代碼段或者用于描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言;如果語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,則會(huì)依據(jù)與業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將該業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段,這樣,通過(guò)將由該業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的注釋、初始源代碼以及目標(biāo)源代碼進(jìn)行組合,就可以得到該業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合,并將至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件,就可以得到源文件,從而實(shí)現(xiàn)了自動(dòng)將業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換為代碼,無(wú)需具有專(zhuān)業(yè)知識(shí)的人員手動(dòng)編寫(xiě)代碼,降低了生成代碼所需的技術(shù)要求,也降低了生成代碼的復(fù)雜度,提高了代碼生成效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請(qǐng)一種代碼生成方法一個(gè)實(shí)施例的流程示意圖;
圖2示出了本申請(qǐng)實(shí)施例中的業(yè)務(wù)邏輯語(yǔ)言的組成結(jié)構(gòu)示意圖;
圖3示出了本申請(qǐng)的代碼生成方法對(duì)目標(biāo)文件中的業(yè)務(wù)邏輯語(yǔ)言進(jìn)行循環(huán)處理的示意圖;
圖4示出了本申請(qǐng)一種代碼生成方法又一個(gè)實(shí)施例的流程示意圖;
圖5示出了本申請(qǐng)一種代碼生成裝置一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
首先對(duì)本申請(qǐng)的一種代碼生成方法進(jìn)行介紹。
參見(jiàn)圖1,其示出了本申請(qǐng)一種代碼生成方法又一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖,本實(shí)施例的方法可以應(yīng)用于計(jì)算機(jī)設(shè)備,如獨(dú)立的計(jì)算機(jī),或者是分布式系統(tǒng)中的服務(wù)器節(jié)點(diǎn)等等。
本實(shí)施例的方法可以包括:
s101,獲取待轉(zhuǎn)換為代碼的目標(biāo)文件,該目標(biāo)文件包括至少一段用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言。
其中,該目標(biāo)文件為用于轉(zhuǎn)換為計(jì)算機(jī)編程語(yǔ)言對(duì)應(yīng)的代碼的文件資源,其用于描述函數(shù)體需要處理的業(yè)務(wù)邏輯。該目標(biāo)文件中所包含的業(yè)務(wù)邏輯語(yǔ)言為描述業(yè)務(wù)邏輯的邏輯語(yǔ)言,如該目標(biāo)文件中包含描述業(yè)務(wù)執(zhí)行流程,業(yè)務(wù)執(zhí)行流程所所涉及的業(yè)務(wù)步驟、流程控制相關(guān)的信息。由于目標(biāo)文件中包含的業(yè)務(wù)邏輯語(yǔ)言并非是c或c++等代碼,因此,為了便于描述,在本申請(qǐng)實(shí)施例中也將業(yè)務(wù)邏輯語(yǔ)言稱為偽代碼。
在本申請(qǐng)實(shí)施例中該目標(biāo)文件的形式可以有多種,如該目標(biāo)文件可以為xml文件,txt文件或者是自定義的文件資源。作為一種優(yōu)選實(shí)施方式,本申請(qǐng)實(shí)施例中可以采用自定義文件資源,例如.atomfunc原子函數(shù)資源等。
可以理解的是,目標(biāo)文件可以存儲(chǔ)在目錄下,在實(shí)際應(yīng)用中一個(gè)目錄下可以包括多個(gè)待轉(zhuǎn)換為代碼的目標(biāo)文件,但是對(duì)于每一個(gè)目標(biāo)文件均可以采用本申請(qǐng)實(shí)施例的代碼生成方法來(lái)轉(zhuǎn)換代碼,
s102,對(duì)應(yīng)任意一段業(yè)務(wù)邏輯語(yǔ)言,對(duì)該業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成所述業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元。
其中,該語(yǔ)言單元為注釋、采用計(jì)算機(jī)編程語(yǔ)言描述的初始源代碼段或者用于描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言中的一種。
可以理解的是,對(duì)于一個(gè)業(yè)務(wù)邏輯而言,可能會(huì)需要多個(gè)業(yè)務(wù)流程或者步驟,因此,描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言可以由一個(gè)或多個(gè)描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言構(gòu)成。每個(gè)業(yè)務(wù)分支語(yǔ)言可以認(rèn)為是業(yè)務(wù)邏輯語(yǔ)言的基本單元,如果將業(yè)務(wù)邏輯語(yǔ)言認(rèn)為是偽代碼,那么業(yè)務(wù)分支語(yǔ)言就可以認(rèn)為是偽代碼中的宏。
在不同業(yè)務(wù)分支語(yǔ)言之間還可以添加有一些注釋?zhuān)⑨尶梢允怯糜谳o助解釋業(yè)務(wù)邏輯。如,注釋可以是按照c/c++語(yǔ)法描述的注釋信息,例如以“/****/”包括起來(lái)的多行偽代碼,或以“//”開(kāi)頭的單行偽代碼。
在業(yè)務(wù)分支語(yǔ)言或者注釋之間還可以有一行或多行代碼所組成的代碼段,其中,為了便于與后續(xù)從業(yè)務(wù)分支語(yǔ)言中轉(zhuǎn)換出的代碼段進(jìn)行區(qū)分,將業(yè)務(wù)邏輯語(yǔ)言中直接解析出的代碼段稱為初始源代碼段。
可以理解的是,由于初始源代碼段本身就是代碼,所以無(wú)需再進(jìn)一步進(jìn)行轉(zhuǎn)換,而業(yè)務(wù)邏輯語(yǔ)言中的注釋也可以直接用于解釋代碼的作用或含義,所以對(duì)于初始源代碼段和注釋可以無(wú)需進(jìn)行轉(zhuǎn)換,而直接確定為代碼并直接輸出,以便后續(xù)與業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換出的代碼進(jìn)行組合。
在一種實(shí)現(xiàn)方式中,業(yè)務(wù)邏輯語(yǔ)言可以通過(guò)特定的標(biāo)簽標(biāo)志將各個(gè)語(yǔ)言單元分隔出來(lái),因此,可以基于該業(yè)務(wù)邏輯語(yǔ)言中所包含的指定標(biāo)簽標(biāo)志,將該業(yè)務(wù)邏輯語(yǔ)言解析為由指定標(biāo)簽標(biāo)志分隔出的多個(gè)語(yǔ)言單元。其中。該指定標(biāo)簽標(biāo)志可以有一種或多種,如,注釋可以是以“/****/”包括起來(lái)的多行偽代碼,或以“//”開(kāi)頭的單行偽代碼,那么“/****/”內(nèi)的語(yǔ)言可以認(rèn)為是注釋?zhuān)欢鴺I(yè)務(wù)分支語(yǔ)言(即宏)可以以不同于注釋的特定標(biāo)簽標(biāo)示出來(lái),例如,可以采用但不局限于中括號(hào)“[]”的方式標(biāo)示出來(lái),這樣,一個(gè)中括號(hào)內(nèi)包括的偽代碼行就對(duì)應(yīng)著一套業(yè)務(wù)分支語(yǔ)言。
需要說(shuō)明的是,一段邏輯業(yè)務(wù)語(yǔ)言本身可能就是一個(gè)業(yè)務(wù)分支語(yǔ)言,在該種情況下,一段邏輯業(yè)務(wù)語(yǔ)言可以解析出一個(gè)業(yè)務(wù)分支語(yǔ)言。
s103,如果該語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)與該業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將該業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段。
其中,該目標(biāo)源代碼段包括目標(biāo)代碼段和注釋中的一種或兩種。
不同類(lèi)型的業(yè)務(wù)分支語(yǔ)言可以對(duì)應(yīng)有不同的轉(zhuǎn)換規(guī)則,基于業(yè)務(wù)分支語(yǔ)言所對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,可以將業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為代碼段。可以理解的是,一套業(yè)務(wù)分支語(yǔ)言內(nèi)同樣可以包括注釋或者代碼,對(duì)于業(yè)務(wù)分支語(yǔ)言內(nèi)的注釋或者代碼可以直接輸出,也就是說(shuō),對(duì)于業(yè)務(wù)分支語(yǔ)言內(nèi)的注釋或者代碼,轉(zhuǎn)換規(guī)則可以是直接輸出而不進(jìn)行轉(zhuǎn)換,而對(duì)于注釋和代碼之外的參數(shù)可以按照相應(yīng)的轉(zhuǎn)換規(guī)則轉(zhuǎn)換為代碼。
為了便于理解,本申請(qǐng)實(shí)施例中業(yè)務(wù)邏輯語(yǔ)言、業(yè)務(wù)分支語(yǔ)言以及注釋之間的組成關(guān)系可以參見(jiàn)圖2所示,在圖2中偽代碼表示業(yè)務(wù)邏輯語(yǔ)言,宏表示業(yè)務(wù)分支語(yǔ)言。由圖2可見(jiàn),偽代碼可以由宏、源碼(本申請(qǐng)實(shí)施例所提到的初始源代碼)以及注釋組成,而源碼可以是普通文本或者是字符串。宏可以包括用戶宏以系統(tǒng)宏。其中,用戶宏系統(tǒng)宏:由本方案內(nèi)置的用于資源解析、邏輯判斷、異常處理等代碼生成處理邏輯的封裝;用戶自定義:由使用本方案進(jìn)行自行定義的代碼生成處理邏輯封裝。
s104,將該注釋、初始源代碼以及該目標(biāo)源代碼段進(jìn)行組合,得到所述業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合。
其中,對(duì)得到的注釋、初始源代碼段以及目標(biāo)源代碼段進(jìn)行組合拼接時(shí),可以按照注釋、原始代碼,以及轉(zhuǎn)換出注釋或者目標(biāo)源代碼的業(yè)務(wù)分支語(yǔ)言在業(yè)務(wù)邏輯語(yǔ)言中的順序,依次對(duì)各個(gè)注釋、初始源代碼以及目標(biāo)源代碼段進(jìn)行拼接得到代碼。在本申請(qǐng)實(shí)施例中將拼接出的代碼稱為源代碼集合。
s105,將該至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件中,得到該目標(biāo)文件轉(zhuǎn)換出源文件。
其中,該源文件中包括至少一個(gè)源代碼集合。
本申請(qǐng)實(shí)施例的方案實(shí)現(xiàn)了自動(dòng)將業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換為代碼,無(wú)需具有專(zhuān)業(yè)知識(shí)的人員手動(dòng)編寫(xiě)代碼,降低了生成代碼所需的技術(shù)要求,也降低了生成代碼的復(fù)雜度,提高了代碼生成效率。
可以理解的是,在本申請(qǐng)實(shí)施例中,對(duì)于一段業(yè)務(wù)邏輯語(yǔ)言,在標(biāo)記出該業(yè)務(wù)邏輯語(yǔ)言中所包含的多個(gè)語(yǔ)言單元之后,仍需要分析每個(gè)語(yǔ)言單元是否已經(jīng)是源代碼等不需要進(jìn)行進(jìn)一步轉(zhuǎn)換的數(shù)據(jù),如果語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,則需要對(duì)語(yǔ)言單元進(jìn)行轉(zhuǎn)換,以最終得到源代碼或者注釋?zhuān)鐖D3,其示出了代碼生成方法對(duì)目標(biāo)文件中的業(yè)務(wù)邏輯語(yǔ)言進(jìn)行循環(huán)處理的一種示意圖。
結(jié)合圖3,參見(jiàn)圖4,其示出了本申請(qǐng)一種代碼生成方法又一個(gè)實(shí)施例的流程示意圖,本實(shí)施例的方法可以包括:
s401,獲取待轉(zhuǎn)換為代碼的目標(biāo)文件,該目標(biāo)文件包括至少一段用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言。
如圖3中,以目標(biāo)文件為用于生成c/c++源碼的文件資源為例,該資源被輸入到運(yùn)行本申請(qǐng)的代碼生成方法的設(shè)備中,以對(duì)資源進(jìn)行處理。
s402,確定該目標(biāo)文件的文件類(lèi)型。
其中,文件類(lèi)型用于區(qū)分目標(biāo)文件中的業(yè)務(wù)邏輯語(yǔ)言的類(lèi)型,如文件類(lèi)型可以為c/c++形式的文件。
s403,根據(jù)該目標(biāo)文件的文件類(lèi)型,加載與該文件類(lèi)型對(duì)應(yīng)的解析引擎。
s404,檢測(cè)是否預(yù)置有與所述目標(biāo)文件的文件類(lèi)型對(duì)應(yīng)的配置信息,所述配置信息用于變更所述業(yè)務(wù)邏輯語(yǔ)言所轉(zhuǎn)換出的源文件中源代碼的組成形式。
s405,如果存在該配置信息,則向所述目標(biāo)文件的業(yè)務(wù)邏輯語(yǔ)言中加載所述配置信息。
當(dāng)然,如果不存在該配置信息,則可以直接執(zhí)行后續(xù)操作。
如圖3中,以通過(guò)藍(lán)圖工廠擴(kuò)展點(diǎn)管理這一程序來(lái)完成步驟s402至s404的操作,并最終分析得到目標(biāo)文件的類(lèi)型,所需的解析引擎(如圖3中得到的藍(lán)圖工廠中的上下文),以及配置模型(如圖3中藍(lán)圖工廠中的模型),得到以上信息之后,可以觸發(fā)token迭代,以通過(guò)token迭代的方式標(biāo)記出該業(yè)務(wù)邏輯語(yǔ)言中所包含的各個(gè)語(yǔ)言單元。
s406,對(duì)應(yīng)任意一段業(yè)務(wù)邏輯語(yǔ)言,利用該解析引擎對(duì)業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成該業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元。
其中,定義文件資源中所包含的業(yè)務(wù)邏輯語(yǔ)言所需成源代碼的主體框架,該主題框架中可以定義一個(gè)token隊(duì)列,其中,token可以理解為業(yè)務(wù)邏輯語(yǔ)言中生成引擎處理的最小邏輯單元,即,每一個(gè)語(yǔ)言單元就是一個(gè)token。例如,以文件資源為該atomfunc形式的資源為例,則主要有以下幾部分:
函數(shù)定義token:定義函數(shù)的描述體,主要描述函數(shù)的返回值、名稱以及參數(shù)等信息;
參數(shù)初始化token:對(duì)函數(shù)輸入?yún)?shù)、輸出參數(shù)以及內(nèi)部變量進(jìn)行定義與初始化處理;
偽代碼解析token:解析偽代碼結(jié)構(gòu)邏輯部分;
函數(shù)結(jié)束token:函數(shù)返回操作,對(duì)函數(shù)正常執(zhí)行進(jìn)行函數(shù)輸出參數(shù)返回,如果出錯(cuò)進(jìn)行錯(cuò)誤消息返回,并對(duì)函數(shù)中使用到的結(jié)構(gòu)體進(jìn)行析構(gòu)釋放內(nèi)存操作。
在本申請(qǐng)實(shí)施例中,可以根據(jù)定義出的token隊(duì)列中的token的類(lèi)型,分別調(diào)取不同的token方式進(jìn)行token處理。本申請(qǐng)實(shí)施例中,需要處理的token分為4種類(lèi)型:普通文本、注釋、宏、偽代碼。
其中,普通代碼和注釋不需要再做處理,最終代碼生成時(shí),直接取出拼接即可,其中,普通代碼就是本申請(qǐng)?zhí)岬降某跏荚创a,如,一般的c/c++代碼,例如流程控制、條件判斷語(yǔ)句等。注釋可以是按照原代碼語(yǔ)法描述的注釋信息,如,按照c/c++語(yǔ)法描述的注釋信息,例如,通過(guò)“/****/”包括起來(lái)的多行偽代碼,或以“//”開(kāi)頭的單行偽代碼可以認(rèn)為是注釋信息。
偽代碼就是一段業(yè)務(wù)邏輯語(yǔ)言,具體可以參見(jiàn)圖2中偽代碼的組成結(jié)構(gòu)示意圖,對(duì)于偽代碼,需要調(diào)用偽代碼解析器進(jìn)行解析,然后再生成相關(guān)token迭代,如圖3中,如果該業(yè)務(wù)邏輯語(yǔ)言不是單純的注釋或者是宏等,則需要進(jìn)行左側(cè)的處理,以通過(guò)加載上下文(可以理解為處理程序或引擎),標(biāo)記出偽代碼所包含的普通文本、注釋和宏。
宏可以理解為偽代碼的一個(gè)子組成部分,如,可以通過(guò)特殊標(biāo)簽(例如中括號(hào)“[]”)包括起來(lái)的偽代碼行。宏的定義可以為:<宏標(biāo)記>[宏名稱][宏參數(shù)]。其中,宏標(biāo)記為標(biāo)記同一個(gè)宏在不同邏輯場(chǎng)景下生成源碼的差異部分,非必須存在;宏名稱為唯一表示此宏用于處理的邏輯場(chǎng)景,必須存在;宏參數(shù):用于宏處理邏輯時(shí)的輔助信息,非必須存在。對(duì)于宏,需要調(diào)用相關(guān)的宏處理程序進(jìn)行處理,然后再生成相關(guān)的token迭代。如圖3右側(cè),通過(guò)包含處理邏輯的宏處理器工廠擴(kuò)展點(diǎn)管理來(lái)對(duì)宏進(jìn)行處理,具體可以參見(jiàn)后續(xù)步驟s407至410。
s407,如果該語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)預(yù)置的分支名稱與參數(shù)轉(zhuǎn)換規(guī)則的對(duì)應(yīng)關(guān)系,確定與該業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則。
s408,將該業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的代碼參數(shù)。
s409,將該業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)所關(guān)聯(lián)的數(shù)值設(shè)置為該待轉(zhuǎn)換參數(shù)轉(zhuǎn)換出的代碼參數(shù)所關(guān)聯(lián)的數(shù)值。
其中,對(duì)于業(yè)務(wù)分支語(yǔ)言(即宏)而言,如果該業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)關(guān)聯(lián)有相關(guān)的數(shù)值,則可以從數(shù)據(jù)庫(kù)或者指定存儲(chǔ)區(qū)中獲取該待轉(zhuǎn)換參數(shù)所關(guān)聯(lián)的數(shù)值,并將該數(shù)值作為該待轉(zhuǎn)換參數(shù)對(duì)應(yīng)的代碼參數(shù)所關(guān)聯(lián)的數(shù)據(jù)。
s410,如果不存在與該業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則,則將該業(yè)務(wù)分支語(yǔ)言標(biāo)記為注釋。
如果不存在該業(yè)務(wù)分支語(yǔ)言對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則,則說(shuō)明該業(yè)務(wù)分支語(yǔ)言為注釋?zhuān)瑒t可以直接將該業(yè)務(wù)分支語(yǔ)言標(biāo)記為注釋。如圖3中,如果將宏解析為普通代碼并進(jìn)入token處理部分。在token處理部分中,如果從業(yè)務(wù)邏輯語(yǔ)言或者業(yè)務(wù)分支語(yǔ)言中最終得到普通代碼和注釋?zhuān)瑒t可以進(jìn)行到代碼生成的操作,即后續(xù)步驟s411。
s411,將解析得到該注釋、初始源代碼、代碼參數(shù)以及代碼參數(shù)所關(guān)聯(lián)的數(shù)值進(jìn)行組合,得到該業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合。
在經(jīng)過(guò)以上s406至s410將一段業(yè)務(wù)邏輯語(yǔ)言全部轉(zhuǎn)換為注釋、初始源代碼以及代碼參數(shù)之后,就可以進(jìn)行拼接組合,最終得到該業(yè)務(wù)邏輯語(yǔ)言所對(duì)應(yīng)的源代碼集合??梢岳斫獾氖?,在進(jìn)行拼接組合時(shí),可以依據(jù)注釋、初始源代碼在業(yè)務(wù)邏輯語(yǔ)言中的原始位置,以及該代碼參數(shù)所對(duì)應(yīng)的業(yè)務(wù)分支語(yǔ)言在業(yè)務(wù)邏輯語(yǔ)言中的原始位置,來(lái)確定注釋、初始源代碼以及代碼參數(shù)在該源代碼集合中的位置。
s412,將該至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件中,得到該目標(biāo)文件轉(zhuǎn)換出源文件。
其中,該源文件中包括至少一個(gè)源代碼集合。
s413,依據(jù)該目標(biāo)文件的存儲(chǔ)路徑,確定編譯該源文件的操作系統(tǒng)。
s414,在確定出的該操作系統(tǒng)上編譯源文件,以得到可運(yùn)行的可執(zhí)行文件。
另一方面,本申請(qǐng)實(shí)施例還提供了一種代碼生成裝置。
參見(jiàn)圖5,其示出了本申請(qǐng)一種代碼生成裝置一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖,本實(shí)施例的裝置可以包括:
文件獲取單元501,用于獲取待轉(zhuǎn)換為代碼的目標(biāo)文件,所述目標(biāo)文件包括至少一段用于描述業(yè)務(wù)邏輯的業(yè)務(wù)邏輯語(yǔ)言;
語(yǔ)言解析單元502,用于對(duì)應(yīng)任意一段業(yè)務(wù)邏輯語(yǔ)言,對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析,以標(biāo)記出組成所述業(yè)務(wù)邏輯語(yǔ)言的多個(gè)語(yǔ)言單元,所述語(yǔ)言單元為注釋、采用計(jì)算機(jī)編程語(yǔ)言描述的初始源代碼段或者用于描述業(yè)務(wù)邏輯中業(yè)務(wù)步驟的業(yè)務(wù)分支語(yǔ)言;
分支轉(zhuǎn)換單元503,用于如果所述語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,將所述業(yè)務(wù)分支語(yǔ)言轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的目標(biāo)源代碼段,所述目標(biāo)源代碼段包括目標(biāo)代碼段和注釋中的一種或兩種;
代碼組合單元504,用于將所述注釋、初始源代碼以及所述目標(biāo)源代碼段進(jìn)行組合,得到所述業(yè)務(wù)邏輯語(yǔ)言對(duì)應(yīng)的源代碼集合;
源文件生成單元505,用于將所述至少一段業(yè)務(wù)邏輯語(yǔ)言轉(zhuǎn)換出的至少一個(gè)源代碼集合進(jìn)行組合后保存到文件中,得到所述目標(biāo)文件轉(zhuǎn)換出源文件,所述源文件中包括所述至少一個(gè)源代碼集合。
可選的,所述裝置還可以包括:
類(lèi)型確定單元,用于在所述語(yǔ)言解析單元對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析之前,確定所述目標(biāo)文件的文件類(lèi)型;
解析引擎加載單元,用于根據(jù)所述目標(biāo)文件的文件類(lèi)型,加載與所述文件類(lèi)型對(duì)應(yīng)的解析引擎;
所述語(yǔ)言解析單元在對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析時(shí),具體用于利用所述解析引擎對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析。
進(jìn)一步的,所述裝置還可以包括:
配置信息檢測(cè)單元,用于在所述語(yǔ)言解析單元對(duì)所述業(yè)務(wù)邏輯語(yǔ)言進(jìn)行解析之前,檢測(cè)是否預(yù)置有與所述目標(biāo)文件的文件類(lèi)型對(duì)應(yīng)的配置信息,所述配置信息用于變更所述業(yè)務(wù)邏輯語(yǔ)言所轉(zhuǎn)換出的源文件中源代碼的組成形式;
配置信息加載單元,用于如果存在所述配置信息,則向所述目標(biāo)文件的業(yè)務(wù)邏輯語(yǔ)言中加載所述配置信息。
可選的,所述分支轉(zhuǎn)換單元,包括:
規(guī)則確定單元,用于如果所述語(yǔ)言單元為業(yè)務(wù)分支語(yǔ)言,依據(jù)預(yù)置的分支名稱與參數(shù)轉(zhuǎn)換規(guī)則的對(duì)應(yīng)關(guān)系,確定與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則;
參數(shù)轉(zhuǎn)換單元,用于將所述業(yè)務(wù)分支語(yǔ)言中的待轉(zhuǎn)換參數(shù)轉(zhuǎn)換為采用計(jì)算機(jī)編程語(yǔ)言描述的代碼參數(shù);
數(shù)值關(guān)聯(lián)單元,用于將所述業(yè)務(wù)分支語(yǔ)言中的所述待轉(zhuǎn)換參數(shù)所關(guān)聯(lián)的數(shù)值設(shè)置為所述待轉(zhuǎn)換參數(shù)轉(zhuǎn)換出的代碼參數(shù)所關(guān)聯(lián)的數(shù)值。
注釋識(shí)別單元,用于如果不存在與所述業(yè)務(wù)分支語(yǔ)言的分支名稱對(duì)應(yīng)的參數(shù)轉(zhuǎn)換規(guī)則,則將所述業(yè)務(wù)分支語(yǔ)言標(biāo)記為注釋。
可選的,所述裝置還包括:
操作系統(tǒng)確定單元,用于在所述源文件生成單元得到所述目標(biāo)文件轉(zhuǎn)換出源文件之后,依據(jù)所述目標(biāo)文件的存儲(chǔ)路徑,確定編譯所述源文件的操作系統(tǒng);
代碼編譯單元,用于在確定出的所述操作系統(tǒng)上編譯所述源文件,以得到可運(yùn)行的執(zhí)行文件。
最后,還需要說(shuō)明的是,在本文中,諸如第一和第二等之類(lèi)的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說(shuō)明書(shū)中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見(jiàn)即可。
對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本申請(qǐng)。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專(zhuān)業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本申請(qǐng)的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本申請(qǐng)將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一致的最寬的范圍。