TWI746520B - 編譯計算機語言的方法和裝置 - Google Patents
編譯計算機語言的方法和裝置 Download PDFInfo
- Publication number
- TWI746520B TWI746520B TW106105973A TW106105973A TWI746520B TW I746520 B TWI746520 B TW I746520B TW 106105973 A TW106105973 A TW 106105973A TW 106105973 A TW106105973 A TW 106105973A TW I746520 B TWI746520 B TW I746520B
- Authority
- TW
- Taiwan
- Prior art keywords
- node
- sequence
- grammatical
- unit
- compiled
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000001514 detection method Methods 0.000 claims abstract description 21
- 238000005516 engineering process Methods 0.000 abstract description 9
- 238000010586 diagram Methods 0.000 description 17
- 230000015654 memory Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 11
- 238000012018 process simulation test Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本發明公開了一種編譯計算機語言的方法和裝置。其中,該方法包括:依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元。本發明解決了由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的技術問題。
Description
本發明係關於計算機技術應用領域,具體而言,係關於一種編譯計算機語言的方法和裝置。
隨著計算機語言的廣泛運用,計算機語言的編譯成為了計算機語言在使用過程中不可或缺的關鍵步驟,由於人工編寫的計算機語言存在主觀性,在計算機語言的語法上會出現初始的語法錯誤,因此如何高效正確的對人工編寫的計算機語言進行編譯成為了本領域技術人員需要解決的問題。
對計算機語言進行分析,編譯,使其從人容易理解的語言變成計算機容易理解的語言,該編譯基本過程是將源碼變成認證Token序列,然後根據定義的語法grammer變成語法分析樹(Parse Tree,簡稱PST),再經過語義分析變成抽象語法樹(Abstract Syntax Tree,簡稱AST),這樣得到的AST就可以被計算機理解了。
但是問題在於,由於被分析編譯的源碼由工程人員輸入,經常有各種錯誤。對於簡單的Token,例如使用了不
該使用的字符,現有編譯器大部分可以在產生PST階段可以一定程度的容忍錯誤,儘量多的編譯剩餘的源碼以便發現更多錯誤。但是如果出錯的地方使其無法轉換成對應的AST,因為AST是一個樹形的嵌套結構,父節點依賴於所有字節點的正確產生,則會導致整個AST產生階段無法進行。AST無法產生會導致依賴AST的功能無法使用,例如在編譯中很多提示類型錯誤,在整合開發環境(Integrated Development Environment,簡稱IDE)中的提示用戶可能用到的函數等。
現有技術中對所解析的語言的每一個語法單元進行特殊處理,判斷其是否可以被允許進入更進一步的分析。但是工作量大,現實中對於一種計算機語言難以完整實現。依據上述提到的方法儘量產生AST,但是因為工作量太大且容易出錯所以現實中難以實現。
針對上述由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的問題,目前尚未提出有效的解決方案。
本發明實施例提供了一種編譯計算機語言的方法和裝置,以至少解決由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的技術問題。
根據本發明實施例的一個方面,提供了一種編譯計算
機語言的方法,包括:依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元。
根據本發明實施例的另一方面,還提供了一種編譯計算機語言的裝置,包括:檢測模組,用於依據預設語法檢測待編譯語句是否存在錯誤的語法單元;判斷模組,用於在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;第一執行模組,用於在判斷結果為是的情況下,刪除語法單元。
在本發明實施例中,通過依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元,達到了在計算機語言存在多出錯誤的同時提升編譯成功率的目的,從而實現了提升編譯效率的技術效果,進而解決了由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的技術問題。
10‧‧‧計算機終端
102‧‧‧處理器
104‧‧‧記憶體
106‧‧‧傳輸裝置
71‧‧‧檢測模組
72‧‧‧判斷模組
73‧‧‧第一執行模組
74‧‧‧查詢模組
75‧‧‧第二執行模組
721‧‧‧第一判斷單元
722‧‧‧第二判斷單元
723‧‧‧第三判斷單元
724‧‧‧第四判斷單元
76‧‧‧編譯模組
731‧‧‧第一執行單元
751‧‧‧第二執行單元
此處所說明的附圖用來提供對本發明的進一步理解,構成本發明的一部分,本發明的示意性實施例及其說明用於解釋本發明,並不構成對本發明的不當限定。在附圖中:
圖1是本發明實施例的一種編譯計算機語言的方法的計算機終端的硬體結構框圖;圖2是根據本發明實施例一的編譯計算機語言的方法的流程圖;圖3是根據本發明實施例一的簡化的SQL中的SELECT語句的目標AST樹的結構示意圖;圖4是根據本發明實施例一的一種編譯計算機語言的方法的流程圖;圖5是根據本發明實施例一的另一種編譯計算機語言的方法的流程圖;圖6是根據本發明實施例一的又一種編譯計算機語言的方法的流程圖;圖7是根據本發明實施例二的編譯計算機語言的裝置的結構示意圖;圖8是根據本發明實施例二的一種編譯計算機語言的裝置的結構示意圖;圖9是根據本發明實施例二的另一種編譯計算機語言的裝置的結構示意圖;圖10是根據本發明實施例二的又一種編譯計算機語言的裝置的結構示意圖;圖11是根據本發明實施例二的再一種編譯計算機語言的裝置的結構示意圖;圖12是根據本發明實施例二的一種編譯計算機語言的裝置中第二執行模組的結構示意圖。
為了使本技術領域的人員更好地理解本發明方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分的實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬本發明保護的範圍。
需要說明的是,本發明的說明書和請求項及上述附圖中的術語“第一”、“第二”等是用於區別類似的對象,而不必用於描述特定的順序或先後次序。應該理解這樣使用的資料在適當情況下可以互換,以便這裡描述的本發明的實施例能夠以除了在這裡圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在於覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統、產品或設備不必限於清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對於這些過程、方法、產品或設備固有的其它步驟或單元。
語法分析樹:Parse Tree,簡稱PST;抽象語法樹:Abstract Syntax Tree,簡稱AST。
根據本發明實施例,還提供了一種編譯計算機語言的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機系統中執行,並且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同於此處的順序執行所示出或描述的步驟。
本發明實施例一所提供的方法實施例可以在行動終端、計算機終端或者類似的運算裝置中執行。以運行在計算機終端上為例,圖1是本發明實施例的一種編譯計算機語言的方法的計算機終端的硬體結構框圖。如圖1所示,計算機終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限於微處理器MCU或可編程邏輯器件FPGA等的處理裝置)、用於儲存資料的記憶體104、以及用於通信功能的傳輸模組106。本領域普通技術人員可以理解,圖1所示的結構僅為示意,其並不對上述電子裝置的結構造成限定。例如,計算機終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
記憶體104可用於儲存應用軟體的軟體程式以及模組,如本發明實施例中的編譯計算機語言的方法對應的程式指令/模組,處理器102通過運行儲存在記憶體104內的軟體程式以及模組,從而執行各種功能應用以及資料處理,即實現上述的應用程式的漏洞檢測方法。記憶體104可包括高速隨機記憶體,還可包括非揮發性記憶體,如一
個或者多個磁性儲存裝置、快閃記憶體、或者其他非揮發性固態記憶體。在一些實例中,記憶體104可進一步包括相對於處理器102遠程設置的記憶體,這些遠程記憶體可以通過網路連接至計算機終端10。上述網路的實例包括但不限於網際網路、企業內部網、區域網、行動通信網及其組合。
傳輸裝置106用於經由一個網路接收或者發送資料。上述的網路具體實例可包括計算機終端10的通信供應商提供的無線網路。在一個實例中,傳輸裝置106包括一個網路適配器(Network Interface Controller,NIC),其可通過基站與其他網路設備相連從而可與網際網路進行通訊。在一個實例中,傳輸裝置106可以為射頻(Radio Frequency,RF)模組,其用於通過無線方式與網際網路進行通訊。
在上述運行環境下,本發明提供了如圖2所示的編譯計算機語言的方法。圖2是根據本發明實施例一的編譯計算機語言的方法的流程圖。
步驟S202,依據預設語法檢測待編譯語句是否存在錯誤的語法單元;本發明上述步驟S202中,本發明實施例提供的編譯計算機語言的方法可以適用於將源碼變成Token序列,然後根據定義的語法grammer變成PST,再經過語義分析變成AST的計算機語言編譯過程。為了規避現有技術問題中由於一旦PST對應的地方無法轉換成AST,會導致整
個AST產生階段無法進行,AST無法產生會導致依賴AST的功能無法使用的問題發生。本發明實施例提供的編譯計算機語言的方法中在實現計算機語言編譯的過程中,首先,遍歷PST計算機語言中是否存在有錯誤的語法單元。
具體的,假設一條待編譯語句,“SELECT userId,userName FROM user t WHERE userAge>20”,根據預設語法,一條待編譯語句中需要包含“Select”,“FROM”和/或“WHERE”部分,由上述提供的待編譯語句可知,Select”,“FROM”和“WHERE”中的語義清楚,並且不存在符號錯誤,且存在語序邏輯,所以在檢測待編譯語句的過程中,若“Select”,“FROM”和/或“WHERE”沒有語法錯誤,則認為可以產生完整正確的AST,其中,需要說明的是“Select”,“FROM”和/或“WHERE”即,本發明實施例提供的語法單元。
步驟S204,在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;基於步驟S202的檢測,本發明上述步驟S204中,在檢測結果為待編譯語句存在錯誤的語法單元的情況下,先判斷該語法單元所在的子節點是否為對應的父節點中的可選節點。其中,基於步驟S202中提到的AST,由於AST是一個樹形的嵌套結構,父節點依賴於所有字節點的正確產生,並且,在本發明實施例提供的編譯計算機語言的方法中,當可選節點出錯時,可以剔除該可選節點對應的語
法單元,保障必選節點的正確編譯,進而保障AST產生的最大正確AST。即,在判斷結果為是的情況下,執行步驟S206;在判斷結果為否的情況下,執行步驟S208。
具體的,圖3是根據本發明實施例一的簡化的SQL中的SELECT語句的目標AST樹的結構示意圖;如圖3所示,目標AST樹中所有標有‘?’後綴的節點在其父節點中是可選的,例如,選擇語句SelectStatement必須有選擇子句序列SelectClause,來源子句序列FromClause,而WHERE子句序列WhereClause不一定有。沒有WhereClause時候SelectStatement仍然是正確的,但沒有SelectClause和FromClause就不正確,即非法語句。
步驟S206,在判斷結果為是的情況下,刪除語法單元;基於步驟S204的判斷結果,本發明上述步驟S206中,在判斷結果為語法單元所在的子節點是對應父節點中的可選節點的情況下,將刪除該語法單元。
具體的,仍舊結合步驟S204中的圖3,假設待編譯語句中的FROM子句序列中來源別名TableAlias存在錯誤,在判斷該來源別名TableAlias為FROM子句序列中的可選節點的情況下,刪除該條件表述序列,編譯SelectClause和FromClause中剩餘正確的語法單元部分。
此外,圖4是根據本發明實施例一的一種編譯計算機語言的方法的流程圖。如圖4所示,當步驟S202依據預設語法檢測待編譯語句中的語法單元時,即,在檢測結果
為否的情況下,編譯該待編譯語句中的語法單元。
由上可知,本發明上述實施例一所提供的方案,通過依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元,達到了在計算機語言存在多出錯誤的同時提升編譯成功率的目的,從而實現了提升編譯效率的技術效果,進而解決了由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的技術問題。
可選的,圖5是根據本發明實施例一的另一種編譯計算機語言的方法的流程圖,如圖5所示,在步驟S204判斷語法單元所在的子節點是否為對應的父節點中的可選節點之後,本發明實施例提供的編譯計算機語言的方法還包括:步驟S208,在判斷結果為否的情況下,遞歸查詢父節點是否為對應上一級父節點中的可選節點;基於步驟S204中的判斷結果,本發明上述步驟S208中,在判斷結果為語法單元所在的子節點不是對應父節點中的可選節點的情況下,即,該語法單元所在的子節點為對應父節點中的必選節點,將遞歸查詢該語法單元所在的子節點對應的父節點是否為該父節點中的可選節點。
具體的,仍舊結合步驟S204中的圖3,假設待編譯語句中的WHERE子句序列中的條件表述序列存在錯誤,
如圖3所示,該條件表述序列Condition不是WhereCondition中的可選節點,此時需要查詢繼續查看WhereCondition的父節點WhereCluase是否為可選節點,如圖3所示,WhereCondition在WhereCluase中仍然不是可選節點,將查詢WhereCluase是否為父節點SelectStatement中的可選節點。
其中,如圖3所示,在本發明實施例提供的編譯計算機語言的方法中,遞歸查詢父節點是否為對應上一級父節點中的可選節點的方式具體如下:方式一,查詢該語法單元所在的子節點為對應父節點的上一級節點,層層遞進查詢;假設當前待編譯語句為“SELECT userId,userName FROM user t WHERE userAge * 20”。
由此可見,WhereClause中的Expression存在錯誤,即,“userAge * 20”中的“*”為圖3中不可識別標識符。
因此,如圖3所示,Expression的父節點為Condition,由於該Condition為必選節點,因此繼續查詢該Condition的父節點WhereClause。
方式二,查詢該語法單元所在的子節點為對應父節點所屬分類,查詢分類節點處的節點類型。
仍舊以方式一中的舉例為例,若WhereClause中的Expression存在錯誤,則由於Expression為WhereClause中的語法單元,所以直接查詢Expression所屬的
WhereClause是否為可選節點。
結合方式一和方式二,本發明實施例提供的編譯計算機語言的方法中以方式一的實現方式為較佳方式為例進行說明,以實現本發明實施例提供的編譯計算機語言的方法為準,具體不做限定。
步驟S210,在查詢結果為是的情況下,刪除父節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
基於步驟S208中遞歸查詢父節點是否為對應父節點中的可選節點,本發明上述步驟S210中,在查詢結果為該父節點對應的父節點中的可選節點時,刪除該父節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
具體的,仍舊以步驟S208中的示例為例,在查詢得到WhereCluase是為父節點SelectStatement中的可選節點的情況下,將整個對應WhereClause的部分裁減,其他部分仍然可以產生SelectStatement的合法AST,只是不包含有錯的WhereClause,仍然可以用來支持後續所有基於AST的功能。
本發明實施例可以根據語法結構中對於一個AST節點在其父節點中是否是可選的資訊,自動的對有錯誤的PST節點進行裁減,使所有能夠產生正確AST的PST還能夠產生AST,所有會導致錯誤AST的節點都被忽略。產生的AST剛好是能夠產生的最大正確AST,仍然能夠最大的支持基於AST的應用。節點在其父節點中是否可
選可以從要分析的計算機語言的語法定義中自動取得,一般的語法定義和編譯代碼產生器,例如Yacc,Antlr,JFlex等,都可以直接或間接提供此功能。
可選的,待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節點。
可選的,在錯誤的語法單元為選擇子句序列中的選擇列表的情況下,步驟S204中判斷語法單元所在的子節點是否為對應的父節點中的可選節點包括:
Step1,判斷選擇列表中的每一列是否均存在語法錯誤;本發明上述步驟S204中的Step1中,在待編譯語句中的選擇子句序列中的選擇列表存在錯誤的情況下,判斷該選擇列表中的每一列是否均存在語法錯誤。
具體的,結合圖3所示,在選擇列表中每一列Column1...ColumnN都是可選的,因此需要判斷該選擇列表中的每一列是否都存在語法錯誤。在判斷結果為是的情況下,執行步驟Step 4,在判斷結果為否的情況下,執行步驟Step2和Step3。
Step2,在判斷結果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;基於Step1中的判斷,本發明上述步驟Step2中,在
判斷結果為選擇列表中的每一列並不全部存在語法錯誤的情況下,需要判斷該選擇列表中的至少一列是否存在語法錯誤。
具體的,結合圖3,在假設選擇子句序列SelectCluase中的選擇列表SelectList中並不是每一列都存在語法錯誤的情況下,需要判斷選擇列表SelectList中存在語法錯誤的列的個數。
Step3,在判斷結果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節點;基於Step2中的判斷,本發明上述步驟Step3中,在判斷結果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節點。
具體的,結合圖3,如圖3所示,在判斷結果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表SelectList是否為選擇子句序列SelectCluase中的可選節點。
Step4,在判斷結果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句。
本發明上述步驟Step4中,在判斷結果為選擇列表中的每一列均存在語法錯誤的情況下,如果所有列Column都有錯,會導致整個SelectStatement都無法正確產生,但也是預期的結果,因為沒有選擇列表的Select語句就是不合法的。
可選的,圖6是根據本發明實施例一的又一種編譯計算機語言的方法的流程圖,如圖6所示,在步驟S208中遞歸查詢父節點是否為對應上一級父節點中的可選節點之後,本發明實施例提供的編譯計算機語言的方法還包括:步驟S209,在查詢結果為選擇列表為選擇子句序列中的必選節點的情況下,編譯選擇列表中語法正確的列。
本發明上述步驟S209中,在選擇子句序列中存在錯誤的語法單元的情況下,基於步驟S208遞歸查詢父節點是否為對應父節點中的可選節點之後,在查詢結果為選擇列表為選擇子句序列中的必選節點的情況下,編譯選擇列表中語法正確的列。
具體的,仍舊以上述步驟S204中的示例為例,假設選擇列表SelectList中存在錯誤的列Column,則遞歸查詢該Column的父節點SelectList是否為可選節點,在查詢結果為父節點SelectList為父節點SelectCluase中的必選結果的情況下,編譯SelectList中語法正確的列。
可選的,在錯誤的語法單元為來源子句序列中的來源別名的情況下,步驟S204中判斷語法單元所在的子節點是否為對應的父節點中的可選節點包括:Step1,判斷來源別名是否為來源子句序列中的可選節點。
本發明上述步驟S204中的Step1中,在錯誤的語法單元為來源子句序列中的來源別名的情況下,需判斷該來源別名是否為來源子句序列中的可選節點。
進一步地,可選的,步驟S206中在判斷結果為是的情況下,刪除語法單元包括:Step1,在判斷結果為來源別名是來源子句序列中的可選節點的情況下,刪除來源別名對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
基於上述步驟S204的判斷,本發明上述步驟S206中的Step1中,在判斷結果為來源別名是來源子句序列中的可選節點的情況下,刪除來源別名對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
具體的,如圖3所示,該來源別名TableAlias為可選節點,因此刪除該來源節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。即,假設“SELECT userId,userName FROM user‘@#$%’WHERE userAge>20”;語句中對應Alias的節點‘@#$%’是個非法節點,無法被翻譯成正常的Alias AST。此時查看Alias確定其在父節點,也就是Table中,是可選節點。則不產生Alias AST,父節點Table中包含值為‘user’的TableName節點,仍然是個合法的AST。語句中其他部分沒有任何問題,產生的完整AST樹種除了沒有Table的Alias,仍然可以用來支持後續所有基於AST的功能。
可選的,待編譯語句中的語法單元還包括:第一子句序列,其中,第一子句序列包括:條件表述序列;第一子句序列為待編譯語句中的可選節點,條件表述序列為第一子句序列的必選節點。
進一步地,可選的,在待編譯語句中條件表述序列中的表述條件錯誤的情況下,步驟S208中遞歸查詢父節點是否為對應父節點中的可選節點包括:
Step1,查詢條件表述序列是否為第一子句序列中的可選節點;本發明上述步驟S208中的Step1中,在待編譯語句中條件表述序列中的表述條件錯誤的情況下,需要查詢該條件表述序列所在的子節點是否為第一子句序列中的可選節點,在查詢結果為否的情況下執行步驟Step2。
Step2,在查詢結果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節點。
基於Step1中的查詢,本發明上述步驟Step2中,在查詢結果為該條件表述序列不是該第一子句序列中的可選節點的情況下,需要查詢第一子句序列是否為待編譯語句中的可選節點。
具體的,結合圖3,假設存在待編譯語句“SELECT userId,userName FROM user t WHERE userAge * 20”;其中,語句中對應Condition的節點中關係操作符非法,‘*’不是一個可被接受的關係操作符,無法被翻譯成正常的AST。此時查看條件表述序列對應的父節點,也就是Condition中,不是可選節點,導致其父節點Condition也不能產生AST,查詢Condition在條件表述序列WhereCondition中是否可選,若是必選節點,則繼續查看條件表述序列WhereCondition的父節點第一子句序列
WhereCluase,查詢該條件表述序列WhereCondition在第一子句序列WhereCluase中是否為可選節點,在查詢結果為是的情況下,則繼續查看第一子句序列WhereCluase在父節點SelectStatement中是否為可選節點。
進一步地,可選的,步驟S210中刪除父節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元包括:Step1,刪除第一子句序列對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
本發明上述步驟S210中的Step1中,在查詢結果為該父節點為該父節點對應父節點中的可選節點的情況下,將刪除該第一子句序列對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
具體的,仍舊以上述步驟S208中的Step1和Step2中的示例為例,在查詢得到該第一子句序列WhereClause為可選節點,則將整個對應WhereClause的部分裁減,其他部分仍然可以產生SelectStatement的合法AST,只是不包含有錯的WhereClause,仍然可以用來支持後續所有基於AST的功能。
結合步驟S202至步驟S210,本發明實施例提供的編譯計算機語言的方法中可以包含三種語法錯誤,具體如下:
1.完全正確的輸入源碼:“SELECT userId,userName FROM user t WHERE userAge>20”;
此語句沒有任何問題,可產生完整AST樹。
2.錯誤情況一,單一可選節點出錯:“SELECT userId,userName FROM user‘@#$%’WHERE userAge>20”;語句中對應Alias的節點‘@#$%’是個非法節點,無法被翻譯成正常的Alias AST。此時查看Alias確定其在父節點,也就是Table中,是可選節點。則不產生Alias AST,父節點Table中包含值為‘user’的TableName節點,仍然是個合法的AST。語句中其他部分沒有任何問題,產生的完整AST樹種除了沒有Table的Alias,仍然可以用來支持後續所有基於AST的功能。
3.錯誤情況二,單一不可選節點出錯:“SELECT userId,userName FROM user t WHERE userAge * 20”;語句中對應Condition的節點中關係操作符非法,‘*’不是一個可被接受的關係操作符,無法被翻譯成正常的AST。此時查看其在父節點,也就是Condition中,不是可選節點,導致其父親節點Condition也不能產生AST,即使其其他節點都沒有錯誤。此時繼續查看Condition在其父節點中是否可選,如果可選則裁減此部分的PST,如果不可選遞歸的查看父節點中是否可選。對於此例,Condition在WhereCondition中不是可選,而是必須項,所以繼續查看WhereCondition的父節點WhereCluase,發現WhereCondition在WhereCluase中仍然不是可選節點,
則繼續查看WhereCondition的父節點SelectStatement,發現可選,則將整個對應WhereClause的部分裁減,其他部分仍然可以產生SelectStatement的合法AST,只是不包含有錯的WhereClause,仍然可以用來支持後續所有基於AST的功能。
4.錯誤情況三,一或多個可選循環節點出錯:“SELECT userId,user@#ame,userAge,&usexxx FROM user t WHERE userAge>20”;AST中Column1...ColumnN共同組成Select列表,其中任何一個都是可選的,但是最終列表中至少要有一個。此示例語句中對應Column2,Column4節點中有非法字符,無法被翻譯成Column的AST。此時查看其父節點,也就是SelectList中,是否還有其他合法的Condition,發現還有Column1,Column3正確,則裁減有錯的Column2,Column4,仍然可以包含Column1,Column3的正確SelectList節點。最後仍然可以產生合法的SelectStatement,只是不包含有錯的兩個Column,仍然可以用來支持後續所有基於AST的功能。此例中,如果所有Column都有錯,按照此例與例三種的規則,會導致整個SelectStatement都無法正確產生,但也是預期的結果,因為沒有選擇列表的Select語句就是不合法的。
綜上,本發明實施例提供的編譯計算機語言的方法可以應用在對SQL語言的編譯器中。也可應用到任何其他計算機語言。本發明實施例提供的編譯計算機語言的方法
可以用遞歸的判斷AST在其父節點中是否可選,實現對計算機語言的容錯分析,降低了編譯過程中的工作量,實現對計算機語言的最大化正確編譯。
需要說明的是,對於前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明並不受所描述的動作順序的限制,因為依據本發明,某些步驟可以採用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬於較佳實施例,所涉及的動作和模組並不一定是本發明所必須的。
通過以上的實施方式的描述,本領域的技術人員可以清楚地瞭解到根據上述實施例的編譯計算機語言的方法可借助軟體加必需的通用硬體平台的方式來實現,當然也可以通過硬體,但很多情況下前者是更佳的實施方式。基於這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟體產品的形式體現出來,該計算機軟體產品儲存在一個儲存媒體(如ROM/RAM、磁碟、光碟)中,包括若干指令用以使得一台終端設備(可以是手機,計算機,伺服器,或者網路設備等)執行本發明各個實施例所述的方法。
根據本發明實施例,還提供了一種用於實施上述方法實施例的裝置實施例,本發明上述實施例所提供的裝置可
以在計算機終端上運行。
圖7是根據本發明實施例二的編譯計算機語言的裝置的結構示意圖。
如圖7所示,該編譯計算機語言的裝置可以包括:檢測模組71、判斷模組72、第一執行模組73。
其中,檢測模組71,用於依據預設語法檢測待編譯語句是否存在錯誤的語法單元;判斷模組72,用於在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;第一執行模組73,用於在判斷結果為是的情況下,刪除語法單元。
由上可知,本發明上述實施例二所提供的方案,通過依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元,達到了在計算機語言存在多出錯誤的同時提升編譯成功率的目的,從而實現了提升編譯效率的技術效果,進而解決了由於現有技術中缺少對計算機語言進行容錯編譯的技術,導致的計算機語言編譯效率低的技術問題。
此處需要說明的是,上述檢測模組71、判斷模組72和第一執行模組73對應於實施例一中的步驟S202至步驟S206,三個模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供
的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,圖8是根據本發明實施例二的一種編譯計算機語言的裝置的結構示意圖,如圖8所示,本發明實施例提供的編譯計算機語言的裝置還包括:查詢模組74和第二執行模組75。
其中,查詢模組74,用於在判斷語法單元所在的子節點是否為對應的父節點中的可選節點之後,在判斷結果為否的情況下,遞歸查詢父節點是否為對應上一級父節點中的可選節點;第二執行模組75,用於在查詢結果為是的情況下,刪除父節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
此處需要說明的是,上述查詢模組74和第二執行模組75對應於實施例一中的步驟S208和步驟S210,兩個模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節點。
可選的,圖9是根據本發明實施例二的另一種編譯計
算機語言的裝置的結構示意圖。如圖9所示,判斷模組72包括:第一判斷單元721、第二判斷單元722、第三判斷單元723和第四判斷單元724。
其中,第一判斷單元721,用於在錯誤的語法單元為選擇子句序列中的選擇列表的情況下,判斷選擇列表中的每一列是否均存在語法錯誤;第二判斷單元722,用於在判斷結果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;第三判斷單元723,用於在判斷結果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是否為選擇子句序列中的可選節點;第四判斷單元724,用於在判斷結果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句。
此處需要說明的是,上述第一判斷單元721、第二判斷單元722、第三判斷單元723和第四判斷單元724對應於實施例一中的步驟S204中的Step1至Step4,四個模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,圖10是根據本發明實施例二的又一種編譯計算機語言的裝置的結構示意圖。如圖10所示,本發明實施例提供的編譯計算機語言的裝置還包括:編譯模組76。
其中,編譯模組76,用於在遞歸查詢父節點是否為
對應上一級父節點中的可選節點之後在查詢結果為選擇列表為選擇子句序列中的必選節點的情況下,編譯選擇列表中語法正確的列。
此處需要說明的是,上述編譯模組76對應於實施例一中的步驟S209,該模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,判斷模組72包括:第五判斷單元。
其中,第五判斷單元,用於在錯誤的語法單元為來源子句序列中的來源別名的情況下,判斷來源別名是否為來源子句序列中的可選節點。
此處需要說明的是,上述第五判斷單元對應於實施例一中的步驟S204中的Step1,該模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,圖11是根據本發明實施例二的再一種編譯計算機語言的裝置的結構示意圖。如圖11所示,第一執行模組73包括:第一執行單元731。
其中,第一執行單元731,用於在判斷結果為來源別名是來源子句序列中的可選節點的情況下,刪除來源別名
對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
此處需要說明的是,上述第一執行單元731對應於實施例一中的步驟S206中的Step1,該模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
可選的,待編譯語句中的語法單元還包括:第一子句序列,其中,第一子句序列包括:條件表述序列;第一子句序列為待編譯語句中的可選節點,條件表述序列為第一子句序列的必選節點。
可選的,查詢模組74包括:第一查詢單元和第二查詢單元。
其中,第一查詢單元,用於在待編譯語句中條件表述序列中的表述條件錯誤的情況下,查詢條件表述序列是否為第一子句序列中的可選節點;第二查詢單元,用於在查詢結果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節點。
此處需要說明的是,上述第一查詢單元和第二查詢單元對應於實施例一中的步驟S208中的Step1和Step2,兩個模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終
端10中,可以通過軟體實現,也可以通過硬體實現。
進一步地,可選的,圖12是根據本發明實施例二的一種編譯計算機語言的裝置中第二執行模組的結構示意圖。如圖12所示,第二執行模組75包括:第二執行單元751。
其中,第二執行單元751,用於刪除第一子句序列對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
此處需要說明的是,上述第二執行單元751對應於實施例一中的步驟S210中的Step1,該模組與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模組作為裝置的一部分可以運行在實施例一提供的計算機終端10中,可以通過軟體實現,也可以通過硬體實現。
綜上,本發明實施例提供的編譯計算機語言的方法可以應用在對SQL語言的編譯器中。也可應用到任何其他計算機語言。本發明實施例提供的編譯計算機語言的方法可以用遞歸的判斷AST在其父節點中是否可選,實現對計算機語言的容錯分析,降低了編譯過程中的工作量,實現對計算機語言的最大化正確編譯。
本發明的實施例還提供了一種儲存媒體。可選地,在本實施例中,上述儲存媒體可以用於保存上述實施例一所提供的編譯計算機語言的方法所執行的程式代碼。
可選地,在本實施例中,上述儲存媒體可以位於計算機網路中計算機終端群中的任意一個計算機終端中,或者位於行動終端群中的任意一個行動終端中。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除語法單元。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:在判斷結果為否的情況下,遞歸查詢父節點是否為對應上一級父節點中的可選節點;在查詢結果為是的情況下,刪除父節點對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,選擇子句序列包括:選擇列表,選擇列表中任意一列均為選擇列表中的可選節點;來源子句序列包括:來源表名和/或來源別名,來源別名為來源子句序列中的可選節點。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:判斷選擇列表中的每一列是否均存在語法錯誤;在判斷結果為否的情況下,判斷選擇列表中的至少一列是否存在語法錯誤;在判斷結果為選擇列表中的至少一列存在語法錯誤的情況下,判斷選擇列表是
否為選擇子句序列中的可選節點;在判斷結果為選擇列表中的每一列均存在語法錯誤的情況下,判定待編譯語句為非法語句。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:在查詢結果為選擇列表為選擇子句序列中的必選節點的情況下,編譯選擇列表中語法正確的列。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:判斷來源別名是否為來源子句序列中的可選節點。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:在判斷結果為來源別名是來源子句序列中的可選節點的情況下,刪除來源別名對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:查詢條件表述序列是否為第一子句序列中的可選節點;在查詢結果為否的情況下,查詢第一子句序列是否為待編譯語句中的可選節點。
可選地,在本實施例中,儲存媒體被設置為儲存用於執行以下步驟的程式代碼:刪除第一子句序列對應的語法單元,編譯待編譯語句中剩餘正確的語法單元。
上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
在本發明的上述實施例中,對各個實施例的描述都各
有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本發明所提供的幾個實施例中,應該理解到,所揭露的技術內容,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以整合到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些介面,單元或模組的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分佈到多個網路單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以整合在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元整合在一個單元中。上述整合的單元既可以採用硬體的形式實現,也可以採用軟體功能單元的形式實現。
所述整合的單元如果以軟體功能單元的形式實現並作為獨立的產品銷售或使用時,可以儲存在一個計算機可讀取儲存媒體中。基於這樣的理解,本發明的技術方案本質
上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該計算機軟體產品儲存在一個儲存媒體中,包括若干指令用以使得一台計算機設備(可為個人計算機、伺服器或者網路設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的儲存媒體包括:USB隨身碟、唯讀記憶體(ROM,Read-Only Memory)、隨機存取記憶體(RAM,Random Access Memory)、行動硬碟、磁碟或者光碟等各種可以儲存程式代碼的媒體。
以上所述僅是本發明的較佳實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護範圍。
Claims (18)
- 一種編譯計算機語言的方法,包括:依據預設語法檢測待編譯語句是否存在錯誤的語法單元;在檢測結果為是的情況下,判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點;在判斷結果為是的情況下,刪除所述語法單元;在所述判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點之後,所述方法還包括:在判斷結果為否的情況下,遞歸查詢所述父節點是否為對應上一級父節點中的所述可選節點;在查詢結果為是的情況下,刪除所述父節點對應的所述語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
- 根據請求項1所述的方法,其中,所述待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,所述選擇子句序列包括:選擇列表,所述選擇列表中任意一列均為所述選擇列表中的所述可選節點;所述來源子句序列包括:來源表名和/或來源別名,所述來源別名為所述來源子句序列中的所述可選節點。
- 根據請求項2所述的方法,其中,在所述錯誤的語法單元為所述選擇子句序列中的所述選擇列表的情況下,所述判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點包括:判斷所述選擇列表中的每一列是否均存在語法錯誤; 在判斷結果為否的情況下,判斷所述選擇列表中的至少一列是否存在語法錯誤;在判斷結果為所述選擇列表中的至少一列存在語法錯誤的情況下,判斷所述選擇列表是否為所述選擇子句序列中的所述可選節點;在判斷結果為所述選擇列表中的每一列均存在語法錯誤的情況下,判定所述待編譯語句為非法語句。
- 根據請求項3所述的方法,其中,在所述遞歸查詢所述父節點是否為對應上一級父節點中的所述可選節點之後,所述方法還包括:在查詢結果為所述選擇列表為所述選擇子句序列中的必選節點的情況下,編譯所述選擇列表中語法正確的列。
- 根據請求項2所述的方法,其中,在所述錯誤的語法單元為所述來源子句序列中的所述來源別名的情況下,所述判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點包括:判斷所述來源別名是否為所述來源子句序列中的所述可選節點。
- 根據請求項5所述的方法,其中,所述在判斷結果為是的情況下,刪除所述語法單元包括:在判斷結果為所述來源別名是所述來源子句序列中的所述可選節點的情況下,刪除所述來源別名對應的語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
- 根據請求項2所述的方法,其中,所述待編譯語 句中的語法單元還包括:第一子句序列,其中,所述第一子句序列包括:條件表述序列;所述第一子句序列為所述待編譯語句中的可選節點,所述條件表述序列為所述第一子句序列的必選節點。
- 根據請求項7所述的方法,其中,在所述待編譯語句中所述條件表述序列中的表述條件錯誤的情況下,所述遞歸查詢所述父節點是否為對應上一級父節點中的所述可選節點包括:查詢所述條件表述序列是否為所述第一子句序列中的所述可選節點;在查詢結果為否的情況下,查詢所述第一子句序列是否為所述待編譯語句中的所述可選節點。
- 根據請求項8所述的方法,其中,所述刪除所述父節點對應的所述語法單元,編譯所述待編譯語句中剩餘正確的語法單元包括:刪除所述第一子句序列對應的所述語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
- 一種編譯計算機語言的裝置,包括:檢測模組,用於依據預設語法檢測待編譯語句是否存在錯誤的語法單元;判斷模組,用於在檢測結果為是的情況下,判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點;第一執行模組,用於在判斷結果為是的情況下,刪除 所述語法單元;所述裝置包括:查詢模組,用於在所述判斷所述語法單元所在的子節點是否為對應的父節點中的可選節點之後,在判斷結果為否的情況下,遞歸查詢所述父節點是否為對應上一級父節點中的所述可選節點;第二執行模組,用於在查詢結果為是的情況下,刪除所述父節點對應的所述語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
- 根據請求項10所述的裝置,其中,所述待編譯語句中的語法單元包括:選擇子句序列和來源子句序列,其中,所述選擇子句序列包括:選擇列表,所述選擇列表中任意一列均為所述選擇列表中的所述可選節點;所述來源子句序列包括:來源表名和/或來源別名,所述來源別名為所述來源子句序列中的所述可選節點。
- 根據請求項11所述的裝置,其中,所述判斷模組包括:第一判斷單元,用於在所述錯誤的語法單元為所述選擇子句序列中的所述選擇列表的情況下,判斷所述選擇列表中的每一列是否均存在語法錯誤;第二判斷單元,用於在判斷結果為否的情況下,判斷所述選擇列表中的至少一列是否存在語法錯誤;第三判斷單元,用於在判斷結果為所述選擇列表中的至少一列存在語法錯誤的情況下,判斷所述選擇列表是否為所述選擇子句序列中的所述可選節點; 第四判斷單元,用於在判斷結果為所述選擇列表中的每一列均存在語法錯誤的情況下,判定所述待編譯語句為非法語句。
- 根據請求項12所述的裝置,其中,所述裝置還包括:編譯模組,用於在所述遞歸查詢所述父節點是否為對應上一級父節點中的所述可選節點之後,在查詢結果為所述選擇列表為所述選擇子句序列中的必選節點的情況下,編譯所述選擇列表中語法正確的列。
- 根據請求項11所述的裝置,其中,所述判斷模組包括:第五判斷單元,用於在所述錯誤的語法單元為所述來源子句序列中的所述來源別名的情況下,判斷所述來源別名是否為所述來源子句序列中的所述可選節點。
- 根據請求項14所述的裝置,其中,所述第一執行模組包括:第一執行單元,用於在判斷結果為所述來源別名是所述來源子句序列中的所述可選節點的情況下,刪除所述來源別名對應的語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
- 根據請求項11所述的裝置,其中,所述待編譯語句中的語法單元還包括:第一子句序列,其中,所述第一子句序列包括:條件表述序列;所述第一子句序列為所述待編譯語句中的可選節點,所述條件表述序列為所述第 一子句序列的必選節點。
- 根據請求項16所述的裝置,其中,所述查詢模組包括:第一查詢單元,用於在所述待編譯語句中所述條件表述序列中的表述條件錯誤的情況下,查詢所述條件表述序列是否為所述第一子句序列中的所述可選節點;第二查詢單元,用於在查詢結果為否的情況下,查詢所述第一子句序列是否為所述待編譯語句中的所述可選節點。
- 根據請求項17所述的裝置,其中,所述第二執行模組包括:第二執行單元,用於刪除所述第一子句序列對應的所述語法單元,編譯所述待編譯語句中剩餘正確的語法單元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610200937.2 | 2016-03-31 | ||
CN201610200937.2A CN107291521B (zh) | 2016-03-31 | 2016-03-31 | 编译计算机语言的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201737119A TW201737119A (zh) | 2017-10-16 |
TWI746520B true TWI746520B (zh) | 2021-11-21 |
Family
ID=59962600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106105973A TWI746520B (zh) | 2016-03-31 | 2017-02-22 | 編譯計算機語言的方法和裝置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10606568B2 (zh) |
EP (1) | EP3438818B1 (zh) |
CN (1) | CN107291521B (zh) |
TW (1) | TWI746520B (zh) |
WO (1) | WO2017167118A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
US11809839B2 (en) | 2022-01-18 | 2023-11-07 | Robert Lyden | Computer language and code for application development and electronic and optical communication |
US20230418574A1 (en) * | 2022-06-28 | 2023-12-28 | Microsoft Technology Licensing, Llc | Using a semantic tree of a compiler to execute a semantic code query against source code |
CN115830200B (zh) * | 2022-11-07 | 2023-05-12 | 北京力控元通科技有限公司 | 三维模型的生成方法、三维图形的渲染方法、装置及设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020078406A1 (en) * | 2000-10-24 | 2002-06-20 | Goh Kondoh | Structure recovery system, parsing system, conversion system, computer system, parsing method, storage medium, and program transmission apparatus |
CN101499015A (zh) * | 2009-03-18 | 2009-08-05 | 北京和利时系统工程有限公司 | 一种高级语言转换成其它高级语言的方法及转换器 |
CN101661543A (zh) * | 2008-08-28 | 2010-03-03 | 西门子(中国)有限公司 | 软件源代码安全漏洞的检测方法及检测装置 |
CN102460476A (zh) * | 2009-04-29 | 2012-05-16 | 诺基亚公司 | 用于书写数学表达式分析的方法、装置和计算机程序产品 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
US20150128114A1 (en) * | 2013-11-07 | 2015-05-07 | Steven Arthur O'Hara | Parser |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487147A (en) * | 1991-09-05 | 1996-01-23 | International Business Machines Corporation | Generation of error messages and error recovery for an LL(1) parser |
US5673390A (en) * | 1992-09-03 | 1997-09-30 | International Business Machines Corporation | Method and system for displaying error messages |
GB2366402A (en) * | 2000-08-30 | 2002-03-06 | Ibm | Syntax validation using syntax trees |
US7254810B2 (en) * | 2002-04-18 | 2007-08-07 | International Business Machines Corporation | Apparatus and method for using database knowledge to optimize a computer program |
US7165238B2 (en) * | 2003-06-06 | 2007-01-16 | Intentional Software Corporation | Method and system for organizing and manipulating nodes by category in a program tree |
US20050198627A1 (en) * | 2004-03-08 | 2005-09-08 | Intel Corporation | Loop transformation for speculative parallel threads |
US7281018B1 (en) * | 2004-05-26 | 2007-10-09 | Microsoft Corporation | Form template data source change |
US7680782B2 (en) * | 2006-10-18 | 2010-03-16 | International Business Machines Corporation | Method to generate semantically valid queries in the XQuery language |
US8516458B2 (en) * | 2008-02-29 | 2013-08-20 | Iti Scotland Limited | System representation and handling techniques |
US8572566B2 (en) * | 2010-05-11 | 2013-10-29 | Smartshift Gmbh | Systems and methods for analyzing changes in application code from a previous instance of the application code |
US8359305B1 (en) * | 2011-10-18 | 2013-01-22 | International Business Machines Corporation | Query metadata engine |
CN103019801B (zh) * | 2012-12-20 | 2016-03-23 | 北京航天测控技术有限公司 | 一种应用于高速数字io波形引擎的编译器 |
CN105095178B (zh) * | 2014-05-09 | 2018-08-14 | 安徽科大讯飞医疗信息技术有限公司 | 实现文本语义容错理解的方法及系统 |
US20160124723A1 (en) * | 2014-10-31 | 2016-05-05 | Weixi Ma | Graphically building abstract syntax trees |
KR101694783B1 (ko) * | 2014-11-28 | 2017-01-10 | 주식회사 파수닷컴 | 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 |
US10042740B2 (en) * | 2015-12-04 | 2018-08-07 | Microsoft Technology Licensing, Llc | Techniques to identify idiomatic code in a code base |
-
2016
- 2016-03-31 CN CN201610200937.2A patent/CN107291521B/zh active Active
-
2017
- 2017-02-22 TW TW106105973A patent/TWI746520B/zh not_active IP Right Cessation
- 2017-03-23 EP EP17773148.6A patent/EP3438818B1/en active Active
- 2017-03-23 WO PCT/CN2017/077910 patent/WO2017167118A1/zh active Application Filing
-
2018
- 2018-09-27 US US16/144,792 patent/US10606568B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020078406A1 (en) * | 2000-10-24 | 2002-06-20 | Goh Kondoh | Structure recovery system, parsing system, conversion system, computer system, parsing method, storage medium, and program transmission apparatus |
CN101661543A (zh) * | 2008-08-28 | 2010-03-03 | 西门子(中国)有限公司 | 软件源代码安全漏洞的检测方法及检测装置 |
CN101499015A (zh) * | 2009-03-18 | 2009-08-05 | 北京和利时系统工程有限公司 | 一种高级语言转换成其它高级语言的方法及转换器 |
CN102460476A (zh) * | 2009-04-29 | 2012-05-16 | 诺基亚公司 | 用于书写数学表达式分析的方法、装置和计算机程序产品 |
US20150128114A1 (en) * | 2013-11-07 | 2015-05-07 | Steven Arthur O'Hara | Parser |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2017167118A1 (zh) | 2017-10-05 |
US10606568B2 (en) | 2020-03-31 |
EP3438818B1 (en) | 2021-02-24 |
CN107291521B (zh) | 2020-12-04 |
CN107291521A (zh) | 2017-10-24 |
EP3438818A1 (en) | 2019-02-06 |
EP3438818A4 (en) | 2019-12-18 |
TW201737119A (zh) | 2017-10-16 |
US20190026087A1 (en) | 2019-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI746520B (zh) | 編譯計算機語言的方法和裝置 | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
US8806452B2 (en) | Transformation of computer programs and eliminating errors | |
US9229691B2 (en) | Method and apparatus for programming assistance | |
US20160306736A1 (en) | Translation verification testing | |
CN106295346B (zh) | 一种应用漏洞检测方法、装置及计算设备 | |
CN109800258A (zh) | 数据文件部署方法、装置、计算机设备及存储介质 | |
CN113672628A (zh) | 数据血缘分析方法、终端设备及介质 | |
CN108573152A (zh) | 检测sql注入攻击的方法、装置、服务器和存储介质 | |
CN112035443A (zh) | 基于Linux平台的大数据执行方法、系统、设备及存储介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
CN112988163A (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN114489594A (zh) | 一种命令解析器的构建方法、命令解析处理方法及装置 | |
CN112000690B (zh) | 解析结构化操作语句的方法和装置 | |
CN112182637A (zh) | 一种安全控制系统、方法、装置及存储介质 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
Yan et al. | Structurized grammar‐based fuzz testing for programs with highly structured inputs | |
KR102282705B1 (ko) | 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치 | |
CN111309301A (zh) | 程序语言转换方法、装置和转换设备 | |
CN108780452A (zh) | 一种存储过程处理方法及装置 | |
CN112799638B (zh) | 无侵入式快速开发方法、平台、终端及存储介质 | |
CN114816364A (zh) | 基于Swagger动态生成范本文件的方法、装置及应用 | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 | |
CN110334098A (zh) | 一种基于脚本的数据库合并方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |