本申請(qǐng)公開(kāi)一種JS引擎容錯(cuò)方法和裝置。JS引擎在獲取JavaScript腳本后并將JavaScript腳本進(jìn)行解析生成JS引擎可識(shí)別的token代碼。進(jìn)而,對(duì)解析生成token代碼進(jìn)行檢測(cè),確定token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,從而確定JavaScript腳本中錯(cuò)誤腳本的所在位置。進(jìn)一步,根據(jù)異常代碼的起始位置和長(zhǎng)度,確定下一條正常腳本的起始位置,從而跳過(guò)錯(cuò)誤腳本而繼續(xù)執(zhí)行正常腳本。
Fault tolerant method and device for JS engine
The present invention discloses a JS engine fault-tolerant method and device. The JS engine parses the JavaScript script after the JavaScript script is acquired and generates the token code that can be identified by the JS engine. Then, analysis of the generated token code for testing, to determine the exception code in token code, and the length and position of recording the exception code, so as to determine the error in the location of the JavaScript script script. Further, the starting position of the next normal script is determined according to the starting position and length of the exception code, thereby skipping the error script and continuing to execute the normal script.
【技術(shù)實(shí)現(xiàn)步驟摘要】
一種JS引擎容錯(cuò)方法和裝置
本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,更具體地說(shuō),涉及一種JS引擎容錯(cuò)方法和裝置。
技術(shù)介紹
JavaScript是一種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語(yǔ)言。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,是一個(gè)專門處理JavaScript腳本的虛擬機(jī)。參見(jiàn)圖1示出了JavaScript引擎的工作原理示意圖。JavaScript引擎先將腳本代碼進(jìn)行詞法分析和語(yǔ)法分析。詞法分析(lexer),其實(shí)就是一個(gè)掃描器,依據(jù)語(yǔ)言的定義,提取出源文件中的內(nèi)容變?yōu)橐粋€(gè)個(gè)語(yǔ)法可以識(shí)別的token,比如關(guān)鍵字,操作符,常量等。語(yǔ)法分析(paser),它的功能就是根據(jù)語(yǔ)法(token的順序組合),識(shí)別出不同的語(yǔ)義(目標(biāo)操作)。這是輸入文本轉(zhuǎn)為一種它可以理解的語(yǔ)義形式(抽象語(yǔ)法樹(shù)),或者更進(jìn)一步生成供后續(xù)使用的中間代碼(字節(jié)碼),解釋器就是負(fù)責(zé)執(zhí)行解析輸出的結(jié)果。比如一段JavaScript腳本:vara=1;經(jīng)過(guò)詞法lexer可能被識(shí)別為以下的tokens:VARIABLEEQUALCONSTANTEND經(jīng)過(guò)語(yǔ)法parser一分析,就了解這是一個(gè)“賦值操作,向變量a賦值常量1”。隨后再調(diào)用對(duì)應(yīng)的操作加以執(zhí)行。在現(xiàn)有技術(shù)中,當(dāng)JavaScript的某條腳本錯(cuò)誤時(shí),JS引擎則會(huì)中斷程序執(zhí)行,無(wú)法讀取下一條腳本。
技術(shù)實(shí)現(xiàn)思路
有鑒于此,本申請(qǐng)?zhí)峁┮环NJS引擎容錯(cuò)方法和裝置,以在JavaScript腳本的某條語(yǔ)句有誤時(shí),仍可以讀取下一條腳本。為了實(shí)現(xiàn)上述目的,現(xiàn)提出的方案如下:一種JS引擎容錯(cuò)方法,包括:獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼;對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置;根據(jù)所述異常代碼的起始位置和長(zhǎng)度,確定下一條正常JavaScript腳本的起始位置。優(yōu)選的,所述對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置,之后還包括:確定所述錯(cuò)誤JavaScript腳本的錯(cuò)誤類型,并采用錯(cuò)誤碼進(jìn)行標(biāo)識(shí)。優(yōu)選的,所述確定所述錯(cuò)誤JavaScript腳本的錯(cuò)誤類型,并采用錯(cuò)誤碼進(jìn)行標(biāo)識(shí),之后還包括:對(duì)所述異常代碼進(jìn)行處理,以使所述異常代碼可正常執(zhí)行。一種JS引擎容錯(cuò)裝置,包括:腳本獲取解析單元,用于獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼;錯(cuò)誤腳本位置確定單元,用于對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置;正常腳本執(zhí)行單元,用于根據(jù)所述異常代碼的起始位置和長(zhǎng)度,跳過(guò)所述錯(cuò)誤JavaScript腳本,以執(zhí)行下一條正常JavaScript腳本。優(yōu)選的,還包括:錯(cuò)誤腳本類型確定單元,用于確定所述錯(cuò)誤JavaScript腳本的錯(cuò)誤類型,并采用錯(cuò)誤碼進(jìn)行標(biāo)識(shí)。優(yōu)選的,還包括:錯(cuò)誤腳本處理單元,用于對(duì)所述錯(cuò)誤腳本對(duì)應(yīng)的所述異常代碼進(jìn)行處理,以使所述異常代碼可正常執(zhí)行。經(jīng)由上述技術(shù)方案可知,本申請(qǐng)公開(kāi)一種JS引擎容錯(cuò)方法和裝置。JS引擎在獲取JavaScript腳本后并將JavaScript腳本進(jìn)行解析生成JS引擎可識(shí)別的token代碼。進(jìn)而,對(duì)解析生成token代碼進(jìn)行檢測(cè),確定token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,從而確定JavaScript腳本中錯(cuò)誤腳本的所在位置。進(jìn)一步,根據(jù)異常代碼的起始位置和長(zhǎng)度,確定下一條正常腳本的起始位置,從而跳過(guò)錯(cuò)誤腳本而繼續(xù)執(zhí)行正常腳本。附圖說(shuō)明為了更清楚地說(shuō)明本專利技術(shù)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本專利技術(shù)的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖1示出了JavaScript引擎的工作原理示意圖;圖2示出了本專利技術(shù)一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)方法的流程示意圖;圖3示出了本專利技術(shù)另一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)方法的流程示意圖;圖4示出了本專利技術(shù)另一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)裝置的結(jié)構(gòu)示意圖;圖5示出了本專利技術(shù)另一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將結(jié)合本專利技術(shù)實(shí)施例中的附圖,對(duì)本專利技術(shù)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本專利技術(shù)一部分實(shí)施例,而不是全部的實(shí)施例。基于本專利技術(shù)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本專利技術(shù)保護(hù)的范圍。參見(jiàn)圖2示出了本專利技術(shù)一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)方法的流程示意圖。由圖2可知,本專利技術(shù)包括:S201:獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼。JavaScript引擎先將腳本代碼進(jìn)行詞法分析,依據(jù)語(yǔ)言的定義,提取出源文件中的內(nèi)容變?yōu)橐粋€(gè)個(gè)語(yǔ)法可以識(shí)別的token,比如關(guān)鍵字,操作符,常量等。S202:對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置。JavaScript腳本報(bào)錯(cuò)的原因其實(shí)有很多種,比如變量、函數(shù)沒(méi)定義,break、return語(yǔ)句使用不當(dāng),各種筆誤等等。當(dāng)JavaScript腳本出現(xiàn)錯(cuò)誤時(shí),JavaScript腳本所對(duì)應(yīng)的token代碼也會(huì)出現(xiàn)錯(cuò)誤,通過(guò)對(duì)token代碼進(jìn)行檢測(cè)即可確定出現(xiàn)錯(cuò)誤的JavaScript腳本。S203:根據(jù)所述異常代碼的起始位置和長(zhǎng)度,確定下一條正常JavaScript腳本的起始位置。記錄異常代碼的起始位置start_position,根據(jù)異常代碼的長(zhǎng)度計(jì)算出偏移量offect,最后start_position+offect得出下一條正常JavaScript腳本的開(kāi)始位置。由上述實(shí)施例可知,本申請(qǐng)公開(kāi)一種JS引擎容錯(cuò)方法。JS引擎在獲取JavaScript腳本后并將JavaScript腳本進(jìn)行解析生成JS引擎可識(shí)別的token代碼。進(jìn)而,對(duì)解析生成token代碼進(jìn)行檢測(cè),確定token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,從而確定JavaScript腳本中錯(cuò)誤腳本的所在位置。進(jìn)一步,根據(jù)異常代碼的起始位置和長(zhǎng)度,確定下一條正常腳本的起始位置,從而跳過(guò)錯(cuò)誤腳本而繼續(xù)執(zhí)行正常腳本。參見(jiàn)圖3示出了本專利技術(shù)另一個(gè)實(shí)施例公開(kāi)的一種JS引擎容錯(cuò)方法的流程示意圖。由圖3可知,該方法包括:S301:獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼。JavaScript引擎先將腳本代碼進(jìn)行詞法分析,依據(jù)語(yǔ)言的定義,提取出源文件中的內(nèi)容變?yōu)橐粋€(gè)個(gè)語(yǔ)法可以識(shí)別的token,比如關(guān)鍵字,操作符,常量等。S302:對(duì)所述token代碼進(jìn)行檢測(cè)本文檔來(lái)自技高網(wǎng)...

