專利名稱:一種實現(xiàn)VBScript語言跨平臺應用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種使VBScript語言可以跨平臺應用的方法。
技術(shù)背景腳本語言是一種非編譯語言,它可以直接被瀏覽器解釋執(zhí)行,常用的腳本 語言有Microsoft推出的VBScript語言禾口 Netscaper的JavaScript語言,它 們是眾多腳本語言中較為優(yōu)秀的一種。VBScript腳本語言是程序開發(fā)語言Visual Basic家族的新成員,它具有 強大的靈活性和格式化功能,它將靈活的Script應用到了更廣泛的領(lǐng)域。但 它有一個根本的瓶頸問題,就是只能局限在Windows平臺上運行,只適用于IE 瀏覽器,在Microsoft的32位Windows API、 16位Windows API和Macintosh 提供的VBScript 二進制實現(xiàn)程序上運行,很難象任何標準程序語言一樣,跨 平臺直接應用?,F(xiàn)階段,軟件領(lǐng)域還沒有任何開源或免費的軟件產(chǎn)品支持它在 非windows平臺運行(比如Unix)。這給VBScript腳本語言的重用性和可移 植性造成了嚴重的影響。由Sun公司推出的完全基于Java技術(shù)的ASP4. 0軟件能夠支持 VBScript5. 5在Linux, Solaris, AIX或微軟的Windows平臺等系統(tǒng)上直接移 植應用,它對于VBScript腳本語言的支持是靠支持能夠跨平臺的計算引擎來 實現(xiàn)的,并在計算引擎中,內(nèi)置了 "COM-to-Java"的綁定規(guī)則,實現(xiàn)了腳本 語言對部分內(nèi)置com對象的支持,但其主要針對的是Web應用類業(yè)務,使用前 提是必須購買Java的Web服務器6.0或以上版本,并且,對于如何支持 VBScript腳本語言的具體細節(jié),Sun網(wǎng)站并沒有對外公布任何信息。截至今日, 業(yè)界對于VBScript的應用,很少脫離過Web瀏覽器,從未獨立于腳本引擎, 這就大大阻礙了 VBScript腳本語言的應用場景和可用性。發(fā)明內(nèi)容為了滿足對VBScript腳本語言多場景、多平臺應用的需求,解決VBScript 語言除了依賴計算引擎外很難直接跨平臺應用的缺點,本發(fā)明的目的是提供一 種把腳本語言與腳本語言計算引擎徹底脫離,實現(xiàn)VBScript腳本語言跨平臺應為實現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案 一種實現(xiàn)VBScript語言跨 平臺應用的方法,其特征在于將VBScript腳本語言直接轉(zhuǎn)換成可跨平臺應用 的java語言,具體方法是第一步解析VBScript腳本語言生成語法樹;A、 對VBScript腳本語言進行詞法掃描,把VBScript中的保留關(guān)鍵字、非 保留關(guān)鍵字、數(shù)據(jù)類型、內(nèi)置函數(shù)、運算符等VBScript腳本語言本身的"靜態(tài) 規(guī)則"存儲到內(nèi)存中;清空內(nèi)存中的"動態(tài)規(guī)則",并根據(jù)當前腳本實際內(nèi)容, 通過專門的一趟詞法分析過程,把自定義函數(shù)名及對應參數(shù)個數(shù)這些動態(tài)規(guī)則 過濾出來,存儲到內(nèi)存中,以動態(tài)決定每一段特定的VBScript腳本到Java代 碼的生成過程;B、 進行詞法分析,遵照上一步在內(nèi)存中存儲的"靜態(tài)規(guī)則"和"動態(tài)規(guī) 則",從VBScript腳本語言中分離出一個個字符串,并分別配上簡單數(shù)據(jù)類型 的記號;C、 對詞法分析的結(jié)果進行語法分析,將詞法分析輸出的記號集合采用自 頂向下的方式,解析出一個個可執(zhí)行的語句節(jié)點,語句節(jié)點從同一父類繼承, 某些結(jié)點可遞歸或嵌套其它結(jié)點,最終形成語法樹,并進行語法樹堆棧檢査;第二步根據(jù)生成的語法樹生成與VBScript腳本語言相對應的Java語言;A、 對語法樹進行上下文相關(guān)性、類型匹配檢査及類型轉(zhuǎn)換;B、 從語法樹根結(jié)點開始,順序把每一個結(jié)點遞歸輸出對應的java代碼。
圖1為本發(fā)明實現(xiàn)VBScript語言跨平臺應用的方法流程圖。
具體實施方式
本發(fā)明是通過把VBScript腳本語言轉(zhuǎn)換成可跨平臺應用的Java語言,來 實現(xiàn)VBScript語言跨平臺應用的目的,其效果是讓VBScript腳本語言脫離任 何腳本執(zhí)行環(huán)境,能夠象java語言一樣,以使VBScript腳本語言成為能夠在 各種平臺上靈活應用的"程序語言"。如圖l所示,本發(fā)明實現(xiàn)VBScript語言跨平臺應用的方法包括以下步驟:第一步解析VBScript腳本語言生成語法樹;第二步根據(jù)生成的語法樹生成與VBScript腳本語言相對應的Java語言。解析VBScript腳本語言生成語法樹的方法是第一步對VBScript腳本語言進行詞法掃描,把VBScript中的保留關(guān)鍵 字、非保留關(guān)鍵字、數(shù)據(jù)類型、內(nèi)置函數(shù)、運算符等VBScript腳本語言本身的 "靜態(tài)規(guī)則"存儲到內(nèi)存中;清空內(nèi)存中的"動態(tài)規(guī)則"(上一次VBScript 腳本語言轉(zhuǎn)換到j(luò)ava代碼時存儲到內(nèi)存中的,若為第一次執(zhí)行,為空),并根據(jù)當前腳本實際內(nèi)容,通過專門的一趟詞法分析過程,把自定義函數(shù)名及對應 參數(shù)個數(shù)這些動態(tài)規(guī)則過濾出來,重新存儲到內(nèi)存中,以動態(tài)決定每一段特定 的VBScript腳本到Java代碼的生成過程。其目的是把詞法分析的"靜態(tài)規(guī)則"(對于任何特定的一段VBScript 腳本語言不變)和"動態(tài)規(guī)則"(根據(jù)特定的VBScript腳本語言而定)存儲到 內(nèi)存中。第二步進行詞法分析,遵照上一步在內(nèi)存中存儲的"靜態(tài)規(guī)則"和"動態(tài)規(guī)則",從VBScript腳本語言中分離出一個個字符串,并分別配上簡單數(shù)據(jù) 類型的記號(token)。其目的是把一行行VBScript字符串解析為一個個記號集合。 第三步對詞法分析的結(jié)果進行語法分析,將詞法分析輸出的記號集合采 用自頂向下的方式,解析出一個個可執(zhí)行的語句節(jié)點,語句節(jié)點從同一父類繼 承,某些結(jié)點(如IF語句)可遞歸或嵌套其它結(jié)點,最終形成語法樹,并進 行語法樹堆棧檢査。在語法分析過程中,在內(nèi)存中應記錄變量在上下文中的聯(lián)系、數(shù)據(jù)類型發(fā) 生變化的變量、未初始化的變量及作為自定義函數(shù)參數(shù)的變量,這些內(nèi)存數(shù)據(jù) 結(jié)構(gòu)將在java代碼輸出過程中,作為實現(xiàn)VBScript弱數(shù)據(jù)類型到Java強數(shù)據(jù) 類型匹配和轉(zhuǎn)換的依據(jù)。對于自定義函數(shù)結(jié)點(含遞歸和函數(shù)嵌套調(diào)用),其 實現(xiàn)方案是一次單獨的VBScript腳本到Java代碼的生成過程。本發(fā)明根據(jù)生成的語法樹生成java語言,將VBScript腳本語言轉(zhuǎn)換成可 跨平臺應用的java語言的方法包括以下步驟第一步對語法樹進行上下文相關(guān)性、類型匹配檢査及類型轉(zhuǎn)換。 上下文相關(guān)性及類型匹配檢查,實際上在解析VBScript腳本語言生成語 法樹步驟中的語法分析過程中已經(jīng)進行,在根據(jù)生成的語法樹生成java語言之 前再次進行類型匹配檢査和類型轉(zhuǎn)換是從語法分析過程中存儲在內(nèi)存中的數(shù) 據(jù)記錄開始反復進行的。上下文相關(guān)性,類型匹配檢査及類型轉(zhuǎn)換的原則包含原則l:變量第一次使用時檢查其類型,以后該變量在作用域內(nèi)使用時, 若類型發(fā)生變化,則該變量由簡單數(shù)據(jù)類型轉(zhuǎn)換為變體類型,以后出現(xiàn)的該變 量類型全部轉(zhuǎn)換為變體類型;對以前出現(xiàn)該變量的任意一處重新進行檢査,進 行變量的簡單數(shù)據(jù)類型到變體類型的轉(zhuǎn)換,轉(zhuǎn)換后,賦值語句左值出現(xiàn)的新的 變體類型變量做同樣處理,直到?jīng)]有需要轉(zhuǎn)換的變體類型變量為止。原則2:自定義函數(shù)返回值類型全部為變體類型;當某個變量作為參數(shù)傳 入時,簡單數(shù)據(jù)類型的參數(shù)變量轉(zhuǎn)換為變體類型,以后出現(xiàn)的該變量,其類型 全部轉(zhuǎn)換為變體類型;對以前出現(xiàn)該變量的任意一處重新進行檢查,進行變量 的簡單數(shù)據(jù)類型到變體類型的轉(zhuǎn)換,轉(zhuǎn)換后,賦值語句左值出現(xiàn)的新的變體類 型變量做同樣處理,直到?jīng)]有需要轉(zhuǎn)換的變體類型變量為止。第二步根據(jù)語法樹生成java語言,并輸出java代碼。對語法樹進行語義檢査后,從語法樹根結(jié)點開始,順序把每一個結(jié)點遞歸 輸出對應的java代碼,其目標是保證java代碼和對應VBScript腳本代碼執(zhí)行 結(jié)果的一致性。根據(jù)語法樹生成java語言的幾條具體指導方法如下-1、 對于java里無對應功能的VBScript內(nèi)置函數(shù)及內(nèi)置com組件,提供單 獨的java工具類實現(xiàn)代碼輸出,這樣的內(nèi)置函數(shù)或com對象調(diào)用,就直接映 射為工具類里的對應函數(shù)。2、 提供單獨的實現(xiàn)VBScript日期功能的Java類來完成VBScript對應日期 函數(shù)的映射。3、 提供Java變體類支持VBScript弱數(shù)據(jù)類型到Java強數(shù)據(jù)類型的轉(zhuǎn)換, 并作為整個代碼生成過程中語義檢査的基礎(chǔ)類。如圖l所示,本發(fā)明在將VBScript腳本語言轉(zhuǎn)換成可跨平臺應用的Java 語言的整個代碼生成過程中貫穿有出錯處理程序。無論哪一步,哪一個運行過 程,出錯處理程序都會維護當前記號或語法樹結(jié)點所在的VBScript腳本字符串 的位置信息(行號),并在代碼生成的每一個過程進行錯誤檢査,從而盡量詳 細的報告出錯信息,幫助定位排錯。綜上所述,目前,已有的解決VBScript語言跨平臺應用的方法都沒有脫離 解釋執(zhí)行的模式,都是通過支持特定平臺的計算引擎來解釋執(zhí)行VBScript腳本 語言來實現(xiàn)的;而本發(fā)明恰恰突破了以往任何方法的思維模式,從根本上提出了將VBScript腳本語言直接轉(zhuǎn)換成程序語言的方法,把腳本語言從腳本引擎解 放出來,不再"腳本級執(zhí)行"是本發(fā)明的最大優(yōu)點。利用上述技術(shù)方案,本公司已經(jīng)實現(xiàn)了 VBScript至U Java的代碼生成,并 把該成果應用到了上海移動10086合號項目中,實現(xiàn)了使VBScript不再依賴任 何腳本計算引擎,象java語言一樣直接在AIX刀片機上運行的初衷。對于被 跨平臺開發(fā)困擾過的人來說,把非跨平臺腳本轉(zhuǎn)換為跨平臺語言,然后僅靠安 裝java虛擬機就使腳本語言(VBScript)跨平臺應用的積極影響就更加可見一 斑了。毫無疑問,腳本語言到程序語言的轉(zhuǎn)換也必將程序語言的全部優(yōu)勢帶入 腳本語言本身。
權(quán)利要求
1. 一種實現(xiàn)VBScript語言跨平臺應用的方法,其特征在于將VBScript腳本語言直接轉(zhuǎn)換成可跨平臺應用的java語言,具體方法是第一步解析VBScript腳本語言生成語法樹;第二步根據(jù)生成的語法樹生成與VBScript腳本語言相對應的java語言。
2、 根據(jù)權(quán)利要求l所述的實現(xiàn)VBScript語言跨平臺應用的方法,其特征 在于所述解析VBScript腳本語言生成語法樹的方法是A、 對VBScript腳本語言進行詞法掃描,把VBScript腳本語言本身的"靜 態(tài)規(guī)則"存儲到內(nèi)存中;清空內(nèi)存中的"動態(tài)規(guī)則",并根據(jù)當前腳本語言實 際內(nèi)容,把自定義函數(shù)名及對應參數(shù)個數(shù)這些"動態(tài)規(guī)則"過濾出來,存儲到 內(nèi)存中,以動態(tài)決定每一段特定的VBScript腳本到Java代碼的生成過程;B、 進行詞法分析,遵照上一步在內(nèi)存中存儲的"靜態(tài)規(guī)則"和"動態(tài)規(guī) 則",從VBScript腳本語言中分離出一個個字符串,并分別配上簡單數(shù)據(jù)類型 的記號;C、 對詞法分析的結(jié)果進行語法分析,將詞法分析輸出的記號集合采用自 頂向下的方式,解析出一個個可執(zhí)行的語句節(jié)點,語句節(jié)點從同一父類繼承, 某些結(jié)點可遞歸或嵌套其它結(jié)點,最終形成語法樹,并進行語法樹堆棧檢査。
3、 根據(jù)權(quán)利要求2所述的實現(xiàn)VBScript語言跨平臺應用的方法,其特征 在于所述根據(jù)生成的語法樹生成與VBScript腳本語言相對應的Java語言的 方法是A、 對語法樹進行上下文相關(guān)性、類型匹配檢査及類型轉(zhuǎn)換;B、 從語法樹根結(jié)點開始,順序把每一個結(jié)點遞歸輸出對應的java代碼。
全文摘要
本發(fā)明公開了一種實現(xiàn)VBScript語言跨平臺應用的方法,它是通過把VBScript腳本語言直接轉(zhuǎn)換成可跨平臺應用的java語言,來實現(xiàn)VBScript語言跨平臺應用的目的。具體方法是第一步,解析VBScript腳本語言生成語法樹;第二步,根據(jù)生成的語法樹生成與VBScript腳本語言相對應的java語言。本發(fā)明突破了以往任何方法的思維模式,從根本上提出了將VBScript腳本語言直接轉(zhuǎn)換成程序語言的方法,把腳本語言與腳本語言計算引擎徹底分離,不再“腳本級執(zhí)行”是本發(fā)明的最大優(yōu)點。
文檔編號G06F9/44GK101261579SQ200710064279
公開日2008年9月10日 申請日期2007年3月8日 優(yōu)先權(quán)日2007年3月8日
發(fā)明者吳湘錚, 崔曉川, 雁 李 申請人:青牛(北京)技術(shù)有限公司