• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      動態(tài)分析JavaScript的代碼推薦方法

      2017-02-20 09:16:33劉爽
      數(shù)碼世界 2017年2期
      關(guān)鍵詞:類庫代碼對象

      劉爽

      遼寧錦州渤海大學信息科學與技術(shù)學院

      動態(tài)分析JavaScript的代碼推薦方法

      劉爽

      遼寧錦州渤海大學信息科學與技術(shù)學院

      本文基于現(xiàn)有靜態(tài)分析技術(shù),編程時代碼靜態(tài)分析方式所推薦方法準確度很低,更加重要的是推薦的響應速度慢,本文動態(tài)分析的JavaScript代碼推薦方式,根據(jù)Eclipse插件所實現(xiàn)的推薦平臺。本文采取一種預先建模方式用來保存動態(tài)代碼推薦的存儲數(shù)據(jù)結(jié)構(gòu)和運行環(huán)境,根據(jù)對象節(jié)點上下文特征建立特征索引。同時將用戶程序代碼片段進行分解,分解的抽象語法樹是代碼分塊的執(zhí)行基礎,在用戶代碼解釋執(zhí)行過程中基于對象節(jié)點之間的相似度修正個別變量代碼推薦方式,并在文章結(jié)尾給出模擬、解釋執(zhí)行動態(tài)代碼推薦產(chǎn)生的方法,實現(xiàn)動態(tài)分析代碼推薦的方法。根據(jù)文章最后的實驗結(jié)果分析可知,與靜態(tài)分析比較而言,JavaScript要實現(xiàn)動態(tài)分析代碼推薦必然能夠?qū)崿F(xiàn)代碼推薦準確性有所提高和響應速度有所加快。

      JavaScript 靜態(tài)分析 動態(tài)分析 代碼推薦 抽象語法樹

      1 引言

      目前,JavaScript技術(shù)作為非常流行腳本編程語言,JS腳本語言在不同的瀏覽器上應用,重要的是不限于瀏覽版本,除此之外的還有網(wǎng)絡服務器、智能手機操作系統(tǒng)。正是由于JavaScript技術(shù)的正盛,JavaScript本身擁有的全部集成開發(fā)環(huán)境(IDE)新特性和新功能,新特性和新功能備受關(guān)注。

      很多IDE開發(fā)環(huán)境為用戶提供了JavaScript腳本代碼推薦的功能,當程序員輸入了某個關(guān)鍵字時,在繼續(xù)輸入一個點號“·”操作符,IDE自帶的開發(fā)平臺會自動彈出相關(guān)的代碼推薦列表,會根據(jù)實際情況自動推薦出有可能出現(xiàn)在點號之后的一些屬性或者是函數(shù)名稱,推薦給你能夠大大的縮短程序員系統(tǒng)內(nèi)的類庫或本人已經(jīng)定義的類庫進行使用,減輕程序編寫過大的工作量,避免開發(fā)過程中因為拼寫錯誤出現(xiàn)的異常處理,從而提高程序的開發(fā)效率,縮短軟件開發(fā)周期。

      目前,代碼推薦在靜態(tài)分析的基礎上進行的分析過程,通過對代碼分析過程和數(shù)據(jù)流程分析構(gòu)建基于靜態(tài)分析代碼推薦系統(tǒng),另一種方法是通過分析歷史使用過的代碼進行靜態(tài)分析過程。另外,JavaScript某些特性是動態(tài)的,使用原型(prototype)開發(fā)模式實現(xiàn)JS類中部分屬性聲明和類與類之間的繼承特性,JavaScript在HTML網(wǎng)頁上可以通過先解釋后執(zhí)行的方式運行用戶程序代碼片段,對象節(jié)點的類型在解釋運行代碼的過程中有可能變量類型發(fā)生改變。

      為了能夠解決在JavaScript程序代碼推薦所產(chǎn)生的困難,JavaScript中的變量類型可以實現(xiàn)動態(tài)分析,動態(tài)分析JavaScript的變量或者函數(shù)推薦問題,通過模擬代碼解釋執(zhí)行環(huán)境與系統(tǒng)的應用環(huán)境,按照解釋運行用戶代碼順序,獲得合理的推薦類型和代碼推薦信息。

      2 建立動態(tài)分析代碼推薦模型問題

      2.1 初始化運行環(huán)境

      初始化代碼推薦的運行環(huán)境是為了讓用戶程序片段能夠解釋執(zhí)行,其中包括:上下文對象節(jié)點和JavaScript的內(nèi)置變量類型和函數(shù),實際上,不同的JavaScript引擎需要運行在不同的平臺之上。讓JavaScript運行在Eclipse平臺中,與Java代碼進行結(jié)合,一方面可以實現(xiàn)字符串類型作為輸入?yún)?shù),另一方面可以選擇直接解釋執(zhí)行某段代碼,在完成用戶代碼解釋執(zhí)行,用戶方可獲取代碼解釋執(zhí)行與之相關(guān)的上下文數(shù)據(jù),包括:定義的變量和函數(shù)等等。

      2.2 添加類庫文件并保存上下文數(shù)據(jù)

      當JavaScript程序開發(fā)時,需要基于第三方或者程序員定義的類庫文件,通過這種方式有利于減輕軟件開發(fā)負擔。但是,大量開源類庫給動態(tài)分析的代碼推薦工作有效性提供了可能。首先,由于類庫文件內(nèi)容普遍較大且類庫的結(jié)構(gòu)復雜,基于靜態(tài)分析程序效果不佳,要實現(xiàn)準確得到類庫對象類型較難。另外,由于類庫的動態(tài)分析要求時間和空間開銷較大,每次代碼推薦過程都必須完成動態(tài)分析操作,需要重復地完成上述操作,并將動態(tài)類庫分析結(jié)果進行保存便于后面的代碼調(diào)用。由于現(xiàn)有的類庫數(shù)量較多,且新的類庫正在不斷的涌現(xiàn),并不需對全部的類庫都進行分析和保存。

      2.3 保存全部可達對象節(jié)點

      在模擬代碼推薦過程中,由于程序代碼片段并不完整地呈現(xiàn),代碼推薦模擬過程中需要進行對象節(jié)點的替換操作,需要替換對象節(jié)點是代碼解釋執(zhí)行中所創(chuàng)建的對象,也就是通過new的對象需要實時更新,在模擬運行環(huán)境中替換的所有已經(jīng)創(chuàng)建的對象。將所有的從根節(jié)點出發(fā)可達的JavaScript解析數(shù)節(jié)點對象都可以進行替換操作,因此,需要保存從根節(jié)點到任何可達對象節(jié)點的全部記錄。

      2.4 建立對象索引數(shù)據(jù)結(jié)構(gòu)

      本節(jié)中建立對象索引數(shù)據(jù)結(jié)構(gòu)是根據(jù)已經(jīng)獲得的所有已經(jīng)保存的JavaScript對象節(jié)點數(shù)據(jù),獲取兩種特征值作為對象節(jié)點數(shù)據(jù)Map結(jié)構(gòu)的鍵和值,鍵值變量的存儲類型均為字符串類型,因此,本文所使用對象節(jié)點數(shù)據(jù)Map類型作為存儲對象節(jié)點索引的數(shù)據(jù)組織結(jié)構(gòu)。

      序號COI(objects)CreateObjectIndex建立對象索引函數(shù),并輸入?yún)?shù)為對象集合輸入: objects- JavaScript 關(guān)于 JavaScript節(jié)點的對象集合;輸出:index,記錄對象索引信息的存儲數(shù)據(jù)結(jié)構(gòu)Map,數(shù)據(jù)類型為string 1 Index←0;//下標的參數(shù)2for i←0 to objects .size-1//循環(huán)整個對象索引數(shù)組3for j←0 to map.size-1//循環(huán)變量在記錄對象索引的全部數(shù)據(jù)4 If(比較對象索引的對象名稱與記錄對象索引的對象名稱是否相同) map.add(對象名稱,對象索引數(shù)組); //在這判斷對象索引的對象名稱與記錄對象索引的對象名稱是否相同,相同的則添加到對象索引信息的存儲數(shù)據(jù)結(jié)構(gòu)Map中5 String [] lists=分割函數(shù)(對象名稱) //取出對象索引數(shù)組中的對象名稱,將對象節(jié)點名稱數(shù)據(jù)放入lists數(shù)組中;6Foreach String list in lists Do//遍歷全部的對象節(jié)點名稱7 index←對象節(jié)點數(shù)據(jù)結(jié)構(gòu).添加函數(shù)(對象節(jié)點列表,對象索引數(shù)組) //取出對象節(jié)點名稱的下標值8 End Foreach 9 End if 10End for 11End for

      2.5 生成代碼推薦

      在本小節(jié)中,需要生成代碼推薦模型,并結(jié)合對象索引需要推薦的用戶代碼片段中,通過該模型建立代碼推薦信息。本文敘述的代碼推薦模型和代碼片段相關(guān),當用戶提出代碼推薦請求時。在進行代碼推薦模型的同時需要先對用戶代碼劃分,建立代碼推薦模型之后運行代碼片段,根據(jù)節(jié)點推薦對象的類型,給出待代碼推薦的排序結(jié)果對象列表。

      在生成代碼推薦模型的初期,本文將根據(jù)代碼推薦模型發(fā)出推薦代碼,在全程生成代碼推薦時,必須進行預處理的數(shù)據(jù)都保存在代碼推薦模型里。再次,由于本文所列出的代碼推薦模型針對HTML網(wǎng)頁中的JavaScript推薦程序,本文想要提供了一個待選的代碼步驟,由用戶推薦時決定是否進行網(wǎng)頁頁面綁定的結(jié)果,在應用程序中JS的代碼推薦應用,代碼推薦應用主要的作用是對網(wǎng)頁頁面XML對象節(jié)點樹狀結(jié)構(gòu)的修改操作,這種能夠修改XML對象節(jié)點綁定相關(guān)頁面,為下一步的代碼推薦的準確度。然后,本文提出了一種動態(tài)分析用戶代碼片段的推薦方法,通過預分析代碼片段中無關(guān)代碼塊進行剔除,剔除在代碼片段中函數(shù)無關(guān)代碼也能夠被運行。最后,當運行用戶代碼片段的模擬運行開始,在代碼運行期間一般會出現(xiàn)不同異常問題,本文通過替換某些變量等方式實現(xiàn)代碼推薦。當在模擬代碼推薦運行結(jié)束之后,在生成代碼推薦得到關(guān)注的是對象類型信息,在對代碼推薦結(jié)果進行排序之后,給出代碼推薦序列。

      3 執(zhí)行代碼的模擬過程

      當接收來自程序員提交功能請求時,通過模擬代碼解釋和執(zhí)行用戶代碼片段的方式,以此方式獲得對象節(jié)點的數(shù)據(jù)信息,并實現(xiàn)動態(tài)分析類中變量類型代碼推薦方式。動態(tài)分析對象類型給出準確的推薦請求,另外,推薦對象適用于復雜表達式,在多個方法連續(xù)調(diào)用或者數(shù)組變量存在的地方,首先將用戶自定義的代碼片段分解成若干個不同的用戶代碼塊,其次,按照順序的方式執(zhí)行已經(jīng)分解過的代碼塊。

      3.1 用戶代碼塊分解

      在此處將用戶要執(zhí)行的代碼片段進行逐個分解。在下述代碼片段中,程序員在①處提出了代碼推薦請求操作,此請求不但位于類對象節(jié)點T2的定義中,重要的是也位于Bp2函數(shù)代碼段,此種相互調(diào)用方式并不能順序執(zhí)行請求。

      下述的偽代碼片段以JavaScript語言結(jié)構(gòu)轉(zhuǎn)換成的抽象語法樹,得到的轉(zhuǎn)化結(jié)果則是一個包含抽象的對象結(jié)點列表數(shù)據(jù)。在抽象語法樹上實現(xiàn)對對象節(jié)點的遍歷操作,如果對象結(jié)點是方法名稱或者對象節(jié)點的屬性時,表明該對象節(jié)點可能為用戶動態(tài)分析代碼推薦點,將對象結(jié)點中除了表達式之外的父結(jié)點都置于結(jié)果列表中,反之,需要添加在表達式之前節(jié)點上即可,循環(huán)遍歷結(jié)束為止。

      序號用戶代碼片段的分解示意1 Var T1{//定義一個代碼段T1 2 a=1;//初始化變量值3函數(shù)(參數(shù)){renturn a;}//調(diào)用某個函數(shù)4 } 5 T1.ap3=2;//定義一個全局變量,并賦值6 Var T2{//定義一個代碼段T2 7Bp1:b=1;//在bp位置定義一個變量,并賦參數(shù)值8Bp2:函數(shù)(參數(shù)){//調(diào)用某個函數(shù),并傳遞進一個相關(guān)參數(shù)9ap.a++; ap.ap3=2;//改變參數(shù)a和ap3的參數(shù)值10Return bp3.計算函數(shù)()①}//①處調(diào)用T2代碼段的compute函數(shù)11Bp3:T1 12}

      3.2 用戶代碼塊的順序執(zhí)行

      上面研究的依次執(zhí)行代碼塊是基于動態(tài)分析實現(xiàn)代碼推薦過程中的主要內(nèi)容。在代碼解釋執(zhí)行時,變量未被定義則會拋出異常處理請求,必須進行某些對象節(jié)點的替換操作。

      在上面的代碼分解后開始順序執(zhí)行代碼塊時,此時會出現(xiàn)在T1類中ap參數(shù)未定義的異常,必須進行某些對象節(jié)點的替換操作。先提取要替換對象Bp3的基本特征:屬性名(a,ap3),變量名(a,ap3,ap)。接著根據(jù)對象節(jié)點提取的這些特征值進行匹配對象節(jié)點模型,獲取包含全部對象節(jié)點的特征序列,將ap參數(shù)替換具有這些特征信息的對象節(jié)點a,并繼續(xù)順序執(zhí)行用戶定義的代碼塊。

      4 結(jié)論與展望

      本文研究的動態(tài)分析方式實現(xiàn)的JavaScript類屬性和類方法的代碼推薦方法,動態(tài)分析特性實現(xiàn)具有準確度較高、響應速度較快的優(yōu)點,今后有可能將對JavaScript代碼推薦結(jié)果的實現(xiàn)排序優(yōu)化操作,使得代碼推薦方法的實用性實現(xiàn)大范圍擴展。

      在以后的實踐工作中,研究動態(tài)分析代碼推薦方法指的關(guān)注的兩方面的問題:

      ①在JavaScript實現(xiàn)的代碼推薦過程中,現(xiàn)在網(wǎng)頁中存在大量數(shù)據(jù)解析和代碼運行問題,有可能通過創(chuàng)建一種動態(tài)代碼推薦排序功能實現(xiàn)對應用程序的實現(xiàn),將相似度高的推薦對象節(jié)點放在推薦列表上端。本文提出的代碼推薦排序結(jié)果比較為簡單,但是效果一般,在這一方面值得進行下一步深入研究代碼推薦工作。

      ②進行有目的性的JavaScript使用代碼推薦模式,目前存在不少工作量是針對使用動態(tài)方式的代碼推薦,而針對在JS技術(shù)中實現(xiàn)的動態(tài)代碼推薦分析的方法相關(guān)研究比較少,由于JavaScript技術(shù)的某種特性,使得動態(tài)的代碼推薦方法有研究的可能性。

      [1]葉云,李春強,胡軍山.基于CK610的Dalvik虛擬機移植與優(yōu)化[J].計算機工程,2011,37(16):291-292

      [2]周毅敏,陳榕.Dalvik虛擬機進程模型分析[J].計算機技術(shù)與發(fā)展,2010,20(2):83-86

      [3]吳通.基于程序分析和機器學習的JavaScript代碼推薦研究[D].上海交通大學.2014

      [4]吳通,陳雨亭.基于動態(tài)分析的JavaScript代碼推薦[J],計算機工程.2014:40(10),66-68

      猜你喜歡
      類庫代碼對象
      神秘來電
      睿士(2023年2期)2023-03-02 02:01:09
      用Java編寫客戶機/服務器端應用程序
      Python在數(shù)據(jù)可視化中的應用
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      攻略對象的心思好難猜
      意林(2018年3期)2018-03-02 15:17:24
      數(shù)據(jù)結(jié)構(gòu)課程教學改革方案和應用效果
      軟件工程(2017年12期)2018-01-29 17:35:55
      數(shù)據(jù)結(jié)構(gòu)可視化類庫的設計與實現(xiàn)
      平远县| 库车县| 白城市| 正蓝旗| 乌审旗| 峨边| 枣庄市| 扶风县| 繁昌县| 拜泉县| 鄂尔多斯市| 广德县| 沙湾县| 祁连县| 攀枝花市| 清涧县| 盱眙县| 富锦市| 五家渠市| 涞源县| 广宁县| 专栏| 巩义市| 象州县| 咸宁市| 邵东县| 昭苏县| 晋中市| 松溪县| 普格县| 洪泽县| 阿克| 蒙城县| 上饶县| 海丰县| 谢通门县| 沙雅县| 监利县| 汶川县| 泉州市| 开封市|