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

源代碼變換方法和記錄媒質(zhì)的制作方法

文檔序號:6414668閱讀:209來源:國知局
專利名稱:源代碼變換方法和記錄媒質(zhì)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種用于將包含關(guān)于所謂存根法(stub method)的對象交互方法的描述的源代碼變換為適合于程序執(zhí)行環(huán)境的源代碼的源代碼變換方法。本發(fā)明還涉及一種存儲有用于執(zhí)行源代碼變換處理的源代碼變換程序的計算機(jī)可讀的記錄媒質(zhì)。本發(fā)明的某些特點的細(xì)節(jié)描述在名稱為“數(shù)據(jù)處理方法和裝置”的歐洲專利申請No.0753811A1中,該歐洲專利申請是由同一受讓人于1996年7月12日提交的,并對于1997年7月14日在日本提交的JP178625/95要求了公約優(yōu)先權(quán),因此該申請的完全公開被援引于此,以資參考。
一般來說,面向?qū)ο缶幊探?jīng)常使用對象交互方法。術(shù)語“對象交互”被使用在本說明書中意味著,例如用于從一個對象向另外一個對象發(fā)送一個消息的處理。對象交互是一種在面向?qū)ο缶幊讨杏刹僮飨到y(tǒng)提供的基本服務(wù)。
使用在對象交互中的各種方法一般稱之為“存根法”。因此,存根法被用在面向?qū)ο缶幊讨?,用于從一個對象發(fā)送一個消息到另外一個對象的目的。在下面的描述中,從其消息被發(fā)送的對象將被稱之為“客戶對象”,而接收該消息的對象將被稱之為“服務(wù)器對象”。
例如,當(dāng)希望執(zhí)行從通過網(wǎng)絡(luò)鏈接到另外的計算機(jī)的服務(wù)器對象的程序時,通過網(wǎng)絡(luò)從客戶對象發(fā)送一個消息到在另外的計算機(jī)上的將被執(zhí)行的服務(wù)器對象。因此,可能執(zhí)行在通過網(wǎng)絡(luò)鏈接的另外計算機(jī)上的服務(wù)器對象的程序。應(yīng)當(dāng)理解為,對于通過網(wǎng)絡(luò)調(diào)用一個被在不同計算機(jī)上執(zhí)行的程序的遙控操作可以與由本地程序調(diào)用接口執(zhí)行的相同的方法來執(zhí)行。
一般來說,存根發(fā)生器被用于產(chǎn)生一種存根方法。更為具體地講,這樣的存根發(fā)生器讀出含有涉及描述在某種編程語言的存根方法的信息的源代碼,并從讀出的源代碼中產(chǎn)生一種存根方法。在大多數(shù)情況下,存根發(fā)生器具有兩種功能,即產(chǎn)生涉及消息發(fā)送者的客戶對象的存根方法的功能和產(chǎn)生涉及消息接收者的服務(wù)器對象的存根方法的功能。利用這些功能,客戶對象和服務(wù)器對象可以以高度靈活的方式被很容易地建立起來。
下面將對利用存根發(fā)生器形成一個程序的處理進(jìn)行描述。
利用存根發(fā)生器的程序的形成包括借助于C++編程語言非對象交互部分程序的描述和利用接口定義語言對對象交互部分程序的描述?!敖涌诙x語言”是一種定義各個對象之間通信接口的語言。接口定義語言可以是,例如,由CORBA(Common Object Request Broker Architecture)確定的語言,該語言是用于實現(xiàn)面向?qū)ο蠓植继幚憝h(huán)境的一種規(guī)則。
更具體地講,參照圖4,對于對象交互形成一個應(yīng)用程序的處理開始于三種源代碼的形成,這些源代碼叫做“第一”、“第二”、和“第三”源代碼。
第一源代碼含有按接口定義語言描述的存根方法信息。這意味著將被用于對象交互的接口是由第一源代碼定義的。在圖4中,其中該第一源代碼被寫入的文件f1是由“Test.idl”表示的。
第二源代碼含有按諸如C++之類的編程語言描述的服務(wù)器對象信息。因此,第二源代碼含有非按第一源代碼描述的對象交互信息的服務(wù)器對象信息的部分。該第二源代碼還含有,例如從利用第一源代碼描述的存根方法調(diào)用用于產(chǎn)生基于所接收的消息進(jìn)行處理的線程(thread)方法的程序。在圖4中,描述第二源代碼的文件由“Test svc_proc.cc”表示。
第三源代碼含有按諸如C++之類的編程語言描述的客戶對象信息。應(yīng)當(dāng)注意,第三源代碼包括非按第一源代碼描述的對象交互信息的客戶對象信息部分。因此,第三源代碼含有以應(yīng)用程序的形式用于實施一個主功能的,例如到一個適合的服務(wù)的連接的描述。在圖4中,其中第三源代碼被描述的文件f3由“Test.cc”和“Test.h”表示?!癟est.h”文件是一個組合在“Test.cc”文件中的包含文件。
按接口定義語言描述的第一源代碼由存根發(fā)生器101變換為利用與第二和第三源代碼的描述所使用的相同編程語言描述的源代碼。因此,存根發(fā)生器101產(chǎn)生一種由諸如C++之類的編程語言所描述的而不是由接口定義語言描述的存根方法。
更具體地講,由存根發(fā)生器101執(zhí)行的變換從描述第一源代碼的文件f1產(chǎn)生含有對服務(wù)器對象的存根方法描述的文件f4,含有對客戶對象的存根方法描述的文件f5,和由涉及對象交互的各個對象共同使用的一個包含文件F6。
在圖4中,含有服務(wù)器對象的存根方法描述的f4由“TestStub.cc”和“TestStub.h”代表?!癟eststub.h”文件是一個組合在“TestStub.cc”文件中的包含文件。含有客戶對象的存根方法描述的f5由“TestProxy.cc”和“TestProxy.h”代表?!癟estProxy.h”文件是一個組合在“TestProxy.cc”文件中的包含文件。由涉及對象交互的各個對象所共同使用的包含文件f6由“TestEntry.cc”和“TestMsg.h”代表。
然后,對含有第二源代碼描述的文件f2,含有第三源代碼描述的文件f3,和由存根發(fā)生器101產(chǎn)生的文件f4到f6的每一個進(jìn)行編輯,并且將編輯的結(jié)果鏈接起來,因此形成用于服務(wù)器對象的服務(wù)器對象可執(zhí)行文件f7和客戶對象的可執(zhí)行文件f8。
因此,在圖4所示的處理中,由具有編輯器和鏈接器的可執(zhí)行文件產(chǎn)生程序102從包括第二源代碼描述的文件f2(Test_svc_proc.cc)、含有用于服務(wù)器對象的存根方法描述的文件f4(TestStub.cc,TestStub.h)、和包含文件f6(TestEntry.h,TestMsg.h)的資源中產(chǎn)生服務(wù)器對象可執(zhí)行文件f7。這通常由參與對象交互的對象使用。同時,由具有編輯器和鏈接器的可執(zhí)行文件產(chǎn)生程序103從包括第三源代碼描述的文件f3(Test.h,Test.cc)、含有對于客戶對象的存根方法描述的文件f5(TestProxy.cc,TestProxy.h)、和包含文件F6的資源中產(chǎn)生客戶對象可執(zhí)行文件f8。這通常由參與對象交互的對象使用。
一般,在執(zhí)行程序中,存在著各種環(huán)境。因此,必須形成各種應(yīng)用程序,以便適合于程序的執(zhí)行環(huán)境。這樣自然地要求,程序執(zhí)行環(huán)境也要適合于按照應(yīng)用程序和需求的特性所產(chǎn)生的存根方法。因此,存根發(fā)生器必須產(chǎn)生存根方法,使得該存根方法適合于取決于所產(chǎn)生的存根方法的應(yīng)用程序的執(zhí)行環(huán)境。
因此,已經(jīng)有一種常規(guī)的實踐,即準(zhǔn)備不同的存根發(fā)生器,它產(chǎn)生用于不同程序執(zhí)行環(huán)境的存根方法。因此,一個具體的存根方法的產(chǎn)生要求按照將要執(zhí)行使用存根方法的應(yīng)用程序的環(huán)境,選擇使用存根發(fā)生器。
因此,對于產(chǎn)生存根方法的常規(guī)技術(shù)利用一種由用于變換按接口定義語言描述的源代碼的存根發(fā)生器執(zhí)行的操作。利用這種已知技術(shù)會遇到以下問題。
首先,研究和學(xué)習(xí)接口定義語言是重要的,以便編程者形成使用一種存根方法的應(yīng)用程序,因為按某種接口定義語言描述的源代碼的形成是必要的。一般,諸如C++之類的接口定義語言和編程語言具有基本不同的格式。因此,一個普通編程者,即使熟悉各個編程語言,也必須花費大量時間研究和學(xué)習(xí)接口定義語言,達(dá)到能利用接口定義語言形成源代碼的這樣一種程度。從而,對于形成一個使用存根方法的應(yīng)用程序,花費大量的時間和勞動是必須的。
第二個問題涉及按接口定義語言描述的源代碼部分構(gòu)成的接口和對應(yīng)于按諸如C++之類的編程語言描述的源代碼部分的接口之間的確定匹配的困難。這種困難將要詳細(xì)地描述。由表示在圖4的程序中的一種單一的應(yīng)用程序包含按接口定義語言描述的部分和按諸如C++之類的編程語言描述的部分兩者。如前所述,這兩種類型的語言使用完全不同的格式。因此,按接口定義語言的描述和按諸如C++之類的編程語言描述的并存使得確認(rèn)這些描述的接口是否相匹配是非常困難的。
第三個問題是常規(guī)的存根發(fā)生器不能共同用在多個不同的程序執(zhí)行環(huán)境中。因此,如上所述,必須準(zhǔn)備產(chǎn)生適合于不同程序執(zhí)行環(huán)境的不同存根方法的多個存根發(fā)生器。
第四,應(yīng)當(dāng)指出的是,僅由接口定義語言已經(jīng)確定的各方法可被用作存根方法。因此,各個用戶不能被允許交互地改變存根方法的內(nèi)容。換言之,在設(shè)計存根發(fā)生器的程序中確定存根方法,和因此存根方法取決于存根發(fā)生器。因此存根方法的內(nèi)容不能由用戶改變。
因此,本發(fā)明的一個目的是提供一種源代碼變換處理方法,該方法容易地適應(yīng)各種程序執(zhí)行環(huán)境和該方法可以不利用接口定義語言而產(chǎn)生存根方法。
本發(fā)明的另一目的是提供一種存儲源代碼變換程序的計算機(jī)可讀記錄媒質(zhì),該程序執(zhí)行上述源代碼變換處理程序。
為此目的,按照本發(fā)明的一個方面,提供一種源代碼變換處理方法,包括以下步驟制備利用預(yù)定編程語言描述和包含涉及用于對象交互的方法中的信息的一次源代碼,該信息是由一種對于多種程序執(zhí)行環(huán)境所共有的格式描述的;和通過參考對應(yīng)于該方法所執(zhí)行的程序執(zhí)行環(huán)境所寄存信息,按對應(yīng)于該方法將被執(zhí)行的程序執(zhí)行環(huán)境的預(yù)定格式,將該一次源代碼變換為利用與一次源代碼相同的編程語言描述的二次源代碼。
按照本發(fā)明的另一方面,提供一種存儲著源代碼變換程序的計算機(jī)可讀的記錄媒質(zhì),該程序執(zhí)行一種處理包括以下步驟制備利用預(yù)定編程語言描述的和包含涉及用于對象交互的方法中的信息的一次源代碼,該信息是由一種對于多種程序執(zhí)行環(huán)境所共有的格式描述的;和通過參考對應(yīng)于該方法所執(zhí)行的程序執(zhí)行環(huán)境所寄存信息,按對應(yīng)于該方法將被執(zhí)行的程序執(zhí)行環(huán)境的預(yù)定格式,將該一次源代碼變換為利用與一次源代碼相同的編程語言描述的二次源代碼。
從下面結(jié)合各個附圖的對本發(fā)明的優(yōu)選實施例的描述中,本發(fā)明的這些和其它的目的、特點和優(yōu)點將更加明顯。


