亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

腳本語言的自動機方法

文檔序號:6527199閱讀:216來源:國知局
專利名稱:腳本語言的自動機方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機語言編譯、解釋、執(zhí)行方法,特別涉及腳本語言的自動機方法。
背景技術(shù)
計算機的運行都是按照計算機語言編寫成的計算機程序進行的。計算機語言的種類非常的多,可以分成機器語言,匯編語言,高級語言三大類。計算機所能識別的語言只有機器語言,即由0和1構(gòu)成的代碼。但通常人們編程時,不采用機器語言,因為它非常難于記憶和識別。匯編語言的實質(zhì)和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序的每一句指令只能對應(yīng)實際操作過程中的一個很細微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復(fù)雜、容易出錯,而且使用匯編語言編程需要有更多的計算機專業(yè)知識。由于高級語言的簡單直觀易于理解等優(yōu)點,是目前絕大多數(shù)編程者的選擇。
高級語言包括解釋類應(yīng)用程序源代碼一邊由相應(yīng)語言的解釋器“翻譯”成目標代碼(機器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨立執(zhí)行ssss的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器,但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應(yīng)用程序。由于解釋類的靈活、平臺無關(guān)等特點,當前Java等解釋類語言日漸顯得重要。
編譯類在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件才能執(zhí)行,只有目標文件而沒有源代碼,修改很不方便。大多數(shù)的編程語言都是編譯型的,例如C/C++、Pascal等。
計算機語言在當前軟件開發(fā)、計算機輔助工程等領(lǐng)域已經(jīng)得到長足發(fā)展,各類語言非常成熟。但在很多工程技術(shù)開發(fā)的獨特領(lǐng)域,由于需求特殊,采用通用的計算機語言進行編程開發(fā)顯得過于復(fù)雜而且不夠靈活。比如,在移動通信網(wǎng)絡(luò)維護中,經(jīng)常要對底層網(wǎng)絡(luò)消息進行反向解析,以監(jiān)測網(wǎng)絡(luò)運行狀況或進行故障定位,由于消息格式的不同,對不同消息應(yīng)采用計算機程序進行解析,這樣可以大大提高效率,而若采用通用計算機語言,將會導(dǎo)致開發(fā)周期長,移植不方便,修改麻煩等缺點。因此在很多小領(lǐng)域,尤其是有特殊需求的地方,急切需要簡單的、能定制的、可移植的專用編程工具的出現(xiàn)。
腳本語言也屬于計算機高級語言的一種,一般都是應(yīng)用于特殊領(lǐng)域,具有語法簡單、功能強大、編寫方便等特點。而自動機則是能編譯并解釋執(zhí)行腳本語言的程序?qū)嶓w。編譯器由詞法分析->語法分析->中間語言代碼生成->機器語言代碼生成等步驟完成功能,最終的輸出是硬件可直接執(zhí)行的機器指令。而解釋器則是直接執(zhí)行語言代碼。
現(xiàn)有的計算機語言編譯器或解釋器都是通過復(fù)雜的步驟實現(xiàn)的。傳統(tǒng)的編譯器由詞法分析->語法分析->中間語言代碼生成->機器語言代碼生成等步驟完成功能,最終的輸出是硬件可直接執(zhí)行的機器指令。而傳統(tǒng)的解釋器則是直接對語言進行解釋并動態(tài)執(zhí)行,動態(tài)分配變量空間,采用一套復(fù)雜的解釋系統(tǒng)來進行對語言解釋過程的管理,耗用資源大,而且解釋系統(tǒng)開發(fā)任務(wù)量大。對于特殊領(lǐng)域工程開發(fā)專用的腳本語言,如果采用編譯運行方法,則顯得不夠靈活,如果采用解釋運行方法,則所需成本高。
另外一種方法是直接對每個應(yīng)用編制專門的代碼來操作,這樣必須對每個問題編制專門的代碼。由于軟件代碼強烈依賴于處理對象,處理對象的變化,將直接導(dǎo)致軟件的升級。而且軟件代碼冗余,軟件代碼量大,使維護工作量很大,成本提高。另外,變化無常的軟件代碼還不得不依賴于具體的系統(tǒng)及硬件環(huán)境,不利于移植。
在實際應(yīng)用中,上述方案存在以下問題耗用資源大,成本高;不夠靈活,可移植性不夠強;代碼冗余,開發(fā)效率低。
造成這種情況的主要原因在于,若采用傳統(tǒng)的編譯器或者解釋器來實現(xiàn)對腳本語言的編譯或解釋執(zhí)行,都將需要耗費巨大的人力、物力資源來開發(fā)編譯器、解釋器系統(tǒng),而且編譯器的靈活性不夠強,解釋器運行起來會耗費大量硬件資源;若直接對具體的應(yīng)用編制專用的代碼,則代碼缺乏通用性,而且開發(fā)效率低。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種腳本語言的自動機方法,使得腳本語言的編譯解釋運行過程簡單高效,降低軟件開發(fā)成本,使得編譯解釋自動機具有通用性、可移植性、可嵌入性的特點。
為實現(xiàn)上述目的,本發(fā)明提供了一種腳本語言的自動機方法,包含以下步驟,A根據(jù)工程應(yīng)用需要,制定腳本語言規(guī)范,用于規(guī)定腳本語言的語法規(guī)則;B根據(jù)所述腳本語言規(guī)范,制定中間語言規(guī)范,用于規(guī)定從所述腳本語言到中間語言的轉(zhuǎn)換規(guī)則;C根據(jù)所述中間語言規(guī)范,將腳本語言代碼編譯轉(zhuǎn)換為中間語言代碼,所述中間語言代碼用于描述腳本語言代碼的數(shù)據(jù)關(guān)系和執(zhí)行關(guān)系;D解釋運行所述中間語言代碼。
其中,根據(jù)所述步驟B制定的所述中間語言規(guī)范,所述中間語言代碼由數(shù)據(jù)結(jié)構(gòu)描述,包含頭部、數(shù)據(jù)區(qū)、程序區(qū),其中,所述頭部用于描述所述腳本語言代碼的整體信息,所述數(shù)據(jù)區(qū)用于描述所述腳本語言代碼所需要的參數(shù)信息,所述程序區(qū)用于描述所述腳本語言代碼的語句執(zhí)行信息。
此外,所述數(shù)據(jù)區(qū)由參數(shù)結(jié)構(gòu)構(gòu)成,每個所述參數(shù)結(jié)構(gòu)用于描述對應(yīng)參數(shù)的相關(guān)信息,包含參數(shù)類型、常量的值、變量的地址、串的首地址。
此外,所述程序區(qū)由執(zhí)行結(jié)構(gòu)構(gòu)成,每個所述執(zhí)行結(jié)構(gòu)用于描述對應(yīng)語句的相關(guān)信息,包含語句類型、下一條執(zhí)行語句的索引、關(guān)聯(lián)參數(shù)的索引、關(guān)聯(lián)語句的索引。
此外,所述步驟C包含以下子步驟,C1對所述腳本語言代碼進行詞法分析;C2對所述腳本語言代碼進行語法分析;C3根據(jù)所述中間語言規(guī)范,生成所述中間語言代碼。
此外,根據(jù)所述步驟A制定的所述腳本語言規(guī)范,所述腳本語言代碼中各單詞由分隔字符分隔,所述步驟C1的詞法分析過程包含以下子步驟提取當前語句的保留字;根據(jù)所述保留字判斷語句類型;根據(jù)所述語句類型提取關(guān)聯(lián)參數(shù)。
此外,所述步驟C2的語法分析過程包含以下子步驟,對于簡單語句,根據(jù)所述腳本語言規(guī)范檢查該語句的關(guān)聯(lián)參數(shù)的個數(shù)、類型;
對于復(fù)合語句,根據(jù)所述腳本語言規(guī)范檢查該語句的關(guān)聯(lián)參數(shù)的個數(shù)、類型,檢查所述程序結(jié)構(gòu)塊層次配對關(guān)系、語句配對關(guān)系。
此外,所述步驟C3包含以下子步驟,在所述數(shù)據(jù)區(qū)為每個參數(shù)分配所述參數(shù)結(jié)構(gòu),并填充所述常量的值、變量的地址、或串的首地址;在所述程序區(qū)為每條語句分配所述執(zhí)行結(jié)構(gòu),并填充所述語句類型、所述關(guān)聯(lián)參數(shù)的索引;對于所述簡單語句,按照執(zhí)行順序填充所述下一條執(zhí)行語句的索引;對于所述復(fù)合語句,解析程序結(jié)構(gòu),填充所述下一條執(zhí)行語句的索引和所述關(guān)聯(lián)語句的索引。
此外,所述步驟C3的程序結(jié)構(gòu)分析中,采用壓棧、鏈表實現(xiàn)所述復(fù)合語句的關(guān)聯(lián)回溯。
此外,所述步驟C3中,將所述變量分配在虛擬臨時變量空間中,在解釋執(zhí)行時,根據(jù)所述變量在所述虛擬臨時變量空間中的偏移值,在實際的臨時變量空間中分配。
此外,所述步驟D包含以下子步驟,D1根據(jù)所述程序區(qū)中當前執(zhí)行結(jié)構(gòu),確定操作類型;D2根據(jù)所述關(guān)聯(lián)參數(shù)的索引獲得所述數(shù)據(jù)區(qū)中所述參數(shù)結(jié)構(gòu)的信息;D3根據(jù)參數(shù)信息執(zhí)行相應(yīng)的操作;D4根據(jù)所述執(zhí)行結(jié)構(gòu)的執(zhí)行關(guān)系信息確定下一執(zhí)行結(jié)構(gòu)。
此外,所述步驟D中,所述執(zhí)行結(jié)構(gòu)獨立執(zhí)行,另設(shè)置公共進程控制塊,用于保存執(zhí)行上下文環(huán)境,在所述執(zhí)行結(jié)構(gòu)之間傳遞信息。
此外,編制腳本語言自動機代碼嵌入工程應(yīng)用中,用于提供腳本語言解釋運行功能。
此外,所述腳本語言應(yīng)用于二進制消息塊的反向解析。
通過比較可以發(fā)現(xiàn),本發(fā)明的技術(shù)方案與現(xiàn)有技術(shù)的主要區(qū)別在于,針對具體的工程應(yīng)用需求,制定了簡單的腳本語言規(guī)范;同時,制定了采用數(shù)據(jù)結(jié)構(gòu)表示的中間語言規(guī)范,使得該中間語言代碼易于編譯器轉(zhuǎn)換,也易于解釋器執(zhí)行;腳本語言自動機首先由編譯器將腳本語言代碼全部轉(zhuǎn)化為中間語言代碼,然后再由解釋器解釋運行,通過中間語言代碼綜合利用了編譯和解釋的優(yōu)點,簡化了腳本語言自動機方法;另外,還將高級語言編寫的腳本語言自動機嵌入到工程應(yīng)用中,不但實現(xiàn)腳本語言定制功能,而且具有平臺無關(guān)特性。
這種技術(shù)方案上的區(qū)別,帶來了較為明顯的有益效果,即簡單專用的腳本語言規(guī)范不但滿足了應(yīng)用需求,而且簡化了腳本語言自動機的實現(xiàn),大大降低實現(xiàn)復(fù)雜度;高效的中間語言規(guī)范適合于編譯轉(zhuǎn)換和解釋執(zhí)行,同時簡化了編譯步驟和解釋步驟,降低資源耗用和實現(xiàn)成本;先編譯后解釋的方法實現(xiàn)了腳本語言自動機方法,避免了傳統(tǒng)編譯器的復(fù)雜和解釋系統(tǒng)的龐大,簡單高效的實現(xiàn)了腳本語言的定制和執(zhí)行;腳本語言自動機的可移植性和平臺無關(guān)性大大降低了代碼開發(fā)成本,克服軟件冗余性,提高軟件質(zhì)量。