【技術(shù)保護(hù)點(diǎn)】
一種JS引擎容錯(cuò)方法,其特征在于,包括:獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼;對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置;根據(jù)所述異常代碼的起始位置和長(zhǎng)度,確定下一條正常JavaScript腳本的起始位置。
【技術(shù)特征摘要】
1.一種JS引擎容錯(cuò)方法,其特征在于,包括:獲取所有JavaScript腳本,并將所述JavaScript腳本進(jìn)行解析生成所述JS引擎可識(shí)別的token代碼;對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置;根據(jù)所述異常代碼的起始位置和長(zhǎng)度,確定下一條正常JavaScript腳本的起始位置。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對(duì)所述token代碼進(jìn)行檢測(cè),確定所述token代碼中的異常代碼,并記錄所述異常代碼的起始位置和長(zhǎng)度,以確定錯(cuò)誤JavaScript腳本的所在位置,之后還包括:確定所述錯(cuò)誤JavaScript腳本的錯(cuò)誤類型,并采用錯(cuò)誤碼進(jìn)行標(biāo)識(shí)。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述確定所述錯(cuò)誤JavaScript腳本的錯(cuò)誤類型,并采用錯(cuò)誤碼進(jìn)行標(biāo)識(shí),之后還包括:對(duì)所述異常代碼進(jìn)行...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:徐佳宏,朱呂亮,梁達(dá)源,
申請(qǐng)(專利權(quán))人:深圳市茁壯網(wǎng)絡(luò)股份有限公司,
類型:發(fā)明
國(guó)別省市:廣東,44
還沒(méi)有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。