圖1是借助于包含本發(fā)明的存根發(fā)生器形成一個存根方法的程序的說明;圖2是表示存根發(fā)生器執(zhí)行的處理的圖;圖3是按照利用一個指定器“活動(active)”所處理的分類定義的說明;和圖4是產(chǎn)生存根方法的常規(guī)程序的說明。
通過形成實現(xiàn)客戶對象和服務(wù)器對象之間的對象交互的應(yīng)用程序的過程敘述來描述按照本發(fā)明的源代碼變換處理。按照本發(fā)明的記錄媒質(zhì)存儲實現(xiàn)在下文描述的存根發(fā)生器的程序。術(shù)語“記錄媒質(zhì)”的使用意味著任何類型的計算機(jī)可讀存儲媒質(zhì),諸如磁盤、磁光盤、相位變化光盤、光盤、ROM(只讀存儲器)、RAM(隨機(jī)存取存儲器)等等。
參照圖1,形成用于對象交互的應(yīng)用程序的處理以被稱之為“第一”、“第二”和“第三”源代碼的三種源代碼的形成開始。
第一源代碼含有存根方法的描述。這意味著,用于對象交互的接口是由第一源代碼定義的。第一源代碼是利用擴(kuò)展到允許預(yù)定指定器“活動”使用的C++描述的,這種擴(kuò)展試圖能使該描述涉及存根方法。指定器“活動”已經(jīng)由專門為了本發(fā)明的目的C++的擴(kuò)展進(jìn)行定義。按照“活動”指定的成員函數(shù)(member function)是對應(yīng)于該存根方法的成員函數(shù)。在圖1中,描述第一源代碼的文件F1由“Test.h”表示。
第二源代碼含有按C++描述的服務(wù)器對象信息。該第二源代碼不含有按第一源代碼描述的對象交互信息,而含有服務(wù)器對象信息部分,該第二源代碼還含有,例如用于從由第一源代碼描述的存根方法中調(diào)用產(chǎn)生執(zhí)行基于接收的消息進(jìn)行處理的子程序的方法的程序。在圖1中,描述第二源代碼的文件F2是由“Test svc_proc.cc”表示。
第三源代碼含有按C++描述的客戶對象信息。應(yīng)當(dāng)注意,第三源代碼不包括按第一源代碼描述的的對象交互信息,而包括客戶對象信息部分。因此,第三源代碼含有用于實現(xiàn)一個主功能的描述,例如以應(yīng)用程序的形式連接到一個適當(dāng)?shù)姆?wù)上。在圖1中,描述第三源代碼的文件F3是由“Test.cc”表示。
第一源代碼由存根發(fā)生器1變換為利用C++描述的源代碼,而不使用上述的指定器“活動”。換言之,存根發(fā)生器1變換源代碼,以使利用C++描述指定器“活動”指定的成員函數(shù),該C++未被擴(kuò)展到能夠使用指定器“活動”。因此,產(chǎn)生一種存根方法,該方法是由與描述第二和第三源代碼所使用的編程語言,即C++一樣的編程語言描述的。
更具體地講,由存根發(fā)生器1執(zhí)行的變換從描述第一源代碼的文件F1中產(chǎn)生含有服務(wù)器對象的存根方法描述的文件F4、含有客戶對象的存根方法描述的文件F5、和涉及對象交互的各個對象所公共使用的包含文件F6。
在圖1中,含有服務(wù)器對象的存根方法描述的文件F4由“TestStub.cc”和“TestStub.h”代表。在下文這個文件F4將被稱為“服務(wù)器存根文件F4”?!癟estStub.h”文件是一個包括在“TestStub.cc”中的包含文件。含有客戶對象的存根方法描述的文件F5由“TestProxy.cc”和“TestProxy.h”代表。在下文這個文件F5將被稱為“客戶存根文件F5”?!癟estProxy.h”是一個包括在“TestProxy.cc”中的包含文件。由涉及對象交互中的對象公共使用的包含文件F6是由“TestEntry.cc”和“TestMsg.h”代表。這個文件將被稱為“公共存根文件F6”。作為所描述的變換的結(jié)果,包含在文件F4、F5和F6中的源代碼正如在第二和第三源代碼的情況一樣利用C++進(jìn)行描述,而不利用指定器“活動”。
然后,對每個含有第二源代碼描述的F2文件、含有第三源代碼描述的文件F3、和由存根發(fā)生器1產(chǎn)生的文件F4到F6進(jìn)行編輯,和編輯的結(jié)果被進(jìn)行鏈接,因此形成服務(wù)器對象可執(zhí)行文件F7和客戶對象可執(zhí)行文件F8。
因此,在如圖1所示的處理中,由具有編程器和鏈接器的可執(zhí)行文件發(fā)生程序2從包括描述第二源代碼的文件F2(Tes_svc_proc.cc)、含有為服務(wù)器對象的存根方法描述的服務(wù)器存根文件F4(TestStub.cc,TestStub.h),和由參與對象交互的對象公共使用的公共存根文件F6(TestEntry.h,TestMsg.h)組成的資源中產(chǎn)生服務(wù)器對象可執(zhí)行文件F7。
同時,由具有編程器和鏈接器的可執(zhí)行文件3從包括描述第三源代碼的文件F3(Test.cc)、含有為客戶對象的存根方法描述的客戶存根文件F5(TestProxy.cc,TestProxy.h)、和由參與對象交互的對象公共使用的公共存根文件F6(TestEntry.h,TestMsg.h)組成的資源中產(chǎn)生客戶對象可執(zhí)行文件F8。
現(xiàn)在將對存根發(fā)生器1進(jìn)行詳細(xì)描述。
存根發(fā)生器1被設(shè)計得不使用接口定義語言,而通過使用指定器“活動”,非常容易和具有高度靈活性地產(chǎn)生存根方法。
更具體地講,存根發(fā)生器1是利用面向?qū)ο缶幊碳夹g(shù)形成的源代碼變換程序,和它被試圖用于產(chǎn)生用于對象交互中的存根方法。存根發(fā)生器1將借助于指定器“活動”描述存根方法的源代碼變換為不利用那種指定器而按C++語言描述存根方法的源代碼。更具體地講,在如圖1所示的程序中,存根發(fā)生器1起到借助于指定器“活動”變換描述存根方法的文件F1(Test.h),從而產(chǎn)生存根文件F4(TestStub.cc,TestStub.h)、客戶存根文件F5(TestProxy.cc,TestProxy.h)、和公共存根文件F6(TestEntry.h,TestMsg.h)。
正如將從圖2所看到的那樣,存根發(fā)生器1主要包括分析輸入的源代碼的分析部分4,和從所分析的源代碼中產(chǎn)生一個存根方法的產(chǎn)生部分5。分析部分4分割輸入的源代碼為一些連續(xù)的單元,產(chǎn)生該程序的中間表示,而產(chǎn)生部分5從由分析4產(chǎn)生的中間表示中產(chǎn)生一個存根方法。
分析部分4的組態(tài)對應(yīng)于描述輸入的源代碼的編程語言。因此,當(dāng)使用不同的編程語言描述輸入到存根發(fā)生器的源代碼時,分析部分4具有不同的組態(tài)。然而,應(yīng)當(dāng)理解無論編程語言什么類型,分析部分4產(chǎn)生同樣的中間表示。因此,公共發(fā)生部分5可以被用于描述輸入到存根發(fā)生器1的源代碼的不同的編程語言。
圖2通過例子的方式表示由存根發(fā)生器1執(zhí)行的處理。輸入處理例程11(CharInput)接收按擴(kuò)展到使用指定器“活動”的C++描述文件F1(Test.h)。例程11去掉來自輸入源代碼的無用空格和注解,以便提取有意義的編程項。在這個輸入處理例程11中,由被擴(kuò)展的C++定義的指定器“活動”也被作為保留字進(jìn)行識別。
一個后續(xù)指定器,即項分析指定器(TokenAnalyze)12分析在輸入處理指定器中提取的各個項和產(chǎn)生按照令牌安排的有意義的編程項的令牌碼流(token stream),這些令牌是一些邏輯單元。這個項分析例程還識別由擴(kuò)展的C++定義的指定器“活動”。
輸入處理例程11,以及項分析例程12使用一種符號表管理對象(SymbolManage)13。符號表管理對象13具有稱為“符號表”的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)含有涉及各種例程構(gòu)成單元的信息。例如,如圖3所示的符號表儲存涉及指定器“活動”指定的類信息,包括類名稱和含在類中的函數(shù)名稱和它們的返回值,以及各個功能的參數(shù)名稱和參數(shù)類型。每個函數(shù)可以使用兩個或多個參數(shù)。在這種情況下,寄存在表中的信息含有這些參數(shù)的名稱和類型。
寄存在符號表管理對象13中的內(nèi)容是動態(tài)可變的。這就是說,其內(nèi)容可以根據(jù)產(chǎn)生的存根方法按期望改變。
返回到圖2,然后語法分析(SyntaxAnalyse)14對作為項分析例程12的結(jié)果的令牌碼流進(jìn)行語法分析。作為這個分析的結(jié)果,所謂語法樹信息,產(chǎn)生構(gòu)成令牌流的各個令牌之間的相關(guān)性的指示,存儲到語法樹對象(TreeManage)15中。因此,獲得的語法樹信息構(gòu)成了上述的中間表示的部分。
輸入的源代碼按照所描述的方式由分析部分4進(jìn)行分析,從而獲得一個中間表示。然后,產(chǎn)生部分5進(jìn)行操作,從由分析部分4所產(chǎn)生的中間表示中產(chǎn)生目標(biāo)源代碼。更具體地,包括在產(chǎn)生部分5中的碼產(chǎn)生例程(CodeGenerate)16根據(jù)作為由語法分析例程14執(zhí)行的分析結(jié)果獲得的語法樹信息產(chǎn)生和輸出目標(biāo)源代碼。更具體地講,碼產(chǎn)生例程16調(diào)用碼產(chǎn)生對象(CodeGenManage)17。碼產(chǎn)生對象17包括用于從通過由分析部分4執(zhí)行的分析獲得的中間表示中產(chǎn)生目標(biāo)源代碼的方法。因此,由碼產(chǎn)生對象17產(chǎn)生目標(biāo)源代碼。
更具體地講,碼產(chǎn)生對象17產(chǎn)生和輸出服務(wù)器存根文件F4(TestStub.cc,TestStub.h)、客戶存根文件F5(TestProxy.cc,TestProxy.h)和公共存根文件F6(TestEntry.h,TestMsg.h)。這些文件F4、F5和F6已經(jīng)按C++描述,而不用指定器“活動”。
存根發(fā)生器1被配置,以便寄存在碼產(chǎn)生對象17中的預(yù)定的模式文件F9。這些模式文件F9是可轉(zhuǎn)換的,以便產(chǎn)生對應(yīng)于不同程序執(zhí)行環(huán)境的存根方法,正如將從下面的描述所理解的那樣。
一般,一個應(yīng)用程序在由操作系統(tǒng)提供的預(yù)定程序執(zhí)行環(huán)境下被執(zhí)行?,F(xiàn)存多種程序執(zhí)行環(huán)境。
例如,操作系統(tǒng)“Aperios”(注冊商標(biāo))被設(shè)計成同時提供多個不同的程序執(zhí)行環(huán)境。每個程序執(zhí)行環(huán)境被稱之為“亞空間”(meta space)。更具體地,操作系統(tǒng)“Aperios”可以同時提供稱為“mAV亞空間”的亞空間和稱為“mCOOP亞空間”的亞空間。mAV亞空間用于執(zhí)行所謂過程程序。在mAV亞空間執(zhí)行的應(yīng)用程序是作為一個單一對象進(jìn)行描述的。另一方面,mCOOP亞空間用于面向?qū)ο蟪绦?。一般,在mCOOP亞空間執(zhí)行的應(yīng)用程序是由多個對象構(gòu)成的。
當(dāng)操作系統(tǒng)“Aperios”上載到具有電視(TV)功能的裝置中時,可以這樣安排,即在電視上顯示運動圖像的應(yīng)用程序在mAV亞空間執(zhí)行,而實現(xiàn)圖形用戶接口(GUI),用于控制將一些操作指令輸入到裝置中的操作板的應(yīng)用程序,是在mCOOP亞空間執(zhí)行的。使用于在mAV亞空間中執(zhí)行的應(yīng)用程序中的存根方法,與使用于在mCOOP亞空間執(zhí)行的應(yīng)用程序的存根方法不同。
由存根發(fā)生器1產(chǎn)生的存根方法必須適合于該存根方法執(zhí)行的程序執(zhí)行環(huán)境。更具體地講,在mAV亞空間執(zhí)行的應(yīng)用程序的存根方法必須正確地在mAV亞空間運作。同樣,在mCOOP亞空間執(zhí)行的應(yīng)用程序的存根方法必須正確地在mCOOP亞空間運作。
因此,在所描述的實施例中的存根發(fā)生器1中,對應(yīng)于多種不同程序執(zhí)行環(huán)境的模式文件F9可以被寄存在碼產(chǎn)生對象17中,以便可以產(chǎn)生用于多種不同程序執(zhí)行環(huán)境的存根方法。換言之,對應(yīng)于相應(yīng)程序執(zhí)行環(huán)境的模式文件F9被寄存在碼產(chǎn)生對象17中,以便根據(jù)所希望的存根方法執(zhí)行的程序執(zhí)行環(huán)境選擇使用,從而按照多種不同程序執(zhí)行環(huán)境的每一種產(chǎn)生存根方法。
更具體地講,參照圖2,在一個存根方法產(chǎn)生之前,形成描述用于產(chǎn)生對應(yīng)于各個程序執(zhí)行環(huán)境的存根方法所需信息的模式文件F9,寄存在存根發(fā)生器1中。當(dāng)接收到模式文件F9時,存根發(fā)生器1激活模式文件輸入處理例程(PatternInput)18,該例程接收這些模式文件F9和寄存所接收的模式文件F9,作為在碼產(chǎn)生對象17中的內(nèi)部信息。應(yīng)當(dāng)注意,在碼產(chǎn)生對象17中的模式文件F9的寄存是利用模式文件和程序執(zhí)行環(huán)境之間的清楚關(guān)系引導(dǎo)的,即各個程序執(zhí)行環(huán)境與每個模式文件一一對應(yīng)。
當(dāng)產(chǎn)生一個存根方法時,存根發(fā)生器1參考模式文件F9中的一個模式,該模式對應(yīng)于執(zhí)行產(chǎn)生的存根方法的程序執(zhí)行環(huán)境。因此,單一的存根發(fā)生器1可以產(chǎn)生對應(yīng)于多種不同程序執(zhí)行環(huán)境的存根方法。
還應(yīng)當(dāng)理解為,對于不同程序執(zhí)行環(huán)境的模式文件F9的寄存能使存根發(fā)生器1動態(tài)地改變產(chǎn)生存根方法的程序。例如,當(dāng)希望產(chǎn)生對應(yīng)于一個新的程序執(zhí)行環(huán)境的存根方法時,對應(yīng)于該新的程序執(zhí)行環(huán)境的一個模式文件F9被輸入到存根發(fā)生器1,使得存根發(fā)生器1產(chǎn)生對應(yīng)于該新的程序執(zhí)行環(huán)境的存根方法。同樣,當(dāng)現(xiàn)存的程序執(zhí)行環(huán)境已經(jīng)被更新時,對應(yīng)于這個程序執(zhí)行環(huán)境的模式文件F9被相應(yīng)地修改和代替現(xiàn)存的模式文件F9被寄存。從而,對于更新的程序執(zhí)行環(huán)境產(chǎn)生存根方法。
輸入到存根發(fā)生器1的源代碼利用按通用于不同程序執(zhí)行環(huán)境的格式的指定器“活動”進(jìn)行描述,上述格式即利用獨立于執(zhí)行待產(chǎn)生的存根方法的程序執(zhí)行環(huán)境的格式。因此,描述在每個模式文件F9中的內(nèi)容包括,用于將按通用于多種不同的程序執(zhí)行環(huán)境描述的源代碼變換為對應(yīng)于一種選擇的程序執(zhí)行環(huán)境的另一源代碼的信息。
因此,用于這個實施例的存根發(fā)生器1,通過參考寄存的模式文件F9,將含有按通用多種不同程序執(zhí)行環(huán)境的格式描述的存根方法信息的源代碼變換為對應(yīng)于執(zhí)行存根方法的程序執(zhí)行環(huán)境的預(yù)定格式的另一源代碼。
正如從上面的描述將會理解的那樣,本發(fā)明不利用接口定義語言,而通過利用存根發(fā)生器1可以產(chǎn)生存根方法。這消除了研究和學(xué)習(xí)接口定義語言的必要,其對于不熟悉接口定義語言的人當(dāng)想編制使用存根方法的應(yīng)用程序時是需要的。因而,本發(fā)明大大方便了利用存根方法形成應(yīng)用程序。
使用在所描述的實施例中的存根發(fā)生器1,如上所述能夠不借助于接口定義語言產(chǎn)生存根方法,提供了另外一個優(yōu)點,消除了現(xiàn)有技術(shù)所遇到的問題,即證實按接口定義語言描述的部分提供的接口與諸如C++之類的編程語言所描述的部分接口相符合的困難。因此,利用這種存根發(fā)生器1提供的另一優(yōu)點是關(guān)于對象交互接口的證實,由存根方法所執(zhí)行的工作更加容易實現(xiàn)了。
另外一個優(yōu)點是,因為參考了對應(yīng)于執(zhí)行存根方法的程序執(zhí)行環(huán)境的所寄存的模式文件F9,所以源代碼的變換可以通過利用通用于多種不同程序執(zhí)行環(huán)境的一個單一的存根發(fā)生器1執(zhí)行。
再一個優(yōu)點是,存根發(fā)生器1借助于寄存對應(yīng)于多種不同程序執(zhí)行環(huán)境的每個的模式文件F9的特征,允許動態(tài)改變存根方法產(chǎn)生程序。因此,存根發(fā)生器1通過改變模式文件F9的內(nèi)容,可以產(chǎn)生在該存根發(fā)生器1的初始設(shè)計中未予考慮的存根方法。
正如從上面的描述將會理解的那樣,本發(fā)明提供一種源代碼變換方法,該方法能夠不利用任何接口定義語言,以高容易度和靈活性,以及對各種程序執(zhí)行環(huán)境的寬的適應(yīng)性產(chǎn)生存根方法。
雖然本發(fā)明已經(jīng)通過它的優(yōu)選形式進(jìn)行了描述,但是應(yīng)當(dāng)理解為,所描述的實施例僅是說明性的。例如,雖然C++已經(jīng)被具體地描述為描述源代碼的編程語言,但是本發(fā)明還可以等效地利用另外的編程語言進(jìn)行實施。在不脫離僅由所附的權(quán)利要求書進(jìn)行限制的本發(fā)明的范圍情況下,對本發(fā)明還可以作出進(jìn)一步的改變和修改。
權(quán)利要求
1.一種源代碼變換方法,包括以下步驟準(zhǔn)備以預(yù)定編程語言描述和含有涉及用于對象交互的方法的信息的一次源代碼,所述信息是按通用于多種不同程序執(zhí)行環(huán)境的格式描述的;和通過參考對應(yīng)于執(zhí)行所述方法的程序執(zhí)行環(huán)境的寄存信息,按對應(yīng)于執(zhí)行所述方法的程序執(zhí)行環(huán)境的預(yù)定格式,將所述一次源代碼變換為利用與一次源代碼相同的編程語言描述的二次源代碼。
2.一種計算機(jī)可讀記錄媒質(zhì),該媒質(zhì)存儲實施包括以下步驟的一種方法的源代碼變換程序。準(zhǔn)備以預(yù)定編程語言描述和含有涉及用于對象交互的方法的信息的一次源代碼,所述信息是按通用于多種不同程序執(zhí)行環(huán)境的格式描述的;和通過參考對應(yīng)于執(zhí)行所述方法的程序執(zhí)行環(huán)境的寄存信息,按對應(yīng)于執(zhí)行所述方法的程序執(zhí)行環(huán)境的預(yù)定格式,將所述一次源代碼變換為利用與一次源代碼相同的編程語言描述的二次源代碼。
全文摘要
一種將含有在對象交互中的存根方法的描述的初始源代碼變換為對應(yīng)于程序執(zhí)行環(huán)境的另一源代碼的方法。初始源代碼是由預(yù)定編程語言描述的,含有涉及用于對象交互中的存根方法的信息。變換是參考一個寄存的信息,將源代碼按照預(yù)定的格式,變換為與普通源代碼相同編程語言的源代碼。這消除了學(xué)習(xí)接口定義語言的必要,因而大大方便了利用存根方法形成應(yīng)用程序。
文檔編號G06F9/06GK1214486SQ9812434
公開日1999年4月21日 申請日期1998年8月21日 優(yōu)先權(quán)日1997年8月21日
發(fā)明者李巧云 申請人:索尼公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1