圖1是根據(jù)本發(fā)明的一個實施例的腳本語言的自動機方法流程圖;圖2是根據(jù)本發(fā)明的一個實施例的中間語言代碼參數(shù)區(qū)結(jié)構(gòu)示意圖;圖3是根據(jù)本發(fā)明的一個實施例的中間語言代碼程序區(qū)結(jié)構(gòu)示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細描述。
本發(fā)明采用編譯器加解釋器的方法實現(xiàn)腳本自動機,綜合了編譯、解釋兩者的優(yōu)點,使得腳本語言自動機即具有高效、靈活的特點,又具有通用性和可移植性。
首先,對自定義的簡單腳本語言進行分析,比如語法分析和詞法分析,得到各類語句的運行結(jié)構(gòu);然后由編譯器將腳本語言進行編譯,即將腳本語言代碼轉(zhuǎn)換成中間語言代碼,中間語言代碼是通過若干種不同數(shù)據(jù)結(jié)構(gòu)類型的變量的內(nèi)存表實現(xiàn)的,編譯器構(gòu)建了這些內(nèi)存表,供解釋器解釋運行;經(jīng)過編譯的中間語言代碼已經(jīng)具備簡單直觀的數(shù)據(jù)結(jié)構(gòu)、以及直接的語言運行結(jié)構(gòu),解釋器只需簡單地對相應(yīng)的內(nèi)存區(qū)完成相應(yīng)的操作,并按照相應(yīng)的順序完成跳轉(zhuǎn)即可,因此解釋系統(tǒng)非常簡單,大大降低資源利用率和開發(fā)任務(wù)量。
其中,中間語言代碼的構(gòu)造是本發(fā)明的關(guān)鍵,對于運行中的移動腳本語言,采用頭部標識、數(shù)據(jù)區(qū)和程序區(qū)來分別實現(xiàn)程序信息、變量空間、程序結(jié)構(gòu)的存儲,按照一定的規(guī)則將各變量安排在數(shù)據(jù)區(qū)中,而語句的操作類型及跳轉(zhuǎn)關(guān)系等信息則存放于程序區(qū)中。這樣的中間語言代碼結(jié)構(gòu),不但可以簡化解釋系統(tǒng)的復(fù)雜度,降低解釋維護的任務(wù)量,而且可以簡化編譯步驟。
所述,實現(xiàn)腳本語言的自動機方法首先需要有腳本語言和中間語言的規(guī)范,然后進行語言分析、轉(zhuǎn)化、運行。在本發(fā)明的一個實施例中,自動機方法包含四個大步驟,其流程圖如圖1所示。
步驟101,根據(jù)工程應(yīng)用需要,制定腳本語言規(guī)范,用于規(guī)定腳本語言的語法規(guī)則。為了實現(xiàn)腳本語言的自動機,必須規(guī)定統(tǒng)一的腳本語言,以方便之后的語言分析、中間語言規(guī)范的設(shè)計等。在本流程中,可以直接利用現(xiàn)有的各種腳本語言,這樣對于用戶上手較為方便;也可以另外設(shè)計更加合適具體工程應(yīng)用需求的新的腳本語音的規(guī)范,這樣則對于具體應(yīng)用較為合適。
步驟102,根據(jù)該腳本語言規(guī)范,制定中間語言規(guī)范,用于規(guī)定從該腳本語言到中間語言的轉(zhuǎn)換規(guī)則。由于本發(fā)明是采用先轉(zhuǎn)化到中間語音的方法,因此必須根據(jù)腳本語言規(guī)范制定中間語言規(guī)范。中間語言規(guī)范包括具體實施或者運行時各種數(shù)據(jù)結(jié)構(gòu)、代碼結(jié)構(gòu)的設(shè)置和處理方法,是本發(fā)明的關(guān)鍵。
步驟103,根據(jù)該中間語言規(guī)范,將腳本語言代碼編譯轉(zhuǎn)換為中間語言代碼,該中間語言代碼用于描述該腳本語言代碼的數(shù)據(jù)關(guān)系和執(zhí)行關(guān)系。根據(jù)腳本語言規(guī)范和中間語言規(guī)范,即可實現(xiàn)從腳本語言到中間語音的分析和轉(zhuǎn)化。
步驟104,解釋運行該中間語言代碼。由于本發(fā)明的中間語音代碼已經(jīng)包含各種數(shù)據(jù)結(jié)構(gòu)為便于描述,首先給出本發(fā)明的一個實施例中的腳本語言規(guī)范,并基于此腳本語言給出相應(yīng)的腳本語言自動機的實施例。該腳本語言專門用于對二進制消息的反向解析,即將包含有意義內(nèi)容的二進制消息塊翻譯成具有相同含義內(nèi)容的字符串的表現(xiàn)形式,以方便用戶閱讀。
腳本語言具有計算機語言的最低基本要求的三種語句順序執(zhí)行語句、條件判斷語句、循環(huán)語句。在本發(fā)明的一個實施例中,用于消息反向解析的的腳本語言定義如下(″內(nèi)的符號為程序語言保留字或保留符號)腳本語言程序基本框架為inverse語句,inverse語句的格式為′inverse′常量′{′語句{語句}′}′,其中語句包含有以下幾種get語句|set語句|output語句|skip語句|repeat語句|switch語句。所述各種語句的格式分別為repeat語句′repeat′變量名|常量變量名|常量′{′語句{語句}′}′,用于實現(xiàn)循環(huán)結(jié)構(gòu);switch語句′switch′變量名′{′case語句{case語句}default語句′}′,用于實現(xiàn)分支結(jié)構(gòu);
case語句′case′常量′{′語句{語句}′}′,用于實現(xiàn)分支結(jié)構(gòu);default語句′default″{′語句{語句}′}′,用于實現(xiàn)分支結(jié)構(gòu);get語句′get′變量名值類型,按照內(nèi)存地址讀取變量的值;set語句′set′變量名變量名|常量,設(shè)定變量并分配內(nèi)存空間;output語句′output′格式字符串{變量名},輸出顯示;skip語句′skip′變量名|常量,跳過指定長度的消息串。
其中,上述輸出語句中使用的“格式字符串”是用于定義輸出格式的,由″″{可見字符}{控制字符串}{可見字符}″″組成,其中控制字符串可以為′\r′\n′|′%x′|′%d′|′%c′|′%u′|′%o′,分別代表各種數(shù)據(jù)類型,定義與C語言相同,上述“值類型”包含以下幾種U8′|′U16′|′U32′|′S8′|′S16′|′S32′,U代表無符號數(shù),S代表有符號數(shù),后面的數(shù)字代表該變量所占位數(shù),比如U16即長度為兩個字節(jié)的無符號數(shù)。所述“變量名”可以是由[_字母|字母]{字母|數(shù)字|_[字母|數(shù)字]}組成。所述“常量“即數(shù)字[{數(shù)字}.數(shù)字{數(shù)字}|{數(shù)字}]。字母即[a,z]|[A,Z],數(shù)字即
,可見字符即255個ASCII字符。
可見,這里所給出的用于消息反向解析的腳本語言規(guī)范是比較簡單的,僅僅包含了基本程序結(jié)構(gòu)功能和一些能滿足反向解析需求的特殊語句,這樣的腳本語言在工程開發(fā)的特殊領(lǐng)域中非常實用。
熟悉本領(lǐng)域的技術(shù)人員可以理解,在其他各種工程應(yīng)用中,技術(shù)人員可以根據(jù)具體應(yīng)用需求而制定符合要求的高效、簡單的腳本語音規(guī)范,既能滿足于用戶編程,又能實現(xiàn)腳本語音自動機方法,不影響本發(fā)明的實質(zhì)和范圍。
在本發(fā)明的一個較佳實施例中,為便于后續(xù)的編譯器編譯,定義各個單詞,即編譯意義上的單位,之間以回車換行符或者空格符分隔,這樣即可大大簡化編譯過程中詞法分析步驟,大大提高編譯效率。
為了進一步形象地說明該腳本語言在消息反向解析中的應(yīng)用,下面給出根據(jù)本發(fā)明的實施例的針對某種消息格式的消息反向解析腳本語言代碼inverse 0x12EF{skip 4get ret U16output"RETCODE=%u "retswitch ret{case 8{output"非法參數(shù)。\r\n"}case 17{output"單板未配置。\r\n"}default{output"\r\n"}}get len U8set count 0
repeat len count{get temp S8output"%c"temp}output"\r\n"}如前所述,該段代碼的主框架由inverse語句構(gòu)成,inverse語句所帶常量為該段代碼的標識。為了編譯方便,代碼中各個單詞均由空格或回車換行分隔。該段代碼的主要功能即將位于相對偏移量為4處的16位無符號數(shù)輸出,并賦給變量ret,然后根據(jù)ret的值進行分支,輸出該值所代表的含義。接著獲取8位的無符號數(shù)賦給變量len,并進行以len為長度的循環(huán)結(jié)構(gòu),在每次循環(huán)中輸出下一個8位的有符號數(shù)。
由此如果所解析的二進制消息代碼為0x12-34-FF-FF-FF-FF-00-08-0B-31-32-33-34-35-36-37-38-39-30-2E;則該段代碼經(jīng)過自動機解釋執(zhí)行后得到的輸出結(jié)果應(yīng)當為RETCODE=8非法參數(shù)。
1234567890通過上述例子的說明,可以發(fā)現(xiàn),腳本語言多用于編寫為簡單專用、功能強大的代碼,若采用通用計算機語言的編譯或解釋方法來實現(xiàn)腳本語言自動機,顯然效率不高,因此本發(fā)明先將腳本語言簡單地編譯為易于解釋運行的中間語言代碼,然后由解釋器簡單地直序運行,即能完成腳本語言自動機功能。
在本發(fā)明的另一個實施例中,根據(jù)腳本語言規(guī)范制定中間語言規(guī)范,由包含各種數(shù)據(jù)結(jié)構(gòu)的內(nèi)存表構(gòu)成,這些內(nèi)存表是編譯器根據(jù)腳本語言代碼構(gòu)建的,直接表征了代碼執(zhí)行操作步驟,便于解釋器解釋運行。
下面先描述中間語言規(guī)范,一段用于二進制消息反向解析的腳本語言代碼所對應(yīng)的中間語言的內(nèi)存表結(jié)構(gòu)為頭部、數(shù)據(jù)區(qū)、程序區(qū)。頭部包含有二進制消息塊的消息字,用于唯一標識一個二進制消息塊;數(shù)據(jù)區(qū)包含參數(shù)個數(shù)計數(shù)器,用以記錄局部變量或靜態(tài)全局變量的個數(shù),以及所有變量的參數(shù)結(jié)構(gòu);程序區(qū)包含語句個數(shù)計數(shù)器,用以記錄程序區(qū)中該腳本所有語句的條數(shù),以及每句語句單元的執(zhí)行結(jié)構(gòu)。
在數(shù)據(jù)區(qū)中,存儲有腳本語言代碼所用到參數(shù),各參數(shù)通過參數(shù)地址wParaId唯一標識,參數(shù)地址即為參數(shù)存儲空間在數(shù)據(jù)區(qū)中的相對地址,該參數(shù)地址在程序區(qū)中將作為參數(shù)索引被引用,便于程序解釋運行時讀取參數(shù)。圖2示出了根據(jù)本發(fā)明的一個實施例的數(shù)據(jù)區(qū)結(jié)構(gòu)示意圖,數(shù)據(jù)區(qū)的各個參數(shù)都相應(yīng)包含有一個參數(shù)結(jié)構(gòu)20,該數(shù)據(jù)結(jié)構(gòu)20包含參數(shù)頭部201、聯(lián)合體兩部分,其中參數(shù)頭部201信息包含參數(shù)類型、參數(shù)值類型等信息,參數(shù)類型可以為常量、變量或格式串,參數(shù)值類型即為前述U8/U16/U32/S8/S16/S32;聯(lián)合體在各種參數(shù)類型情況下內(nèi)容不同,對于常量即為有符號常量成員及無符號常量成員的常量值202,對于變量則為該變量在臨時變量空間中的地址偏移,即變量地址203,對于格式串常量則為格式串常量在格式串靜態(tài)全局變量空間中的地址指針,即格式串首地址204??梢姼鶕?jù)上述參數(shù)結(jié)構(gòu)可以使得解釋器在解釋運行時,根據(jù)參數(shù)地址訪問到該參數(shù)在參數(shù)區(qū)的參數(shù)結(jié)構(gòu),并從參數(shù)結(jié)構(gòu)得到該參數(shù)的類型、值類型、地址等信息,從而獲得該參數(shù)值。
程序區(qū)是一個靜態(tài)全局空間,圖3示出了根據(jù)本發(fā)明的一個實施例的程序區(qū)結(jié)構(gòu)意思圖,對應(yīng)每條腳本語言代碼語句單元有一個執(zhí)行結(jié)構(gòu)30,用以存放腳本語言代碼的各條語句的全部信息。每條語句單元的信息包括基本信息和相關(guān)信息基本信息有語句類型301,下一條語句指針(pstNextFsm)302,以及該語句所涉及的各參數(shù)的參數(shù)地址303,用于指向數(shù)據(jù)區(qū)的參數(shù)結(jié)構(gòu)20;相關(guān)信息在實現(xiàn)上各種類型語句不同,所以是也一個聯(lián)合體,內(nèi)容根據(jù)各種不同類型的語句而不同,對于很多復(fù)合語句都包括關(guān)聯(lián)語句的指針304。
為了進一步說明中間語言代碼的內(nèi)存表結(jié)構(gòu)組成,給出根據(jù)上述用于二進制消息塊反向解析的腳本語言規(guī)范,各種不同類型語句的執(zhí)行結(jié)構(gòu)中包含的基本信息及相關(guān)信息用C語言數(shù)據(jù)結(jié)構(gòu)形式表示如下typedef struct INV_CLAUSE{U8 bFsmType;/*語句類型*/struct INV_CLAUSE *pstNextFsm;/*下一條要執(zhí)行的語句指針*/union{struct{U16 wParaId;/*參數(shù)*/}get;
struct{U16 wParaId[2];/*參數(shù)*/}set;
struct{
U8 bParaNum;/*參數(shù)個數(shù)*/U16 wMaxOutputLen;
U16 wParaId[11];/*參數(shù)*/}output;
struct{U16 wParaId;/*參數(shù)*/}skip;
struct{U16 wParaId[2];/*參數(shù)*/struct INV_CLAUSE *pstRepeatEndFsm;/*對應(yīng)的循環(huán)結(jié)束REPEAT_END語句*/}repeat;
struct{struct INV_CLAUSE *pstRepeatFsm;/*對應(yīng)的循環(huán)開始REPEAT語句*/}repeat_end;
struct{U16 wParaId;/*參數(shù)*/}switcn_begin;
struct{struct INV_FSM *pstNextCaseFsm;/*條件不成立時下一條要執(zhí)行的CASE或DEFAULT語句指針或SWITCH_END語句指針*/U16 wParaId;/*參數(shù)*/}case_begin;
struct{struct INV_CLAUSE *pstNextCaseFsm; /*下一條要執(zhí)行的CASE語句指針或SWITCH_END語句指針*/U16wParaId;/*參數(shù)*/}default_begin;
}clause;
}INVERSE_CLAUSE;
可見上述執(zhí)行結(jié)構(gòu)包含了語句類型、下一條語句指針、聯(lián)合體,其中聯(lián)合體即為各種語句類型所需要的參數(shù)地址、參數(shù)個數(shù)等內(nèi)容。比如,get語句只需一個參數(shù),因此聯(lián)合體只包含一個參數(shù)地址,而output語句則包含格式控制符、參數(shù)個數(shù)、各參數(shù)的參數(shù)地址等;而對于程序結(jié)構(gòu)控制語句,比如循環(huán)語句,則需要分為循環(huán)開始語句和循環(huán)結(jié)束語句兩類,且需要包含相互索引的指針以及計數(shù)器參數(shù),使得循環(huán)結(jié)構(gòu)可以實現(xiàn)。在這個實施例中,repeat語句由repeat和repeat_end兩條語句構(gòu)成,其中repeat語句在循環(huán)開始處執(zhí)行,repeat_end在循環(huán)結(jié)尾處,repeat的聯(lián)合體包含指向循環(huán)結(jié)束處語句的指針和循環(huán)計數(shù)器參數(shù)地址,repeat_end的聯(lián)合體包含指向循環(huán)開始處語句的指針,由此,循環(huán)在執(zhí)行時,從循環(huán)開始處先判斷計數(shù)器計數(shù)是否結(jié)束,然后順序執(zhí)行直到循環(huán)結(jié)束處,根據(jù)指針返回到循環(huán)開始處重新運行,這樣便可實現(xiàn)循環(huán)程序結(jié)構(gòu)的解釋運行。
在本發(fā)明的另一個實施例中,腳本語言自動機方法的編譯步驟就是將腳本語言代碼的各條語句的相關(guān)信息解析并填入頭部、數(shù)據(jù)區(qū)和程序區(qū),其中數(shù)據(jù)區(qū)填的是參數(shù)相關(guān)信息,程序區(qū)則為語句操作相關(guān)信息和程序結(jié)構(gòu)信息,這里程序結(jié)構(gòu)信息需要編譯器分析程序結(jié)構(gòu),并轉(zhuǎn)化為各條執(zhí)行語句單元以及上下語句調(diào)整關(guān)系。編譯的過程又是由詞法分析、語法分析、中間語言生成這三個子步驟同步工作而完成的。
其中,詞法分析過程將腳本語言的字符串分析得到程序代碼,在本發(fā)明的一個較佳實施例中,由于采用的對每個編譯意義上的單詞進行了分隔,因此詞法分析只需簡單的提取并判斷保留字,然后根據(jù)保留字規(guī)則提取參數(shù)等信息。
語法分析過程是根據(jù)語句的類型提取該語句的各個參數(shù),并判斷該語句語法的正確性,對于簡單語句(即沒有涉及分支、循環(huán)結(jié)構(gòu)的語句),只需判斷參數(shù)個數(shù)及類型等是否正確;對于復(fù)合語句(比如條件SWITCH、循環(huán)REPEAT,及其嵌套),則還需要判斷層次結(jié)構(gòu)、配對語句,比如層次是根據(jù)讀取到的‘{’和‘}’判斷的,switch語句的配對為case語句和default語句。
中間語言生成過程是逐條處理各腳本語言語句,對每一條要處理的語句為其在程序區(qū)中分配語句空間;對于讀取到的變量參數(shù),則在臨時變量空間分配其類型長度的空間,在參數(shù)區(qū)記錄其位置指針,并在程序區(qū)相應(yīng)語句的參數(shù)信息中記錄該變量參數(shù)在數(shù)據(jù)區(qū)中的位置標識wParaId;對于讀取到的常量,則在參數(shù)區(qū)中直接記錄該常量值,并在程序區(qū)相應(yīng)語句的參數(shù)信息中記錄該變量在數(shù)據(jù)區(qū)中的位置標識wParaId。
對于簡單語句上述步驟即可完成中間語言生成過程,對于復(fù)合語句,還需要處理關(guān)聯(lián)語句信息,比如循環(huán)語句repeat需要對應(yīng)的循環(huán)結(jié)束語句repeat_end配對,填充相互索引的指針,而switch分支語句則需要配對的case、default、switch_end語句。下面例舉各種復(fù)雜的復(fù)合句的編譯處理方法。
對循環(huán)REPEAT語句的編譯是在處理循環(huán)語句體的結(jié)束符號’}’時進行關(guān)聯(lián)語句信息填充的,當依照‘{’和‘}’層次及配套關(guān)系讀到循環(huán)語句塊的結(jié)束符’}’時,將當前結(jié)束語句的類型賦為REPEAT_END,將該循環(huán)結(jié)束REPEAT_END語句的關(guān)聯(lián)語句信息(比如循環(huán)開始語句指針pstRepeatFsm)填充為回溯到的同一層次上的循環(huán)開始REPEAT語句的程序區(qū)位置,并將回溯到的同一層次上的該循環(huán)開始REPEAT語句的關(guān)聯(lián)語句信息(比如循環(huán)結(jié)束語句指針pstRepeatEndFsm)填充為當前的循環(huán)結(jié)束REPEAT_END語句的程序區(qū)位置。注意到,當循環(huán)有嵌套時,則同樣地在得到循環(huán)結(jié)束符’}’時,與離當前位置最近的循環(huán)開始語句的發(fā)生關(guān)聯(lián)。
對條件SWITCH語句的編譯是在處理條件語句體的結(jié)束’}’時進行關(guān)聯(lián)語句信息填充的,當依照‘{’和‘}’層次及配套關(guān)系讀到條件語句塊的結(jié)束符’}’時,將回溯同層次上的CASE、DEFAULT、SWITCH語句當回溯到同層次上的該CASE、DEFAULT、SWITCH語句時,則將該結(jié)束語句的類型分別賦為CASE_END、DEFAULT_END、SWITCH_END的相應(yīng)類型,且當回溯到同層次上的語句為SWITCH時,還需要在該SWITCH語句塊中重新回溯所有的CASE_END和DEFAULT_END語句,并將回溯到的這些CASE_END和DEFAULT_END語句的下一條語句指針賦值為當前條件結(jié)束SWITCH_END語句,并在該SWITCH語句塊中重新回溯最后一條DEFAULT語句(或無DEFAULT語句情況下的最后一條CASE語句),并將回溯到的該DEFAULT語句(或無DEFAULT語句情況下的最后一條CASE語句)的條件不滿足時下一條要執(zhí)行的語句指針(不是pstNextFsm而是pstNextCaseFsm)賦值為當前條件結(jié)束SWITCH_END語句;在讀取條件語句塊中的CASE或DEFAULT語句時,則需回溯到同于該CASE或DEFAULT語句層次上的上一條CASE或DEFAULT語句,并將回溯到的該(上一條CASE或DEFAULT)語句的條件不滿足時下一要執(zhí)行語句指針(不是pstNextFsm而是pstNextCaseFsm)賦值為當前的CASE或DEFAULT語句。而一般順序執(zhí)行語句的下一條要執(zhí)行的語句指針均賦值為腳本語言代碼位置緊挨著的下一條語句所在的程序區(qū)位置。
從上述復(fù)合語句執(zhí)行順序關(guān)系編譯方法中可見,在建議語句執(zhí)行順序時,經(jīng)常會對分支、循環(huán)語句的層次結(jié)束符號進行回溯操作,即由當前層次結(jié)束符尋址對應(yīng)層次起始符號。實現(xiàn)回溯的方法有很多種,比如利用壓棧、鏈表等操作實現(xiàn)。在本發(fā)明的一個較佳實施例中,為了實現(xiàn)回溯,在編譯時采用一個語句編譯信息數(shù)據(jù)結(jié)構(gòu)鏈表進行層次嵌套結(jié)構(gòu)的記錄,鏈表節(jié)點的數(shù)據(jù)結(jié)構(gòu)用C語言可表示如下typedef struct INV_INIT_DATA{struct INV_INIT_DATA *pstPrev;/*上一條語句的語句編譯信息數(shù)據(jù)結(jié)構(gòu)鏈表節(jié)點*/struct INV_INIT_DATA *pstNext;/*下一條語句的語句編譯信息數(shù)據(jù)結(jié)構(gòu)鏈表節(jié)點*/U16 wIndex; /*本語句在本腳本語言代碼中的位置索引*/U8 bCurrentLevel; /*本語句所在層次*/INVERSE_CLAUSE *pstFsm;/*本語句的程序區(qū)位置指針*/}INVERSE_INIT_DATA;
通過該鏈表進行層次分析同時,記錄腳本語言代碼語句的層次數(shù),設(shè)置初值為0,每進入一個起始符’{‘則層次數(shù)增一,每遇到一個’}’則層次數(shù)減一。最終值應(yīng)該與初值0一致,否則編譯出錯。
另外,在本發(fā)明的一個較佳實施例中,編譯過程中對于變量參數(shù)并不進行實際空間分配,而是在虛擬的臨時變量空間(實際并不存在)中分配一個位置的偏移值;在解釋執(zhí)行時,才根據(jù)編譯時已分配好的各個變量參數(shù)的偏移值,在實際的臨時變量空間進行劃分使用。
在由編譯器完成編譯步驟后,腳本語言代碼即轉(zhuǎn)化為中間語言代碼,可以得到程序運行的參數(shù)、運行順序關(guān)系等信息,解釋器將根據(jù)這些相關(guān)信息將腳本語言代碼解釋運行。在本發(fā)明的一個實施例中,腳本語言自動機方法的解釋步驟中,解釋器根據(jù)中間語言相關(guān)語句的順序關(guān)系執(zhí)行相應(yīng)操作。比如,解釋器根據(jù)首語句指針開始按照每條語句的下一語句或關(guān)聯(lián)語句指針的順序,依次執(zhí)行各條語句對應(yīng)的功能代碼,對相應(yīng)的參數(shù)進行操作。可見,解釋器的功能非常簡單,耗用資源少,開發(fā)工作量少。解釋器只需根據(jù)程序區(qū)語句結(jié)構(gòu)中語句類型進行相應(yīng)操作,根據(jù)參數(shù)地址到數(shù)據(jù)區(qū)獲得相應(yīng)參數(shù),讀取常量的值、或讀取變量的值、或?qū)ψ兞窟M行相應(yīng)操作,在條件判斷語句則進行相應(yīng)的判斷和跳轉(zhuǎn)。
歸納起來,解釋運行中間語言代碼的過程大致上包含四個步驟根據(jù)所述程序區(qū)中當前執(zhí)行結(jié)構(gòu),確定操作類型;根據(jù)所述關(guān)聯(lián)參數(shù)的索引獲得所述數(shù)據(jù)區(qū)中所述參數(shù)結(jié)構(gòu)的信息;根據(jù)參數(shù)信息執(zhí)行相應(yīng)的操作;根據(jù)所述執(zhí)行結(jié)構(gòu)的執(zhí)行關(guān)系信息確定下一執(zhí)行結(jié)構(gòu)。
下面詳細給出根據(jù)本發(fā)明的一個實施例的解釋器對上述二進制消息塊反向解析腳本語言各種語句所進行的解釋運行操作。
GET語句功能,完成從輸入的二進制消息當前位置處獲取變量參數(shù)類型字節(jié)數(shù)的數(shù)據(jù)到變量參數(shù)所指示的臨時變量空間中存放,如果該變量參數(shù)首次出現(xiàn),則先為該變量參數(shù)在臨時變量空間中分配空間;SET語句功能,對被賦值變量參數(shù)賦值為目標常量值或目標變量參數(shù)所指示的臨時變量空間中的存放值,如果被賦值變量參數(shù)首次出現(xiàn),則先為其在臨時變量空間中分配空間,并將目標值賦值到該位置處存放;SKIP語句功能,將輸入的二進制消息當前位置后移常量值或變量參數(shù)所指示的臨時變量空間中存放值的字節(jié)數(shù);OUTPUT語句功能,將格式串參數(shù)所指示的格式串靜態(tài)全局變量空間中存放的格式串取出,并取出各個變量參數(shù)所指示的臨時變量空間中的存放值,按照格式串定義的格式輸出各參數(shù),比如可以直接調(diào)用C語言的庫函數(shù)printf()/sprintf()的功能,將信息打印出來;REPEAT語句功能,直接跳轉(zhuǎn)到循環(huán)結(jié)束REPEAT_END語句的執(zhí)行結(jié)構(gòu);REPEAT_END語句功能,使循環(huán)計數(shù)變量參數(shù)所指示的臨時變量空間中的存放值增一,并與循環(huán)次數(shù)常量值或循環(huán)次數(shù)變量參數(shù)所指示的臨時變量空間中的存放值進行比較,如果小于等于循環(huán)次數(shù),則跳轉(zhuǎn)到循環(huán)開始處的第一條語句,根據(jù)中間語言規(guī)范即repeat語句的下一條,否則跳轉(zhuǎn)到其下一條語句,根據(jù)中間語言規(guī)范即循環(huán)語句塊之后的第一條語句;CASE、DEFAULT語句功能,直接跳轉(zhuǎn)到下一條語句,根據(jù)中間語言規(guī)范即CASE條件塊內(nèi)、DEFAULT語句塊內(nèi)的第一條語句;CASE_END、DEFAULT_END語句功能,直接跳轉(zhuǎn)到下一條語句,根據(jù)中間語言規(guī)范即SWITCH_END語句;SWITCH語句功能,從下一條語句開始遍歷緊接著的語句直至SWITCH_END語句,如果對于遍歷到的DEFAULT語句,則直接跳轉(zhuǎn)到該DEFAULT語句,如果對于遍歷到的CASE語句,且CASE條件滿足,則直接跳轉(zhuǎn)到該CASE語句,如果對于遍歷到的CASE語句,但CASE條件不滿足,則跳轉(zhuǎn)到該CASE語句的關(guān)聯(lián)語句,根據(jù)中間語言規(guī)范即下一CASE或DEFAULT語句;
SWITCH_END語句功能,直接跳轉(zhuǎn)到下一條語句,根據(jù)中間語言規(guī)范即條件語句塊之后的第一條語句。
在本發(fā)明的一個較佳實施例中,解釋器對腳本語言代碼的解釋執(zhí)行是按照下一條語句指針或關(guān)聯(lián)語句指針指示的語句功能塊順序依次獨立進行的,另外采用了公共的進程控制塊來保存解釋器中語句執(zhí)行上下文的環(huán)境,該進程控制塊在各條語句的功能塊之間傳遞。比如,該進程控制塊結(jié)構(gòu)用C語言可表示如下typedef struct{U16 wScriptId; /*腳本ID*/INVERSE_CLAUSE*fsm; /*當前執(zhí)行的語句指針*/VARIAL_DATA_STACK*pData; /*堆棧*/U16 wInputCurrentPos;
U16 wOutputCurrentPos;
char *pbInput;
char *pbOutput;
U16 wMaxOutBufLen;
U16 wMsgLen;
}TRANSLATOR_PROCESS;
其中VARIAL_DATA_STACK為臨時變量空間(堆棧),用C語言可表示如下typedef struct{U32 dwStackPoint;
U8abStack[INV_VARIAL_STACK_SIZE];}VARIAL_DATA_STACK;/*臨時變量空間(堆棧)*/根據(jù)上述對本發(fā)明的多個實施例的描述,實際上本發(fā)明給出的腳本語言自動機方法由編譯、解釋兩大步驟實現(xiàn),編譯步驟包含了詞法分析、語法分析、中間語言生成三個子步驟,解釋步驟則根據(jù)中間語言代碼進行解釋執(zhí)行,在制定了腳本語言規(guī)范和中間語言規(guī)范后,腳本語言自動機首先將腳本語言代碼全部轉(zhuǎn)化為中間語言代碼,簡化了解釋器解釋執(zhí)行任務(wù)。
在本發(fā)明的一個實施例中,將編譯器和解釋器均用高級語言編寫實現(xiàn),因此具有較強的可移植性,可嵌入到工程應(yīng)用中,使其具有定制腳本語言并執(zhí)行的功能,從而大大提高了軟件開發(fā)、工程開發(fā)的效率,而且該腳本語言自動機不依賴于具體的系統(tǒng)環(huán)境及硬件,使得腳本語言具有平臺無關(guān)特性。
熟悉本領(lǐng)域的技術(shù)人員可以理解,上述腳本語言規(guī)范、中間語言規(guī)范均可以根據(jù)具體應(yīng)用需求而制定合理的規(guī)范使得編譯簡單、解釋方便,另外自動機實現(xiàn)中的具體數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)方法也可以s采用其他方式實現(xiàn),最終實現(xiàn)發(fā)明目的,而不影響本發(fā)明的實質(zhì)和范圍。
雖然通過參照本發(fā)明的某些優(yōu)選實施例,已經(jīng)對本發(fā)明進行了圖示和描述,但本領(lǐng)域的普通技術(shù)人員應(yīng)該明白,可以在形式上和細節(jié)上對其作各種各樣的改變,而不偏離所附權(quán)利要求書所限定的本發(fā)明的精神和范圍。
權(quán)利要求
1.一種腳本語言的自動機方法,其特征在于,包含以下步驟,A根據(jù)工程應(yīng)用需要,制定腳本語言規(guī)范,用于規(guī)定腳本語言的語法規(guī)則;B根據(jù)所述腳本語言規(guī)范,制定中間語言規(guī)范,用于規(guī)定從所述腳本語言到中間語言的轉(zhuǎn)換規(guī)則;C根據(jù)所述中間語言規(guī)范,將腳本語言代碼編譯轉(zhuǎn)換為中間語言代碼,所述中間語言代碼用于描述腳本語言代碼的數(shù)據(jù)關(guān)系和執(zhí)行關(guān)系;D解釋運行所述中間語言代碼。
2.根據(jù)權(quán)利要求1所述的腳本語言的自動機方法,其特征在于,根據(jù)所述步驟B制定的所述中間語言規(guī)范,所述中間語言代碼由數(shù)據(jù)結(jié)構(gòu)描述,包含頭部、數(shù)據(jù)區(qū)、程序區(qū),其中,所述頭部用于描述所述腳本語言代碼的整體信息,所述數(shù)據(jù)區(qū)用于描述所述腳本語言代碼所需要的參數(shù)信息,所述程序區(qū)用于描述所述腳本語言代碼的語句執(zhí)行信息。
3.根據(jù)權(quán)利要求2所述的腳本語言的自動機方法,其特征在于,所述數(shù)據(jù)區(qū)由參數(shù)結(jié)構(gòu)構(gòu)成,每個所述參數(shù)結(jié)構(gòu)用于描述對應(yīng)參數(shù)的相關(guān)信息,包含參數(shù)類型、常量的值、變量的地址、串的首地址。
4.根據(jù)權(quán)利要求2所述的腳本語言的自動機方法,其特征在于,所述程序區(qū)由執(zhí)行結(jié)構(gòu)構(gòu)成,每個所述執(zhí)行結(jié)構(gòu)用于描述對應(yīng)語句的相關(guān)信息,包含語句類型、下一條執(zhí)行語句的索引、關(guān)聯(lián)參數(shù)的索引、關(guān)聯(lián)語句的索引。
5.根據(jù)權(quán)利要求1所述的腳本語言的自動機方法,其特征在于,所述步驟C包含以下子步驟,C1對所述腳本語言代碼進行詞法分析;C2對所述腳本語言代碼進行語法分析;C3根據(jù)所述中間語言規(guī)范,生成所述中間語言代碼。
6.根據(jù)權(quán)利要求5所述的腳本語言的自動機方法,其特征在于,根據(jù)所述步驟A制定的所述腳本語言規(guī)范,所述腳本語言代碼中各單詞由分隔字符分隔,所述步驟C1的詞法分析過程包含以下子步驟提取當前語句的保留字;根據(jù)所述保留字判斷語句類型;根據(jù)所述語句類型提取關(guān)聯(lián)參數(shù)。
7.根據(jù)權(quán)利要求5所述的腳本語言的自動機方法,其特征在于,所述步驟C2的語法分析過程包含以下子步驟,對于簡單語句,根據(jù)所述腳本語言規(guī)范檢查該語句的關(guān)聯(lián)參數(shù)的個數(shù)、類型;對于復(fù)合語句,根據(jù)所述腳本語言規(guī)范檢查該語句的關(guān)聯(lián)參數(shù)的個數(shù)、類型,檢查所述程序結(jié)構(gòu)塊層次配對關(guān)系、語句配對關(guān)系。
8.根據(jù)權(quán)利要求2或5所述的腳本語言的自動機方法,其特征在于,所述步驟C3包含以下子步驟,在所述數(shù)據(jù)區(qū)為每個參數(shù)分配所述參數(shù)結(jié)構(gòu),并填充所述常量的值、變量的地址、或串的首地址;在所述程序區(qū)為每條語句分配所述執(zhí)行結(jié)構(gòu),并填充所述語句類型、所述關(guān)聯(lián)參數(shù)的索引;對于所述簡單語句,按照執(zhí)行順序填充所述下一條執(zhí)行語句的索引;對于所述復(fù)合語句,解析程序結(jié)構(gòu),填充所述下一條執(zhí)行語句的索引和所述關(guān)聯(lián)語句的索引。
9.根據(jù)權(quán)利要求8所述的腳本語言的自動機方法,其特征在于,所述步驟C3的程序結(jié)構(gòu)分析中,采用壓棧、鏈表實現(xiàn)所述復(fù)合語句的關(guān)聯(lián)回溯。
10.根據(jù)權(quán)利要求8所述的腳本語言的自動機方法,其特征在于,所述步驟C3中,將所述變量分配在虛擬臨時變量空間中,在解釋執(zhí)行時,根據(jù)所述變量在所述虛擬臨時變量空間中的偏移值,在實際的臨時變量空間中分配。
11.根據(jù)權(quán)利要求1或2所述的腳本語言的自動機方法,其特征在于,所述步驟D包含以下子步驟,D1根據(jù)所述程序區(qū)中當前執(zhí)行結(jié)構(gòu),確定操作類型;D2根據(jù)所述關(guān)聯(lián)參數(shù)的索引獲得所述數(shù)據(jù)區(qū)中所述參數(shù)結(jié)構(gòu)的信息;D3根據(jù)參數(shù)信息執(zhí)行相應(yīng)的操作;D4根據(jù)所述執(zhí)行結(jié)構(gòu)的執(zhí)行關(guān)系信息確定下一執(zhí)行結(jié)構(gòu)。
12.根據(jù)權(quán)利要求11所述的腳本語言的自動機方法,其特征在于,所述步驟D中,所述執(zhí)行結(jié)構(gòu)獨立執(zhí)行,另設(shè)置公共進程控制塊,用于保存執(zhí)行上下文環(huán)境,在所述執(zhí)行結(jié)構(gòu)之間傳遞信息。
13.根據(jù)權(quán)利要求1所述的腳本語言的自動機方法,其特征在于,編制腳本語言自動機代碼嵌入工程應(yīng)用中,用于提供腳本語言解釋運行功能。
14.根據(jù)權(quán)利要求1所述的腳本語言的自動機方法,其特征在于,所述腳本語言應(yīng)用于二進制消息塊的反向解析。
全文摘要
本發(fā)明涉及計算機語言編譯、解釋、執(zhí)行技術(shù),公開了一種腳本語言的自動機方法,使得腳本語言的編譯解釋運行過程簡單高效,降低軟件開發(fā)成本,并使得編譯解釋自動機具有通用性、可移植性、可嵌入性的特點。本發(fā)明中,針對具體的工程應(yīng)用需求制定了簡單的腳本語言規(guī)范;同時制定了采用數(shù)據(jù)結(jié)構(gòu)表示的中間語言規(guī)范,使得該中間語言代碼易于編譯器轉(zhuǎn)換,也易于解釋器執(zhí)行;腳本語言自動機首先由編譯器將腳本語言代碼全部轉(zhuǎn)化為中間語言代碼,然后再由解釋器解釋運行,通過中間語言代碼綜合利用了編譯和解釋的優(yōu)點,簡化了腳本語言自動機方法;另外還將高級語言編寫的腳本語言自動機嵌入到工程應(yīng)用中,既實現(xiàn)腳本語言定制功能,又具有平臺無關(guān)特性。
文檔編號G06F9/45GK1841328SQ200510033989
公開日2006年10月4日 申請日期2005年4月2日 優(yōu)先權(quán)日2005年4月2日
發(fā)明者伏治軍 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1