本發(fā)明涉及計算機(jī)技術(shù)應(yīng)用領(lǐng)域,具體而言,涉及一種編譯計算機(jī)語言的方法和裝置。
背景技術(shù):
::隨著計算機(jī)語言的廣泛運(yùn)用,計算機(jī)語言的編譯成為了計算機(jī)語言在使用過程中不可或缺的關(guān)鍵步驟,由于人工編寫的計算機(jī)語言存在主觀性,在計算機(jī)語言的語法上會出現(xiàn)初始的語法錯誤,因此如何高效正確的對人工編寫的計算機(jī)語言進(jìn)行編譯成為了本領(lǐng)域技術(shù)人員需要解決的問題。對計算機(jī)語言進(jìn)行分析,編譯,使其從人容易理解的語言變成計算機(jī)容易理解的語言,該編譯基本過程是將源碼變成認(rèn)證token序列,然后根據(jù)定義的語法grammer變成語法分析樹(parsetree,簡稱pst),再經(jīng)過語義分析變成抽象語法樹(abstractsyntaxtree,簡稱ast),這樣得到的ast就可以被計算機(jī)理解了。但是問題在于,由于被分析編譯的源碼由工程人員輸入,經(jīng)常有各種錯誤。對于簡單的token,例如使用了不該使用的字符,現(xiàn)有編譯器大部分可以在生成pst階段可以一定程度的容忍錯誤,盡量多的編譯剩余的源碼以便發(fā)現(xiàn)更多錯誤。但是如果出錯的地方使其無法轉(zhuǎn)換成對應(yīng)的ast,因為ast是一個樹形的嵌套結(jié)構(gòu),父節(jié)點依賴于所有字節(jié)點的正確生成,則會導(dǎo)致整個ast生成階段無法進(jìn)行。ast無法生成會導(dǎo)致依賴ast的功能無法使用,例如在編譯中很多提示類型錯誤,在集成開發(fā)環(huán)境(integrateddevelopmentenvironment,簡稱ide)中的提示用戶可能用到的函數(shù)等?,F(xiàn)有技術(shù)中對所解析的語言的每一個語法單元進(jìn)行特殊處理,判斷其是否可以被允許進(jìn)入更進(jìn)一步的分析。但是工作量大,現(xiàn)實中對于一種計算機(jī)語言難以完整實現(xiàn)。依據(jù)上述提到的方法盡量生成ast,但是因為工作量太大且容易出錯所以現(xiàn)實中難以實現(xiàn)。針對上述由于現(xiàn)有技術(shù)中缺少對計算機(jī)語言進(jìn)行容錯編譯的技術(shù),導(dǎo)致的計算機(jī)語言編譯效率低的問題,目前尚未提出有效的解決方案。技術(shù)實現(xiàn)要素:本發(fā)明實施例提供了一種編譯計算機(jī)語言的方法和裝置,以至少解決由于現(xiàn)有技術(shù)中缺少對計算機(jī)語言進(jìn)行容錯編譯的技術(shù),導(dǎo)致的計算機(jī)語言編譯效率低的技術(shù)問題。根據(jù)本發(fā)明實施例的一個方面,提供了一種編譯計算機(jī)語言的方法,包括:依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;在判斷結(jié)果為是的情況下,刪除語法單元。根據(jù)本發(fā)明實施例的另一方面,還提供了一種編譯計算機(jī)語言的裝置,包括:檢測模塊,用于依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;判斷模塊,用于在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;第一執(zhí)行模塊,用于在判斷結(jié)果為是的情況下,刪除語法單元。在本發(fā)明實施例中,通過依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;在判斷結(jié)果為是的情況下,刪除語法單元,達(dá)到了在計算機(jī)語言存在多出錯誤的同時提升編譯成功率的目的,從而實現(xiàn)了提升編譯效率的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中缺少對計算機(jī)語言進(jìn)行容錯編譯的技術(shù),導(dǎo)致的計算機(jī)語言編譯效率低的技術(shù)問題。附圖說明此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:圖1是本發(fā)明實施例的一種編譯計算機(jī)語言的方法的計算機(jī)終端的硬件結(jié)構(gòu)框圖;圖2是根據(jù)本發(fā)明實施例一的編譯計算機(jī)語言的方法的流程圖;圖3是根據(jù)本發(fā)明實施例一的簡化的sql中的select語句的目標(biāo)ast樹的結(jié)構(gòu)示意圖;圖4是根據(jù)本發(fā)明實施例一的一種編譯計算機(jī)語言的方法的流程圖;圖5是根據(jù)本發(fā)明實施例一的另一種編譯計算機(jī)語言的方法的流程圖;圖6是根據(jù)本發(fā)明實施例一的又一種編譯計算機(jī)語言的方法的流程圖;圖7是根據(jù)本發(fā)明實施例二的編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖;圖8是根據(jù)本發(fā)明實施例二的一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖;圖9是根據(jù)本發(fā)明實施例二的另一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖;圖10是根據(jù)本發(fā)明實施例二的又一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖;圖11是根據(jù)本發(fā)明實施例二的再一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖;圖12是根據(jù)本發(fā)明實施例二的一種編譯計算機(jī)語言的裝置中第二執(zhí)行模塊的結(jié)構(gòu)示意圖。具體實施方式為了使本
技術(shù)領(lǐng)域:
:的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。本申請實施例涉及的技術(shù)名詞:語法分析樹:parsetree,簡稱pst;抽象語法樹:abstractsyntaxtree,簡稱ast。實施例1根據(jù)本發(fā)明實施例,還提供了一種編譯計算機(jī)語言的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行, 并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。本申請實施例一所提供的方法實施例可以在移動終端、計算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計算機(jī)終端上為例,圖1是本發(fā)明實施例的一種編譯計算機(jī)語言的方法的計算機(jī)終端的硬件結(jié)構(gòu)框圖。如圖1所示,計算機(jī)終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲數(shù)據(jù)的存儲器104、以及用于通信功能的傳輸模塊106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。存儲器104可用于存儲應(yīng)用軟件的軟件程序以及模塊,如本發(fā)明實施例中的編譯計算機(jī)語言的方法對應(yīng)的程序指令/模塊,處理器102通過運(yùn)行存儲在存儲器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的應(yīng)用程序的漏洞檢測方法。存儲器104可包括高速隨機(jī)存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器104可進(jìn)一步包括相對于處理器102遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至計算機(jī)終端10。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。傳輸裝置106用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實例可包括計算機(jī)終端10的通信供應(yīng)商提供的無線網(wǎng)絡(luò)。在一個實例中,傳輸裝置106包括一個網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個實例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。在上述運(yùn)行環(huán)境下,本申請?zhí)峁┝巳鐖D2所示的編譯計算機(jī)語言的方法。圖2是根據(jù)本發(fā)明實施例一的編譯計算機(jī)語言的方法的流程圖。步驟s202,依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;本申請上述步驟s202中,本申請實施例提供的編譯計算機(jī)語言的方法可以適用于將源碼變成token序列,然后根據(jù)定義的語法grammer變成pst,再經(jīng)過語義分析變成ast的計算機(jī)語言編譯過程。為了規(guī)避現(xiàn)有技術(shù)問題中由于一旦pst對應(yīng)的地方無法轉(zhuǎn)換成ast,會導(dǎo)致整個ast生成階段無法進(jìn)行,ast無法生成會導(dǎo)致依賴ast的功能無法使用的問題發(fā)生。本申請實施例提供的編譯計算機(jī)語言的方法中在實現(xiàn)計 算機(jī)語言編譯的過程中,首先,遍歷pst計算機(jī)語言中是否存在有錯誤的語法單元。具體的,假設(shè)一條待編譯語句,“selectuserid,usernamefromusertwhereuserage>20”,根據(jù)預(yù)設(shè)語法,一條待編譯語句中需要包含“select”,“from”和/或“where”部分,由上述提供的待編譯語句可知,select”,“from”和“where”中的語義清楚,并且不存在符號錯誤,且存在語序邏輯,所以在檢測待編譯語句的過程中,若“select”,“from”和/或“where”沒有語法錯誤,則認(rèn)為可以生成完整正確的ast,其中,需要說明的是“select”,“from”和/或“where”即,本申請實施例提供的語法單元。步驟s204,在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;基于步驟s202的檢測,本申請上述步驟s204中,在檢測結(jié)果為待編譯語句存在錯誤的語法單元的情況下,先判斷該語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點。其中,基于步驟s202中提到的ast,由于ast是一個樹形的嵌套結(jié)構(gòu),父節(jié)點依賴于所有字節(jié)點的正確生成,并且,在本申請實施例提供的編譯計算機(jī)語言的方法中,當(dāng)可選節(jié)點出錯時,可以剔除該可選節(jié)點對應(yīng)的語法單元,保障必選節(jié)點的正確編譯,進(jìn)而保障ast生成的最大正確ast。即,在判斷結(jié)果為是的情況下,執(zhí)行步驟s206;在判斷結(jié)果為否的情況下,執(zhí)行步驟s208。具體的,圖3是根據(jù)本發(fā)明實施例一的簡化的sql中的select語句的目標(biāo)ast樹的結(jié)構(gòu)示意圖;如圖3所示,目標(biāo)ast樹中所有標(biāo)有‘?’后綴的節(jié)點在其父節(jié)點中是可選的,例如,選擇語句selectstatement必須有選擇子句序列selectclause,來源子句序列fromclause,而where子句序列whereclause不一定有。沒有whereclause時候selectstatement仍然是正確的,但沒有selectclause和fromclause就不正確,即非法語句。步驟s206,在判斷結(jié)果為是的情況下,刪除語法單元;基于步驟s204的判斷結(jié)果,本申請上述步驟s206中,在判斷結(jié)果為語法單元所在的子節(jié)點是對應(yīng)父節(jié)點中的可選節(jié)點的情況下,將刪除該語法單元。具體的,仍舊結(jié)合步驟s204中的圖3,假設(shè)待編譯語句中的from子句序列中來源別名tablealias存在錯誤,在判斷該來源別名tablealias為from子句序列中的可選節(jié)點的情況下,刪除該條件表述序列,編譯selectclause和fromclause中剩余正確的語法單元部分。此外,圖4是根據(jù)本發(fā)明實施例一的一種編譯計算機(jī)語言的方法的流程圖。如圖 4所示,當(dāng)步驟s202依據(jù)預(yù)設(shè)語法檢測待編譯語句中的語法單元時,即,在檢測結(jié)果為否的情況下,編譯該待編譯語句中的語法單元。由上可知,本申請上述實施例一所提供的方案,通過依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;在判斷結(jié)果為是的情況下,刪除語法單元,達(dá)到了在計算機(jī)語言存在多出錯誤的同時提升編譯成功率的目的,從而實現(xiàn)了提升編譯效率的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中缺少對計算機(jī)語言進(jìn)行容錯編譯的技術(shù),導(dǎo)致的計算機(jī)語言編譯效率低的技術(shù)問題。可選的,圖5是根據(jù)本發(fā)明實施例一的另一種編譯計算機(jī)語言的方法的流程圖,如圖5所示,在步驟s204判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點之后,本申請實施例提供的編譯計算機(jī)語言的方法還包括:步驟s208,在判斷結(jié)果為否的情況下,遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點;基于步驟s204中的判斷結(jié)果,本申請上述步驟s208中,在判斷結(jié)果為語法單元所在的子節(jié)點不是對應(yīng)父節(jié)點中的可選節(jié)點的情況下,即,該語法單元所在的子節(jié)點為對應(yīng)父節(jié)點中的必選節(jié)點,將遞歸查詢該語法單元所在的子節(jié)點對應(yīng)的父節(jié)點是否為該父節(jié)點中的可選節(jié)點。具體的,仍舊結(jié)合步驟s204中的圖3,假設(shè)待編譯語句中的where子句序列中的條件表述序列存在錯誤,如圖3所示,該條件表述序列condition不是wherecondition中的可選節(jié)點,此時需要查詢繼續(xù)查看wherecondition的父節(jié)點wherecluase是否為可選節(jié)點,如圖3所示,wherecondition在wherecluase中仍然不是可選節(jié)點,將查詢wherecluase是否為父節(jié)點selectstatement中的可選節(jié)點。其中,如圖3所示,在本申請實施例提供的編譯計算機(jī)語言的方法中,遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點的方式具體如下:方式一,查詢該語法單元所在的子節(jié)點為對應(yīng)父節(jié)點的上一級節(jié)點,層層遞進(jìn)查詢;假設(shè)當(dāng)前待編譯語句為“selectuserid,usernamefromusertwhereuserage*20”。由此可見,whereclause中的expression存在錯誤,即,“userage*20”中的“*”為圖3中不可識別標(biāo)識符。因此,如圖3所示,expression的父節(jié)點為condition,由于該condition為必選節(jié)點,因此繼續(xù)查詢該condition的父節(jié)點whereclause。方式二,查詢該語法單元所在的子節(jié)點為對應(yīng)父節(jié)點所屬分類,查詢分類節(jié)點處的節(jié)點類型。仍舊以方式一中的舉例為例,若whereclause中的expression存在錯誤,則由于expression為whereclause中的語法單元,所以直接查詢expression所屬的whereclause是否為可選節(jié)點。結(jié)合方式一和方式二,本申請實施例提供的編譯計算機(jī)語言的方法中以方式一的實現(xiàn)方式為優(yōu)選方式為例進(jìn)行說明,以實現(xiàn)本申請實施例提供的編譯計算機(jī)語言的方法為準(zhǔn),具體不做限定。步驟s210,在查詢結(jié)果為是的情況下,刪除父節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元?;诓襟Es208中遞歸查詢父節(jié)點是否為對應(yīng)父節(jié)點中的可選節(jié)點,本申請上述步驟s210中,在查詢結(jié)果為該父節(jié)點對應(yīng)的父節(jié)點中的可選節(jié)點時,刪除該父節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。具體的,仍舊以步驟s208中的示例為例,在查詢得到wherecluase是為父節(jié)點selectstatement中的可選節(jié)點的情況下,將整個對應(yīng)whereclause的部分裁減,其他部分仍然可以生成selectstatement的合法ast,只是不包含有錯的whereclause,仍然可以用來支持后續(xù)所有基于ast的功能。本申請實施例可以根據(jù)語法結(jié)構(gòu)中對于一個ast節(jié)點在其父節(jié)點中是否是可選的信息,自動的對有錯誤的pst節(jié)點進(jìn)行裁減,使所有能夠生成正確ast的pst還能夠生成ast,所有會導(dǎo)致錯誤ast的節(jié)點都被忽略。生成的ast剛好是能夠生成的最大正確ast,仍然能夠最大的支持基于ast的應(yīng)用。節(jié)點在其父節(jié)點中是否可選可以從要分析的計算機(jī)語言的語法定義中自動取得,一般的語法定義和編譯代碼生成器,例如yacc,antlr,jflex等,都可以直接或間接提供此功能。可選的,待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節(jié)點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節(jié)點。可選的,在錯誤的語法單元為選擇子句序列中的選擇列表的情況下,步驟s204中判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點包括:step1,判斷選擇列表中的每一列是否均存在語法錯誤;本申請上述步驟s204中的step1中,在待編譯語句中的選擇子句序列中的選擇列表存在錯誤的情況下,判斷該選擇列表中的每一列是否均存在語法錯誤。具體的,結(jié)合圖3所示,在選擇列表中每一列column1…columnn都是可選的,因此需要判斷該選擇列表中的每一列是否都存在語法錯誤。在判斷結(jié)果為是的情況下,執(zhí)行步驟step4,在判斷結(jié)果為否的情況下,執(zhí)行步驟step2和step3。step2,在判斷結(jié)果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;基于step1中的判斷,本申請上述步驟step2中,在判斷結(jié)果為選擇列表中的每一列并不全部存在語法錯誤的情況下,需要判斷該選擇列表中的至少一列是否存在語法錯誤。具體的,結(jié)合圖3,在假設(shè)選擇子句序列selectcluase中的選擇列表selectlist中并不是每一列都存在語法錯誤的情況下,需要判斷選擇列表selectlist中存在語法錯誤的列的個數(shù)。step3,在判斷結(jié)果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節(jié)點;基于step2中的判斷,本申請上述步驟step3中,在判斷結(jié)果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節(jié)點。具體的,結(jié)合圖3,如圖3所示,在判斷結(jié)果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表selectlist是否為選擇子句序列selectcluase中的可選節(jié)點。step4,在判斷結(jié)果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句。本申請上述步驟step4中,在判斷結(jié)果為選擇列表中的每一列均存在語法錯誤的情況下,如果所有列column都有錯,會導(dǎo)致整個selectstatement都無法正確生成,但也是預(yù)期的結(jié)果,因為沒有選擇列表的select語句就是不合法的。可選的,圖6是根據(jù)本發(fā)明實施例一的又一種編譯計算機(jī)語言的方法的流程圖,如圖6所示,在步驟s208中遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點之后,本申請實施例提供的編譯計算機(jī)語言的方法還包括:步驟s209,在查詢結(jié)果為選擇列表為選擇子句序列中的必選節(jié)點的情況下,編譯 選擇列表中語法正確的列。本申請上述步驟s209中,在選擇子句序列中存在錯誤的語法單元的情況下,基于步驟s208遞歸查詢父節(jié)點是否為對應(yīng)父節(jié)點中的可選節(jié)點之后,在查詢結(jié)果為選擇列表為選擇子句序列中的必選節(jié)點的情況下,編譯選擇列表中語法正確的列。具體的,仍舊以上述步驟s204中的示例為例,假設(shè)選擇列表selectlist中存在錯誤的列column,則遞歸查詢該column的父節(jié)點selectlist是否為可選節(jié)點,在查詢結(jié)果為父節(jié)點selectlist為父節(jié)點selectcluase中的必選結(jié)果的情況下,編譯selectlist中語法正確的列??蛇x的,在錯誤的語法單元為來源子句序列中的來源別名的情況下,步驟s204中判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點包括:step1,判斷來源別名是否為來源子句序列中的可選節(jié)點。本申請上述步驟s204中的step1中,在錯誤的語法單元為來源子句序列中的來源別名的情況下,需判斷該來源別名是否為來源子句序列中的可選節(jié)點。進(jìn)一步地,可選的,步驟s206中在判斷結(jié)果為是的情況下,刪除語法單元包括:step1,在判斷結(jié)果為來源別名是來源子句序列中的可選節(jié)點的情況下,刪除來源別名對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元?;谏鲜霾襟Es204的判斷,本申請上述步驟s206中的step1中,在判斷結(jié)果為來源別名是來源子句序列中的可選節(jié)點的情況下,刪除來源別名對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。具體的,如圖3所示,該來源別名tablealias為可選節(jié)點,因此刪除該來源節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。即,假設(shè)“selectuserid,usernamefromuser‘@#$%’whereuserage>20”;語句中對應(yīng)alias的節(jié)點‘@#$%’是個非法節(jié)點,無法被翻譯成正常的aliasast。此時查看alias確定其在父節(jié)點,也就是table中,是可選節(jié)點。則不生成aliasast,父節(jié)點table中包含值為’user’的tablename節(jié)點,仍然是個合法的ast。語句中其他部分沒有任何問題,生成的完整ast樹種除了沒有table的alias,仍然可以用來支持后續(xù)所有基于ast的功能??蛇x的,待編譯語句中的語法單元還包括:第一子句序列,其中,第一子句序列包括:條件表述序列;第一子句序列為待編譯語句中的可選節(jié)點,條件表述序列為第一子句序列的必選節(jié)點。進(jìn)一步地,可選的,在待編譯語句中條件表述序列中的表述條件錯誤的情況下,步驟s208中遞歸查詢父節(jié)點是否為對應(yīng)父節(jié)點中的可選節(jié)點包括:step1,查詢條件表述序列是否為第一子句序列中的可選節(jié)點;本申請上述步驟s208中的step1中,在待編譯語句中條件表述序列中的表述條件錯誤的情況下,需要查詢該條件表述序列所在的子節(jié)點是否為第一子句序列中的可選節(jié)點,在查詢結(jié)果為否的情況下執(zhí)行步驟step2。step2,在查詢結(jié)果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節(jié)點?;趕tep1中的查詢,本申請上述步驟step2中,在查詢結(jié)果為該條件表述序列不是該第一子句序列中的可選節(jié)點的情況下,需要查詢第一子句序列是否為待編譯語句中的可選節(jié)點。具體的,結(jié)合圖3,假設(shè)存在待編譯語句“selectuserid,usernamefromusertwhereuserage*20”;其中,語句中對應(yīng)condition的節(jié)點中關(guān)系操作符非法,’*’不是一個可被接受的關(guān)系操作符,無法被翻譯成正常的ast。此時查看條件表述序列對應(yīng)的父節(jié)點,也就是condition中,不是可選節(jié)點,導(dǎo)致其父節(jié)點condition也不能生成ast,查詢condition在條件表述序列wherecondition中是否可選,若是必選節(jié)點,則繼續(xù)查看條件表述序列wherecondition的父節(jié)點第一子句序列wherecluase,查詢該條件表述序列wherecondition在第一子句序列wherecluase中是否為可選節(jié)點,在查詢結(jié)果為是的情況下,則繼續(xù)查看第一子句序列wherecluase在父節(jié)點selectstatement中是否為可選節(jié)點。進(jìn)一步地,可選的,步驟s210中刪除父節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元包括:step1,刪除第一子句序列對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。本申請上述步驟s210中的step1中,在查詢結(jié)果為該父節(jié)點為該父節(jié)點對應(yīng)父節(jié)點中的可選節(jié)點的情況下,將刪除該第一子句序列對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。具體的,仍舊以上述步驟s208中的step1和step2中的示例為例,在查詢得到該第一子句序列whereclause為可選節(jié)點,則將整個對應(yīng)whereclause的部分裁減,其他部分仍然可以生成selectstatement的合法ast,只是不包含有錯的whereclause, 仍然可以用來支持后續(xù)所有基于ast的功能。結(jié)合步驟s202至步驟s210,本申請實施例提供的編譯計算機(jī)語言的方法中可以包含三種語法錯誤,具體如下:1.完全正確的輸入源碼:“selectuserid,usernamefromusertwhereuserage>20”;此語句沒有任何問題,可生成完整ast樹。2.錯誤情況一,單一可選節(jié)點出錯:“selectuserid,usernamefromuser‘@#$%’whereuserage>20”;語句中對應(yīng)alias的節(jié)點‘@#$%’是個非法節(jié)點,無法被翻譯成正常的aliasast。此時查看alias確定其在父節(jié)點,也就是table中,是可選節(jié)點。則不生成aliasast,父節(jié)點table中包含值為’user’的tablename節(jié)點,仍然是個合法的ast。語句中其他部分沒有任何問題,生成的完整ast樹種除了沒有table的alias,仍然可以用來支持后續(xù)所有基于ast的功能。3.錯誤情況二,單一不可選節(jié)點出錯:“selectuserid,usernamefromusertwhereuserage*20”;語句中對應(yīng)condition的節(jié)點中關(guān)系操作符非法,’*’不是一個可被接受的關(guān)系操作符,無法被翻譯成正常的ast。此時查看其在父節(jié)點,也就是condition中,不是可選節(jié)點,導(dǎo)致其父親節(jié)點condition也不能生成ast,即使其其他節(jié)點都沒有錯誤。此時繼續(xù)查看condition在其父節(jié)點中是否可選,如果可選則裁減此部分的pst,如果不可選遞歸的查看父節(jié)點中是否可選。對于此例,condition在wherecondition中不是可選,而是必須項,所以繼續(xù)查看wherecondition的父節(jié)點wherecluase,發(fā)現(xiàn)wherecondition在wherecluase中仍然不是可選節(jié)點,則繼續(xù)查看wherecondition的父節(jié)點selectstatement,發(fā)現(xiàn)可選,則將整個對應(yīng)whereclause的部分裁減,其他部分仍然可以生成selectstatement的合法ast,只是不包含有錯的whereclause,仍然可以用來支持后續(xù)所有基于ast的功能。4.錯誤情況三,一或多個可選循環(huán)節(jié)點出錯:“selectuserid,user@#ame,userage,&usexxxfromusertwhereuserage>20”;ast中column1…columnn共同組成select列表,其中任何一個都是可選的,但 是最終列表中至少要有一個。此示例語句中對應(yīng)column2,column4節(jié)點中有非法字符,無法被翻譯成column的ast。此時查看其父節(jié)點,也就是selectlist中,是否還有其他合法的condition,發(fā)現(xiàn)還有column1,column3正確,則裁減有錯的column2,column4,仍然可以包含column1,column3的正確selectlist節(jié)點。最后仍然可以生成合法的selectstatement,只是不包含有錯的兩個column,仍然可以用來支持后續(xù)所有基于ast的功能。此例中,如果所有column都有錯,按照此例與例三種的規(guī)則,會導(dǎo)致整個selectstatement都無法正確生成,但也是預(yù)期的結(jié)果,因為沒有選擇列表的select語句就是不合法的。綜上,綜上,本申請實施例提供的編譯計算機(jī)語言的方法可以應(yīng)用在對sql語言的編譯器中。也可應(yīng)用到任何其他計算機(jī)語言。本申請實施例提供的編譯計算機(jī)語言的方法可以用遞歸的判斷ast在其父節(jié)點中是否可選,實現(xiàn)對計算機(jī)語言的容錯分析,降低了編譯過程中的工作量,實現(xiàn)對計算機(jī)語言的最大化正確編譯。需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的編譯計算機(jī)語言的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。實施例2根據(jù)本發(fā)明實施例,還提供了一種用于實施上述方法實施例的裝置實施例,本申請上述實施例所提供的裝置可以在計算機(jī)終端上運(yùn)行。圖7是根據(jù)本發(fā)明實施例二的編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖。如圖7所示,該編譯計算機(jī)語言的裝置可以包括:檢測模塊71、判斷模塊72、第一執(zhí)行模塊73。其中,檢測模塊71,用于依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;判斷模塊72,用于在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;第一執(zhí)行模塊73,用于在判斷結(jié)果為是的情況下,刪除語法單元。由上可知,本申請上述實施例二所提供的方案,通過依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;在判斷結(jié)果為是的情況下,刪除語法單元,達(dá)到了在計算機(jī)語言存在多出錯誤的同時提升編譯成功率的目的,從而實現(xiàn)了提升編譯效率的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中缺少對計算機(jī)語言進(jìn)行容錯編譯的技術(shù),導(dǎo)致的計算機(jī)語言編譯效率低的技術(shù)問題。此處需要說明的是,上述檢測模塊71、判斷模塊72和第一執(zhí)行模塊73對應(yīng)于實施例一中的步驟s202至步驟s206,三個模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)??蛇x的,圖8是根據(jù)本發(fā)明實施例二的一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖,如圖8所示,本申請實施例提供的編譯計算機(jī)語言的裝置還包括:查詢模塊74和第二執(zhí)行模塊75。其中,查詢模塊74,用于在判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點之后,在判斷結(jié)果為否的情況下,遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點;第二執(zhí)行模塊75,用于在查詢結(jié)果為是的情況下,刪除父節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。此處需要說明的是,上述查詢模塊74和第二執(zhí)行模塊75對應(yīng)于實施例一中的步驟s208和步驟s210,兩個模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)??蛇x的,待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節(jié)點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節(jié)點??蛇x的,圖9是根據(jù)本發(fā)明實施例二的另一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖。如圖9所示,判斷模塊72包括:第一判斷單元721、第二判斷單元722、第三判 斷單元723和第四判斷單元724。其中,第一判斷單元721,用于在錯誤的語法單元為選擇子句序列中的選擇列表的情況下,判斷選擇列表中的每一列是否均存在語法錯誤;第二判斷單元722,用于在判斷結(jié)果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;第三判斷單元723,用于在判斷結(jié)果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節(jié)點;第四判斷單元724,用于在判斷結(jié)果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句。此處需要說明的是,上述第一判斷單元721、第二判斷單元722、第三判斷單元723和第四判斷單元724對應(yīng)于實施例一中的步驟s204中的step1至step4,四個模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)??蛇x的,圖10是根據(jù)本發(fā)明實施例二的又一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖。如圖10所示,本申請實施例提供的編譯計算機(jī)語言的裝置還包括:編譯模塊76。其中,編譯模塊76,用于在遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點之后在查詢結(jié)果為選擇列表為選擇子句序列中的必選節(jié)點的情況下,編譯選擇列表中語法正確的列。此處需要說明的是,上述編譯模塊76對應(yīng)于實施例一中的步驟s209,該模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)。可選的,判斷模塊72包括:第五判斷單元。其中,第五判斷單元,用于在錯誤的語法單元為來源子句序列中的來源別名的情況下,判斷來源別名是否為來源子句序列中的可選節(jié)點。此處需要說明的是,上述第五判斷單元對應(yīng)于實施例一中的步驟s204中的step1,該模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)??蛇x的,圖11是根據(jù)本發(fā)明實施例二的再一種編譯計算機(jī)語言的裝置的結(jié)構(gòu)示意圖。如圖11所示,第一執(zhí)行模塊73包括:第一執(zhí)行單元731。其中,第一執(zhí)行單元731,用于在判斷結(jié)果為來源別名是來源子句序列中的可選節(jié)點的情況下,刪除來源別名對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。此處需要說明的是,上述第一執(zhí)行單元731對應(yīng)于實施例一中的步驟s206中的step1,該模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)??蛇x的,待編譯語句中的語法單元還包括:第一子句序列,其中,第一子句序列包括:條件表述序列;第一子句序列為待編譯語句中的可選節(jié)點,條件表述序列為第一子句序列的必選節(jié)點??蛇x的,查詢模塊74包括:第一查詢單元和第二查詢單元。其中,第一查詢單元,用于在待編譯語句中條件表述序列中的表述條件錯誤的情況下,查詢條件表述序列是否為第一子句序列中的可選節(jié)點;第二查詢單元,用于在查詢結(jié)果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節(jié)點。此處需要說明的是,上述第一查詢單元和第二查詢單元對應(yīng)于實施例一中的步驟s208中的step1和step2,兩個模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)。進(jìn)一步地,可選的,圖12是根據(jù)本發(fā)明實施例二的一種編譯計算機(jī)語言的裝置中第二執(zhí)行模塊的結(jié)構(gòu)示意圖。如圖12所示,第二執(zhí)行模塊75包括:第二執(zhí)行單元751。其中,第二執(zhí)行單元751,用于刪除第一子句序列對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。此處需要說明的是,上述第二執(zhí)行單元751對應(yīng)于實施例一中的步驟s210中的step1,該模塊與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述模塊作為裝置的一部分可以運(yùn)行在實施例一提供的計算機(jī)終端10中,可以通過軟件實現(xiàn),也可以通過硬件實現(xiàn)。綜上,本申請實施例提供的編譯計算機(jī)語言的方法可以應(yīng)用在對sql語言的編譯器中。也可應(yīng)用到任何其他計算機(jī)語言。本申請實施例提供的編譯計算機(jī)語言的方法可以用遞歸的判斷ast在其父節(jié)點中是否可選,實現(xiàn)對計算機(jī)語言的容錯分析,降低了編譯過程中的工作量,實現(xiàn)對計算機(jī)語言的最大化正確編譯。實施例3本發(fā)明的實施例還提供了一種存儲介質(zhì)??蛇x地,在本實施例中,上述存儲介質(zhì)可以用于保存上述實施例一所提供的編譯計算機(jī)語言的方法所執(zhí)行的程序代碼??蛇x地,在本實施例中,上述存儲介質(zhì)可以位于計算機(jī)網(wǎng)絡(luò)中計算機(jī)終端群中的任意一個計算機(jī)終端中,或者位于移動終端群中的任意一個移動終端中??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:依據(jù)預(yù)設(shè)語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結(jié)果為是的情況下,判斷語法單元所在的子節(jié)點是否為對應(yīng)的父節(jié)點中的可選節(jié)點;在判斷結(jié)果為是的情況下,刪除語法單元。可選地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:在判斷結(jié)果為否的情況下,遞歸查詢父節(jié)點是否為對應(yīng)上一級父節(jié)點中的可選節(jié)點;在查詢結(jié)果為是的情況下,刪除父節(jié)點對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節(jié)點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節(jié)點??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:判斷選擇列表中的每一列是否均存在語法錯誤;在判斷結(jié)果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;在判斷結(jié)果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節(jié)點;在判斷結(jié)果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:在查詢結(jié)果為選擇列表為選擇子句序列中的必選節(jié)點的情況下,編譯選擇列表中語法正確的列??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:判斷來源別名是否為來源子句序列中的可選節(jié)點??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:在判斷結(jié)果為來源別名是來源子句序列中的可選節(jié)點的情況下,刪除來源別名對應(yīng)的 語法單元,編譯待編譯語句中剩余正確的語法單元??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:查詢條件表述序列是否為第一子句序列中的可選節(jié)點;在查詢結(jié)果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節(jié)點??蛇x地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:刪除第一子句序列對應(yīng)的語法單元,編譯待編譯語句中剩余正確的語法單元。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。在本發(fā)明的上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可為個人計算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、只讀存儲器(rom,read-onlymemory)、隨機(jī)存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
:的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁12當(dāng)前第1頁12