專利名稱:翻譯設(shè)備、翻譯方法和程序存儲(chǔ)介質(zhì)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及翻譯設(shè)備、翻譯方法和存儲(chǔ)介質(zhì),適于將以第一編程語(yǔ)言描述的、能夠描述用于保持變量的重疊存儲(chǔ)區(qū)域的程序翻譯為以第二編程語(yǔ)言描述的、同時(shí)分解重疊變量存儲(chǔ)區(qū)域的程序。
背景技術(shù):
在工業(yè)界,使用各種類型的編程語(yǔ)言。隨著這些年使用許多程序,在某種程度上確保了這些程序的操作穩(wěn)定性。在這些程序中,存在很多以存儲(chǔ)區(qū)域嚴(yán)重受限的時(shí)代創(chuàng)建的編程語(yǔ)言描述的程序。為了節(jié)約存儲(chǔ)區(qū)域并轉(zhuǎn)換一些變量類型,這些編程語(yǔ)言中的許多都允許特定變量和另一變量重疊地存儲(chǔ)在相同存儲(chǔ)區(qū)域的描述。例如,在C語(yǔ)言中,聲明諸如以下聯(lián)合(union)的描述被用于將表示公歷年的整數(shù)和以字符串表示公歷年的字符數(shù)組重疊地分配給由RAM(隨機(jī)存取存儲(chǔ)器)實(shí)現(xiàn)的存儲(chǔ)器union {int i ;char s [5] ;} y ;變量y用于存儲(chǔ)年。期望該描述將整數(shù)變量y. i和字符數(shù)組變量y. s分配給重疊區(qū)域,并且將公歷年以整數(shù)值存儲(chǔ)在y. i中并以字符串值存儲(chǔ)在y. s中。如果針對(duì)16比特CPU(中央處理單元)創(chuàng)建該程序,則通常以16比特表示整數(shù) int i,即,2個(gè)字節(jié),而以5個(gè)字節(jié)表示字符數(shù)組char s[5]。在這種情況下,通過(guò)與字符數(shù)組變量1. s的頭兩個(gè)字節(jié)y. s
、y. s[l]重疊,將整數(shù)變量y. i分配給存儲(chǔ)區(qū)域。假設(shè)針對(duì)字節(jié)序列采用小字節(jié)序。為了將整數(shù)值賦值為公歷年,執(zhí)行以下等式y(tǒng). i = 2009 ;這里,由于以下等式為真2009 = 217+7X256,通過(guò)執(zhí)行整數(shù)值的上述賦值,y. s
變?yōu)?17,y. s[l]成為7。同時(shí),C語(yǔ)言針對(duì)字符串采用ASCIIZ格式,該格式使用值0作為終結(jié)符。為此,特別地當(dāng)把整數(shù)賦值給y. i之前通過(guò)如下的等式寫(xiě)入長(zhǎng)度為0或1的ASCIIZ字符串時(shí),strcpy (y. s,“”);或strcpy (y. s,"a");終結(jié)符被對(duì)y. i的賦值所重寫(xiě)。結(jié)果,y. s成為非法的ASCIIZ字符串。此外,7是ASCII字符中BEL的字符碼,217超出ASCII字符的范圍,它是一字節(jié)的片假名‘ru’的碼,而不是程序員意圖所指的‘表示公歷年的字符串’。此外,盡管如果執(zhí)行以下等式strcpy (y. s,“2009,,);
5
字符數(shù)組y. s是有效的ASCIIZ字符串并存儲(chǔ)程序員所期望的值,但是由于‘2’指示字符碼50,‘0’指示字符碼48,整數(shù)y. i具有值50+48X256 = 12338,這不是適于公歷年的值。用于表示整數(shù)的其它方法包括利用比特?cái)?shù)組本身并將整數(shù)表示為1的補(bǔ)數(shù)或2 的補(bǔ)數(shù)的方法;使用壓縮二進(jìn)制編碼的十進(jìn)制等式的方法,其中以半個(gè)字節(jié)(nibble)存儲(chǔ) 1個(gè)十進(jìn)制數(shù)值(0-9);以及使用分區(qū)二進(jìn)制編碼的十進(jìn)制等式的方法,該等式使用相應(yīng)的字符碼來(lái)表示1個(gè)十進(jìn)制數(shù)值,并可以被解釋為整數(shù)和字符數(shù)組。例如,在COBOL語(yǔ)言中,不同于C語(yǔ)言,獨(dú)立于CPU的規(guī)范和特征等,通過(guò)以1個(gè)字節(jié)存儲(chǔ)一個(gè)數(shù)位,針對(duì)四位分區(qū)二進(jìn)制編碼的十進(jìn)制保留4字節(jié)區(qū)域。此外,REDEFINES子句用于將針對(duì)分區(qū)二進(jìn)制編碼的十進(jìn)制的存儲(chǔ)區(qū)域和針對(duì)字符串變量的存儲(chǔ)區(qū)域重疊。因此,為了以利用重新定義字段的聲明的COBOL語(yǔ)言來(lái)描述以上的C語(yǔ)言程序,使用以下描述01 Y02 YI PIC Z (4)03 YY REDEFINES YI04 YS PIC X (4)在添加了這種聲明的COBOL語(yǔ)言程序中,如果執(zhí)行以下等式MOVE 2009T0 YI,則分配字符‘2’的字符碼作為重疊存儲(chǔ)區(qū)域中的字符數(shù)組變量YS的第一字符;分配字符‘0’的字符碼作為第二字符;分配字符‘0’的字符碼作為第三字符;以及分配字符 ‘9’的字符碼作為第四字符。結(jié)果,在這種情況下,字符數(shù)組變量YS和整數(shù)變量YI具有有效值。另一方面,如果例如通過(guò)MOVE ‘a(chǎn)bed,TO YS對(duì)長(zhǎng)度為4的字符數(shù)組‘a(chǎn)bed,賦值, 則該字符數(shù)組無(wú)法被解釋為整數(shù)。因而,整數(shù)變量YI的值變?yōu)闊o(wú)效,參照YI的值,出現(xiàn)異
堂
巾O此外,將這種變量值存儲(chǔ)至數(shù)據(jù)庫(kù)或從數(shù)據(jù)庫(kù)中獲取該值的技術(shù)已經(jīng)得以使用。在特定的COBOL處理系統(tǒng)中,在如下實(shí)現(xiàn)中運(yùn)行多個(gè)程序當(dāng)將變量存儲(chǔ)至數(shù)據(jù)庫(kù)時(shí),僅寫(xiě)入在重新定義的字段的開(kāi)始所聲明的變量;以及在從數(shù)據(jù)庫(kù)中獲取變量時(shí),僅讀出在重新定義的字段的開(kāi)始所聲明的變量;以及在變量的值無(wú)效時(shí),存儲(chǔ)至數(shù)據(jù)庫(kù)或從數(shù)據(jù)庫(kù)中獲取的值是NIL值。同時(shí),在近年來(lái),隨著存儲(chǔ)器價(jià)格的降低以及計(jì)算機(jī)性能的提高,以不具有將多個(gè)變量分配至重疊的存儲(chǔ)區(qū)域的特征的編程語(yǔ)言描述各種處理。例如,在專利文獻(xiàn)1中描述的技術(shù)公開(kāi)了一種使用不具有如上所述的特征的JAVA(注冊(cè)商標(biāo))語(yǔ)言對(duì)商業(yè)過(guò)程計(jì)算機(jī)化的編譯技術(shù)。現(xiàn)有技術(shù)文獻(xiàn)專利文獻(xiàn)專利文獻(xiàn)1 未申日本專利申請(qǐng)KOKAI公開(kāi)No. 2006-031173
發(fā)明內(nèi)容
要解決的技術(shù)問(wèn)題因此,為了利用過(guò)去的資源,如以COBOL語(yǔ)言描述的程序,存在用于將該程序翻譯為JAVA(注冊(cè)商標(biāo))語(yǔ)言的方法。然而,如上所述,在JAVA(注冊(cè)商標(biāo))語(yǔ)言中,不存在與聯(lián)合或重新定義的字段等同的這種特征。因而,需要一種新的技術(shù),對(duì)這些聯(lián)合和重新定義的字段進(jìn)行翻譯。除此之外,為了減少對(duì)CPU的規(guī)范等的依賴性,需要一種甚至在翻譯為C語(yǔ)言或 C++語(yǔ)言時(shí)也不使用聯(lián)合的翻譯技術(shù)。本發(fā)明意在解決上述問(wèn)題。本發(fā)明旨在提供翻譯設(shè)備、翻譯方法和存儲(chǔ)介質(zhì),適于將以第一編程語(yǔ)言描述的、能夠描述用于保持變量的重疊存儲(chǔ)區(qū)域的程序翻譯為以第二編程語(yǔ)言描述的、同時(shí)分解重疊變量存儲(chǔ)區(qū)域的程序。解決問(wèn)題的手段為了實(shí)現(xiàn)上述目的,將根據(jù)本發(fā)明的原理來(lái)公開(kāi)以下發(fā)明。根據(jù)本發(fā)明的第一方面的翻譯設(shè)備將以第一編程語(yǔ)言描述的未翻譯的程序翻譯為以第二編程語(yǔ)言描述的翻譯后的程序,所述翻譯設(shè)備包括聲明翻譯單元、賦值翻譯單元、以及參考翻譯單元,所述翻譯設(shè)備被配置如下也就是說(shuō),所述聲明翻譯單元將未翻譯的程序中的“用于保持第一未翻譯的變量的存儲(chǔ)區(qū)域和用于保持第二未翻譯的變量的存儲(chǔ)區(qū)域相重疊”的聲明翻譯為翻譯后的程序中的“在不相互重疊的存儲(chǔ)區(qū)域中保持第一翻譯后的變量和與所述第一翻譯后的變量相對(duì)應(yīng)的第一翻譯后的標(biāo)記、以及第二翻譯后的變量和與所述第二翻譯后的變量相對(duì)應(yīng)的第二翻譯后的標(biāo)記”的聲明。同時(shí),所述賦值翻譯單元將未翻譯的程序中的“向第一未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第一翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第二翻譯后的標(biāo)記,無(wú)論記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效”的文本,以及將未翻譯的程序中的“向第二未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第二翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第一翻譯后的標(biāo)記,無(wú)論記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效”的文本。此外,所述參考翻譯單元將未翻譯的程序中的“參考第一未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第一翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁剑约皩⑽捶g的程序中的 “參考第二未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第二翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!?的等式。
7
此外,本發(fā)明的翻譯設(shè)備還包括登記翻譯單元和讀出翻譯單元,可以被配置如下也就是說(shuō),所述登記翻譯單元將未翻譯的程序中的“向數(shù)據(jù)庫(kù)登記第一未翻譯的變量的值”的文本翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí),向數(shù)據(jù)庫(kù)登記第一翻譯后的變量的值;以及當(dāng)確定為無(wú)效時(shí),向數(shù)據(jù)庫(kù)登記NIL 值”的文本,以及將未翻譯的程序中的“向數(shù)據(jù)庫(kù)登記第二未翻譯的變量的值”的文本翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí),向數(shù)據(jù)庫(kù)登記第二翻譯后的變量的值;以及當(dāng)確定為無(wú)效時(shí),向數(shù)據(jù)庫(kù)登記NIL值”的文本。同時(shí),所述讀出翻譯單元將未翻譯的程序中的“將從數(shù)據(jù)庫(kù)讀出的值賦值給第一未翻譯的變量”的文本翻譯為翻譯后的程序中的“從數(shù)據(jù)庫(kù)讀出值;當(dāng)讀出值是NIL值時(shí), 在第一翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息是無(wú)效的;當(dāng)讀出值不是NIL值時(shí),在第一翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息是有效的;以及將讀出值寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中”的文本,以及將未翻譯的程序中的“將從數(shù)據(jù)庫(kù)讀出的值賦值給第二未翻譯的變量”的文本翻譯為翻譯后的程序中的“從數(shù)據(jù)庫(kù)讀出值;當(dāng)讀出值是NIL值時(shí),在第二翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息是無(wú)效的;當(dāng)讀出值不是NIL值時(shí),在第二翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息是有效的;以及將讀出值寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中”的文本。在本發(fā)明的翻譯設(shè)備中,第一未翻譯的變量可以是分區(qū)二進(jìn)制編碼的十進(jìn)制,第二未翻譯的變量可以是與分區(qū)二進(jìn)制編碼的十進(jìn)制不同的整數(shù);第一翻譯后的變量可以是能夠表示可包括第一未翻譯的變量的整數(shù)域的整數(shù);以及第二翻譯后的變量可以是能夠表示可包括第二未翻譯的變量的整數(shù)域的整數(shù)。此外,在本發(fā)明的翻譯設(shè)備中,第一未翻譯的變量可以是分區(qū)二進(jìn)制編碼的十進(jìn)制;第二未翻譯的變量可以是字符數(shù)組;第一翻譯后的變量可以是能夠表示可包括第一未翻譯的變量的整數(shù)域的整數(shù);以及第二翻譯后的變量可以是第二未翻譯的變量的字符數(shù)組。通過(guò)用于將以第一編程語(yǔ)言描述的未翻譯的程序翻譯為以第二編程語(yǔ)言描述的翻譯后的程序的翻譯設(shè)備來(lái)執(zhí)行根據(jù)本發(fā)明的另一方面的翻譯方法。所述翻譯設(shè)備包括 聲明翻譯單元、賦值翻譯單元、以及參考翻譯單元,所述翻譯方法包括聲明翻譯步驟、賦值翻譯步驟、以及參考翻譯步驟,所述翻譯方法被配置如下也就是說(shuō),在所述聲明翻譯步驟中,所述聲明翻譯單元將未翻譯的程序中的“用于保持第一未翻譯的變量的存儲(chǔ)區(qū)域和用于保持第二未翻譯的變量的存儲(chǔ)區(qū)域相重疊”的聲明翻譯為翻譯后的程序中的“在不相互重疊的存儲(chǔ)區(qū)域中保持第一翻譯后的變量和與所述第一翻譯后的變量相對(duì)應(yīng)的第一翻譯后的標(biāo)記、以及第二翻譯后的變量和與所述第二翻譯后的變量相對(duì)應(yīng)的第二翻譯后的標(biāo)記”的聲明。同時(shí),在所述賦值翻譯步驟中,所述賦值翻譯單元將未翻譯的程序中的“向第一未
8翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第一翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第二翻譯后的標(biāo)記,無(wú)論記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效”的文本,以及將未翻譯的程序中的“向第二未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第二翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第一翻譯后的標(biāo)記,無(wú)論記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效”的文本。此外,在所述參考翻譯步驟中,所述參考翻譯單元將未翻譯的程序中的“參考第一未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第一翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁?, 以及將未翻譯的程序中的“參考第二未翻譯的變量的值”的等式翻譯為翻譯后的程序中的 “通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第二翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁?。根據(jù)本發(fā)明的另一方面的用于記錄程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)被配置為運(yùn)行所述程序,以使計(jì)算機(jī)充當(dāng)上述翻譯設(shè)備。該程序可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如壓縮盤(pán)、軟盤(pán)、硬盤(pán)、磁光盤(pán)、數(shù)字通用盤(pán)、磁帶和半導(dǎo)體存儲(chǔ)器??梢酝ㄟ^(guò)計(jì)算機(jī)通信網(wǎng)絡(luò),與運(yùn)行程序的計(jì)算機(jī)相分離地傳遞/出售上述程序。 此外,可以與計(jì)算機(jī)相分離地傳遞/出售上述存儲(chǔ)介質(zhì)。發(fā)明效果根據(jù)本發(fā)明,可以提供翻譯設(shè)備、翻譯方法和存儲(chǔ)介質(zhì),適于將以第一編程語(yǔ)言描述的、能夠描述用于保持變量的重疊存儲(chǔ)區(qū)域的程序翻譯為以第二編程語(yǔ)言描述的、同時(shí)分解重疊變量存儲(chǔ)區(qū)域的程序。
圖1是示出了根據(jù)本發(fā)明的實(shí)施例的翻譯設(shè)備的整體配置的框架格式的視圖。圖2是示出了由設(shè)置方法執(zhí)行的處理的控制流程的流程圖。圖3是示出了由獲取方法執(zhí)行的處理的控制流程的流程圖。
具體實(shí)施例方式以下將描述本發(fā)明的實(shí)施例。盡管以下實(shí)施例為了易于理解,描述了將COBOL語(yǔ)言(第一編程語(yǔ)言)程序(未翻譯的程序)編譯為JAVA(注冊(cè)商標(biāo))語(yǔ)言(第二編程語(yǔ)言)程序(翻譯后的程序),但是本申請(qǐng)的發(fā)明范圍并不限于此。因而,在本領(lǐng)域技術(shù)人員可以通過(guò)將這些元件中的每個(gè)或全部替換為等同物而采用其它實(shí)施例時(shí),這些實(shí)施例也包括在本發(fā)明的范圍內(nèi)。
9
例如,本發(fā)明可以類似地應(yīng)用于將C語(yǔ)言或C++語(yǔ)言用作描述翻譯后的程序的編程語(yǔ)言(該翻譯后的程序中不使用聯(lián)合)的情況。實(shí)施例1圖1是示出了根據(jù)本發(fā)明實(shí)施例的翻譯設(shè)備的整體配置的框架格式的圖示。以下將參照?qǐng)D1進(jìn)行描述。通過(guò)在計(jì)算機(jī)中運(yùn)行編譯器程序來(lái)實(shí)現(xiàn)圖1中示出的翻譯設(shè)備101。計(jì)算機(jī)從存儲(chǔ)介質(zhì)(如,硬盤(pán))中將編譯器程序讀到RAM上,CPU與計(jì)算機(jī)中的其它功能組件一起工作來(lái)運(yùn)行編譯器程序。例如,未翻譯的程序和翻譯后的程序可以均記錄在存儲(chǔ)介質(zhì)(如,硬盤(pán))中。此外, RAM用于記錄編譯過(guò)程的臨時(shí)結(jié)果及其它目的。如圖1所示,當(dāng)將未翻譯的程序給予翻譯設(shè)備101時(shí),詞匯分析單元102執(zhí)行詞匯分析,并將未翻譯的程序轉(zhuǎn)換為包括標(biāo)識(shí)符、運(yùn)算符和保留字的字符數(shù)組。接下來(lái),語(yǔ)法分析單元103接受該字符數(shù)組,執(zhí)行語(yǔ)法分析,并獲取包括未翻譯的程序的文本。這些文本包括以下種類(1)導(dǎo)致變量存儲(chǔ)區(qū)域的重疊的聲明文本(2)向重疊存儲(chǔ)區(qū)域中的變量賦值的賦值文本。以這種方式使用變量對(duì)應(yīng)于使用該變量作為C++語(yǔ)言中的左手值(L-值)。(3)包括用于參考重疊存儲(chǔ)區(qū)域中的變量的值的等式的參考文本。以這種方式使用變量對(duì)應(yīng)于使用該變量作為C++語(yǔ)言中的右手值(R-值)。(4)用于向數(shù)據(jù)庫(kù)登記重疊存儲(chǔ)區(qū)域中的變量的值的登記文本。(5)用于從數(shù)據(jù)庫(kù)讀出重疊存儲(chǔ)區(qū)域中的變量的值的讀出文本。(6)不使用重疊存儲(chǔ)區(qū)域中的變量的正常文本。應(yīng)注意,在以上賦值文本中,所賦值可以包括被參考的等式。分別通過(guò)聲明翻譯單元104、賦值翻譯單元105、登記翻譯單元107、讀出翻譯單元 106和正常翻譯單元109來(lái)編譯這些文本。此外,參考翻譯單元106編譯參考文本中的“用于參考重疊存儲(chǔ)區(qū)域中的變量的值的等式”。因而,如果將“用于參考重疊存儲(chǔ)區(qū)域中的變量的值的等式”用作要在賦值文本中進(jìn)行賦值的值,則賦值翻譯單元105令參考翻譯單元106編譯該等式并使用結(jié)果。通過(guò)組合單元110組合翻譯后的文本以形成翻譯后的程序。詞匯分析單元102、語(yǔ)法分析單元103、正常翻譯單元109和組合單元110中的處理細(xì)節(jié)可以應(yīng)用用于各種編譯器和翻譯器的公知技術(shù)。以下描述了聲明翻譯單元104、賦值翻譯單元105、參考翻譯單元106、登記翻譯單元107和讀出翻譯單元108的特征的進(jìn)一步的細(xì)節(jié)。(聲明翻譯單元)聲明翻譯單元104將COBOL語(yǔ)言的、分配給重疊存儲(chǔ)區(qū)域的變量的聲明編譯為 JAVA (注冊(cè)商標(biāo))的聲明。例如,在以上示例中,將由分區(qū)二進(jìn)制編碼的十進(jìn)制YI和字符數(shù)組變量YS表示整數(shù)變量的聲明作為重新定義的字段重疊地分配給相同的存儲(chǔ)區(qū)域。為了易于理解,以下描
10述用于編譯這些變量的方法的示例。聲明翻譯單元104將重疊存儲(chǔ)區(qū)域中的這樣的變量編譯為例如以下所述的聲明(a)用于存儲(chǔ)每個(gè)COBOL變量的JAVA(注冊(cè)商標(biāo))變量的聲明。例如,假設(shè)vi和 vs被聲明為用于記錄存儲(chǔ)在COBOL變量yi和ys中的值的JAVA(注冊(cè)商標(biāo))變量。以下, 這些變量被稱為數(shù)據(jù)變量。vi和vs的類型需要精確到足以記錄可以在YI和YS中存儲(chǔ)的 fn息ο(b)在訪問(wèn)每個(gè)COBOL變量時(shí)顯示該變量是否有效的JAVA (注冊(cè)商標(biāo))變量的聲明。例如,假設(shè)f i和fs是記錄存儲(chǔ)在COBOL變量yi和ys中的值的JAVA (注冊(cè)商標(biāo))變量。以下,將這些變量稱為標(biāo)記變量。盡管典型地,fi和fs的類型是記錄真或假值的布爾類型,但是也可以使用諸如比特?cái)?shù)組或比特字段的技術(shù)。fi和fs的缺省值典型被設(shè)置為 “假”。(c)針對(duì)JAVA(注冊(cè)商標(biāo))變量的設(shè)置方法和獲取方法的定義。設(shè)置方法是包括在翻譯賦值文本之后的結(jié)果中的方法。獲取方法是包括在翻譯參考等式之后的結(jié)果中的方法。針對(duì)Vi和VS的方法分別具有以下簽名void setVI(Object value);void setVS(Object value);Object getVI()throws CobolException ;Object getVS()throws CobolException ;應(yīng)注意,作為對(duì)象(Object)類型的替代,還可以使用其它類型,包括用于存儲(chǔ) COBOL語(yǔ)言的值的用戶定義類、嵌入類型(如int類型和long類型)、以及嵌入類(如 Mring類型)。之后對(duì)以聲明翻譯單元104的編譯結(jié)果輸出的方法的內(nèi)容的細(xì)節(jié)進(jìn)行描述。(賦值翻譯單元)賦值翻譯單元105翻譯分配給重疊存儲(chǔ)區(qū)域的變量的賦值文本。因而,該翻譯執(zhí)行如下(1)首先,將COBOL語(yǔ)言的‘表示要賦給變量的值的等式’翻譯為JAVA(注冊(cè)商標(biāo))
語(yǔ)言程序。(2)接下來(lái),翻譯為JAVA(注冊(cè)商標(biāo))語(yǔ)言程序,其中給出通過(guò)執(zhí)行上述翻譯所獲得的值,作為調(diào)用設(shè)置方法的參數(shù),從而將該值賦給該變量??梢允褂糜糜诰幾g器/翻譯器的一般技術(shù)來(lái)翻譯等式,然而,假設(shè)將參考‘分配給重疊存儲(chǔ)區(qū)域的變量’的等式的翻譯留給之后描述的參考翻譯單元106。以下描述在運(yùn)行JAVA(注冊(cè)商標(biāo))語(yǔ)言程序時(shí)通過(guò)設(shè)置方法執(zhí)行何種處理。圖2是示出了由設(shè)置方法執(zhí)行的處理的控制流程的流程圖。以下參考圖2進(jìn)行描述。該處理以在通過(guò)給出要賦值的值作為參數(shù)來(lái)調(diào)用設(shè)置方法時(shí)開(kāi)始。該設(shè)置方法首先提取給出的參數(shù)給字節(jié)數(shù)組(步驟S201)。例如,當(dāng)參數(shù)是arg時(shí),為了提取該參數(shù)給字節(jié)數(shù)組bs,CPU調(diào)用方法如下bs = CobolExtractToByteSequence(arg);接下來(lái),CPU檢查從參數(shù)中提取的字節(jié)數(shù)組作為設(shè)置方法的數(shù)據(jù)變量值是否有效 (步驟 S202)。
11
在以上示例中,CPU檢查字節(jié)數(shù)組bs作為數(shù)據(jù)變量vs的值是否有效,也就是說(shuō), 字節(jié)數(shù)組針對(duì)COBOL的字符數(shù)組是否足夠有效。結(jié)果,如果確定字節(jié)數(shù)組有效(步驟S202 ;是),則CPU將參數(shù)賦值給相應(yīng)的數(shù)據(jù)變量(步驟S20;3),并將標(biāo)記變量設(shè)置為“真”(步驟S204)。例如,如果參數(shù)是arg,以及設(shè)置方法是setVS (),則執(zhí)行以下等式vs = arg ;fs = true ;另一方面,如果確定字節(jié)數(shù)組無(wú)效(步驟S202 ;否),則CPU將“假”賦值給標(biāo)記變量(步驟S205)。在以上示例中,例如,執(zhí)行賦值如下fs = false ;接下來(lái),對(duì)應(yīng)于設(shè)置方法,針對(duì)COBOL變量中分配給重疊存儲(chǔ)區(qū)域的所有變量執(zhí)行以下處理(步驟S206-S2i;3)。在該示例中,由于通過(guò)重疊COBOL變量YS來(lái)分配COBOL變量YI,對(duì)于COBOL變量YI執(zhí)行以下處理。首先,CPU提取此時(shí)記錄在數(shù)據(jù)變量中的值給字節(jié)數(shù)組的存儲(chǔ)圖像(步驟S207)。在本示例中,如以下等式,提取YI給字節(jié)數(shù)組cs cs = CobolExtractToByteSequence(yi);然后,CPU以記錄在從參數(shù)中提取的字節(jié)數(shù)組bs中的重疊區(qū)域中的字節(jié)值重寫(xiě)從數(shù)據(jù)變量中提取的字節(jié)數(shù)組cs中的重疊區(qū)域(步驟S208)。在本示例中,由于YS和YI具有相同大小,所提取的字節(jié)數(shù)組的大小也一樣,因而應(yīng)重寫(xiě)整個(gè)數(shù)據(jù)。應(yīng)注意,如果僅有部分存儲(chǔ)區(qū)域重疊,則僅從數(shù)據(jù)變量中提取的字節(jié)數(shù)組區(qū)域的一部分可以成為轉(zhuǎn)移目的地,或僅從參數(shù)中提取的字節(jié)數(shù)組區(qū)域的一部分可以成為轉(zhuǎn)移源。此外,如果明確在翻譯時(shí)重寫(xiě)整個(gè)數(shù)據(jù),則在步驟S207可以跳過(guò)提取數(shù)據(jù)變量中記錄的值。接下來(lái),CPU確定重寫(xiě)的字節(jié)數(shù)組作為表示原始數(shù)據(jù)變量的值的字節(jié)數(shù)組是否有效(步驟S209)。 如果無(wú)效(步驟S209 ;否),則CPU將“假”賦給標(biāo)記變量(步驟S212)。在本示例中,執(zhí)行以下等式fi = false ;另一方面,如果有效(步驟S209 ;是),則CPU生成由字節(jié)數(shù)組表示的值,將該值賦給原始數(shù)據(jù)變量(步驟S210),以及將“真”賦給標(biāo)記變量(步驟S211)。在本示例中,執(zhí)行例如以下的處理vi = CobolDeExtractFromByteSequence(cs);fi = true ;之后,CPU針對(duì)重疊存儲(chǔ)區(qū)域中的所有COBOL變量重復(fù)循環(huán)(步驟S213)。當(dāng)循環(huán)結(jié)束時(shí),CPU終止該設(shè)置方法。應(yīng)注意,盡管典型地要針對(duì)提取存儲(chǔ)在數(shù)據(jù)變量中的值給字節(jié)數(shù)組的
12CobolExtractToByteSequence ()或執(zhí)行逆處理的 CobolDeExtractFromByteSequence (), 添加表示數(shù)據(jù)變量類型的參數(shù)或根據(jù)每個(gè)數(shù)據(jù)變量類型調(diào)用不同的方法,但是為了易于理解,不在此描述其細(xì)節(jié)。以這種方式,通過(guò)將COBOL程序中的賦值文本翻譯為JAVA(注冊(cè)商標(biāo))程序中的賦值文本,可以準(zhǔn)備好文本以便由之后描述的等式參考。(參考翻譯單元)參考翻譯單元106翻譯‘參考分配給重疊存儲(chǔ)區(qū)域的變量的值的等式’和‘包括參考分配給重疊存儲(chǔ)區(qū)域的變量的值的等式的文本’。在典型編程語(yǔ)言的‘參考變量的值的等式’中,這種變量的標(biāo)識(shí)符用作“右手值”。參考翻譯單元106編譯這些COBOL變量以針對(duì)數(shù)據(jù)變量調(diào)用獲取方法。以下描述了在運(yùn)行JAVA(注冊(cè)商標(biāo))語(yǔ)言程序時(shí)由獲取方法執(zhí)行何種處理。圖3是示出了通過(guò)獲取方法執(zhí)行的處理的控制流程的流程圖。參照?qǐng)D3進(jìn)行以下描述。當(dāng)調(diào)用針對(duì)特定COBOL變量的獲取方法時(shí),CPU首先確定與COBOL變量相對(duì)應(yīng)的標(biāo)記變量的值是“真”還是“假”(步驟S301)。例如,對(duì)于參考COBOL變量YI的等式,標(biāo)記變量fi是要確定的對(duì)象。如果標(biāo)記變量的值為“真”(步驟S302 ;真),由于認(rèn)為相應(yīng)的數(shù)據(jù)變量的值有效, CPU通過(guò)將數(shù)據(jù)變量的值設(shè)置為等式的結(jié)果來(lái)終止該處理(步驟S303)。在以上示例中,這等同于下式return vi ;另一方面,如果標(biāo)記變量的值為“假”(步驟S302 ;假),則認(rèn)為相應(yīng)的數(shù)據(jù)變量的值無(wú)效。然后,CPU創(chuàng)建(拋出)符合COBOL語(yǔ)言中的操作的異常(步驟S304),并終止該處理。在以上的示例中,這等同于執(zhí)行下式throw(new CobolException);這里,CobolExc印tion用于模擬在運(yùn)行COBOL語(yǔ)言時(shí)創(chuàng)建的異常。可以使用 JAVA(注冊(cè)商標(biāo))語(yǔ)言中的try. . . catch. . . finally. . . syntax來(lái)捕獲異常。也就是說(shuō),將以COBOL語(yǔ)言描述的異常處理編譯為JAVA(注冊(cè)商標(biāo))語(yǔ)言的 try... catch. . . finally. . . syntax。應(yīng)注意,當(dāng)將COBOL語(yǔ)言程序翻譯為C語(yǔ)言或C++語(yǔ)言時(shí),可以使用與上述針對(duì) JAVA(注冊(cè)商標(biāo))語(yǔ)言的技術(shù)相類似的技術(shù),而不使用聯(lián)合。盡管由于C++語(yǔ)言具有異常處理特征,可以與JAVA (注冊(cè)商標(biāo))語(yǔ)言的情況相類似地執(zhí)行向C++語(yǔ)言的翻譯,但是C語(yǔ)言不具有異常處理特征。因而在C語(yǔ)言中,可以通過(guò)分別使用setjmpO函數(shù)代替try和IongjmpO函數(shù)代替throw,基于異常處理來(lái)實(shí)現(xiàn)全局退出。如果重新定義的字段(即,分配給重疊存儲(chǔ)區(qū)域的變量)是要向數(shù)據(jù)庫(kù)登記的記錄的一部分,則在COBOL語(yǔ)言的實(shí)施方式中,僅向數(shù)據(jù)庫(kù)登記先聲明的變量,以及從數(shù)據(jù)庫(kù)讀出先聲明的變量。在這種實(shí)施方式中,在翻譯了用于向數(shù)據(jù)庫(kù)登記的登記文本之后所產(chǎn)生的 JAVA (注冊(cè)商標(biāo))程序執(zhí)行以下處理
13
(a)如果與先聲明的COBOL變量相對(duì)應(yīng)的標(biāo)記變量為“真”,則向數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù)變量的值;以及(b)如果標(biāo)記變量為“假”,則將指示該值不存在的NIL值寫(xiě)入數(shù)據(jù)庫(kù)。同時(shí),在翻譯了用于從數(shù)據(jù)庫(kù)讀取的讀出文本之后所產(chǎn)生的JAVA(注冊(cè)商標(biāo))程序執(zhí)行以下處理(a)如果從數(shù)據(jù)庫(kù)中讀出的值為NIL值,則將標(biāo)記變量設(shè)置為“假”;(b)如果從數(shù)據(jù)庫(kù)中讀出的值不是NIL值,則將標(biāo)記變量設(shè)置為“真”,并將讀出值賦給數(shù)據(jù)變量。此外,在一次一個(gè)地向數(shù)據(jù)庫(kù)登記分配給重疊存儲(chǔ)區(qū)域的每個(gè)變量、以及一次一個(gè)地從數(shù)據(jù)庫(kù)讀出分配給重疊存儲(chǔ)區(qū)域的每個(gè)變量的另一實(shí)施例中,可以以針對(duì)每個(gè) COBOL變量重復(fù)以上處理的方式來(lái)執(zhí)行向JAVA(注冊(cè)商標(biāo))程序的翻譯。以這種方式,通過(guò)將以COBOL語(yǔ)言描述并使用數(shù)據(jù)庫(kù)的程序自動(dòng)轉(zhuǎn)換為執(zhí)行等同特征的JAVA(注冊(cè)商標(biāo))語(yǔ)言程序,該程序可以適于最新的計(jì)算機(jī)環(huán)境,并且可以利用過(guò)去的大量程序資源。應(yīng)注意,該申請(qǐng)要求基于日本專利申請(qǐng)No. 2009-075783的優(yōu)先權(quán),將日本專利申請(qǐng)No. 2009-075783的全部說(shuō)明書(shū)、權(quán)利要求書(shū)和附圖包括在此作為參考。工業(yè)可應(yīng)用性如上所述,根據(jù)本發(fā)明,可以提供翻譯設(shè)備、翻譯方法和存儲(chǔ)介質(zhì),適于將以第一編程語(yǔ)言描述的、能夠描述用于保持變量的重疊存儲(chǔ)區(qū)域的程序翻譯為以第二編程語(yǔ)言描述的、同時(shí)分解重疊變量存儲(chǔ)區(qū)域的程序。符號(hào)解釋
101翻譯設(shè)備
102詞匯分析單元
103語(yǔ)法分析單元
104聲明翻譯單元
105賦值翻譯單元
106參考翻譯單元
107登記翻譯單元
108讀出翻譯單元
109正常翻譯單元
110組合單元
1權(quán)利要求
1.一種翻譯設(shè)備,將以第一編程語(yǔ)言描述的未翻譯的程序翻譯為以第二編程語(yǔ)言描述的翻譯后的程序,所述翻譯設(shè)備包括聲明翻譯單元,用于將未翻譯的程序中的“用于保持第一未翻譯的變量的存儲(chǔ)區(qū)域和用于保持第二未翻譯的變量的存儲(chǔ)區(qū)域相重疊”的聲明翻譯為翻譯后的程序中的“在不相互重疊的存儲(chǔ)區(qū)域中保持第一翻譯后的變量和與所述第一翻譯后的變量相對(duì)應(yīng)的第一翻譯后的標(biāo)記以及第二翻譯后的變量和與所述第二翻譯后的變量相對(duì)應(yīng)的第二翻譯后的標(biāo)記”的聲明;賦值翻譯單元,用于將未翻譯的程序中的“向第一未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第一翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中, 以及寫(xiě)入第二翻譯后的標(biāo)記,無(wú)論記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效”的文本,以及將未翻譯的程序中的“向第二未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第二翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第一翻譯后的標(biāo)記,無(wú)論記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效”的文本;以及參考翻譯單元,用于將未翻譯的程序中的“參考第一未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第一翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁?,以及將未翻譯的程序中的“參考第二未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第二翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異常”的等式。
2.根據(jù)權(quán)利要求1所述的翻譯設(shè)備,還包括登記翻譯單元,用于將未翻譯的程序中的“向數(shù)據(jù)庫(kù)登記第一未翻譯的變量的值”的文本翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí),向數(shù)據(jù)庫(kù)登記第一翻譯后的變量的值;以及當(dāng)確定為無(wú)效時(shí),向數(shù)據(jù)庫(kù)登記NIL值”的文本, 以及將未翻譯的程序中的“向數(shù)據(jù)庫(kù)登記第二未翻譯的變量的值”的文本翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí),向數(shù)據(jù)庫(kù)登記第二翻譯后的變量的值;以及當(dāng)確定為無(wú)效時(shí),向數(shù)據(jù)庫(kù)登記NIL值”的文本;以及讀出翻譯單元,用于將未翻譯的程序中的“將從數(shù)據(jù)庫(kù)讀出的值賦值給第一未翻譯的變量”的文本翻譯為翻譯后的程序中的“從數(shù)據(jù)庫(kù)讀出值;當(dāng)讀出值是NIL值時(shí),在第一翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息是無(wú)效的;當(dāng)讀出值不是NIL值時(shí),在第一翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息是有效的;以及將讀出值寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中”的文本,以及將未翻譯的程序中的“將從數(shù)據(jù)庫(kù)讀出的值賦值給第二未翻譯的變量”的文本翻譯為翻譯后的程序中的“從數(shù)據(jù)庫(kù)讀出值;當(dāng)讀出值是NIL值時(shí),在第二翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息是無(wú)效的;當(dāng)讀出值部是NIL值時(shí),在第二翻譯后的標(biāo)記中寫(xiě)入記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息是有效的;以及將讀出值寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中”的文本。
3.根據(jù)權(quán)利要求2所述的翻譯設(shè)備,其中所述第一未翻譯的變量是分區(qū)二進(jìn)制編碼的十進(jìn)制,所述第二未翻譯的變量是與分區(qū)二進(jìn)制編碼的十進(jìn)制不同的整數(shù);所述第一翻譯后的變量是能夠表示包括第一未翻譯的變量的整數(shù)域的整數(shù);以及所述第二翻譯后的變量是能夠表示包括第二未翻譯的變量的整數(shù)域的整數(shù)。
4.根據(jù)權(quán)利要求2所述的翻譯設(shè)備,其中所述第一未翻譯的變量是分區(qū)二進(jìn)制編碼的十進(jìn)制;所述第二未翻譯的變量是字符數(shù)組;所述第一翻譯后的變量是能夠表示包括第一未翻譯的變量的整數(shù)域的整數(shù);以及所述第二翻譯后的變量是第二未翻譯的變量的字符數(shù)組。
5.一種通過(guò)用于將以第一編程語(yǔ)言描述的未翻譯的程序翻譯為以第二編程語(yǔ)言描述的翻譯后的程序的翻譯設(shè)備來(lái)執(zhí)行的翻譯方法,其中所述翻譯設(shè)備包括聲明翻譯單元、賦值翻譯單元、以及參考翻譯單元,所述翻譯方法包括聲明翻譯步驟,其中所述聲明翻譯單元將未翻譯的程序中的“用于保持第一未翻譯的變量的存儲(chǔ)區(qū)域和用于保持第二未翻譯的變量的存儲(chǔ)區(qū)域相重疊”的聲明翻譯為翻譯后的程序中的“在不相互重疊的存儲(chǔ)區(qū)域中保持第一翻譯后的變量和與所述第一翻譯后的變量相對(duì)應(yīng)的第一翻譯后的標(biāo)記以及第二翻譯后的變量和與所述第二翻譯后的變量相對(duì)應(yīng)的第二翻譯后的標(biāo)記”的聲明;賦值翻譯步驟,其中所述賦值翻譯單元將未翻譯的程序中的“向第一未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第一翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第二翻譯后的標(biāo)記,無(wú)論記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效”的文本,以及將未翻譯的程序中的“向第二未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第二翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第一翻譯后的標(biāo)記,無(wú)論記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效”的文本;以及參考翻譯步驟,其中所述參考翻譯單元將未翻譯的程序中的“參考第一未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第一翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁?,以及將未翻譯的程序中的“參考第二未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第二翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異常”的等式。
6. 一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),用于在計(jì)算機(jī)中記錄將以第一編程語(yǔ)言描述的未翻譯的程序翻譯為以第二編程語(yǔ)言描述的翻譯后的程序的程序,所述程序使計(jì)算機(jī)充當(dāng)聲明翻譯單元,用于將未翻譯的程序中的“用于保持第一未翻譯的變量的存儲(chǔ)區(qū)域和用于保持第二未翻譯的變量的存儲(chǔ)區(qū)域相重疊”的聲明翻譯為翻譯后的程序中的“在不相互重疊的存儲(chǔ)區(qū)域中保持第一翻譯后的變量和與所述第一翻譯后的變量相對(duì)應(yīng)的第一翻譯后的標(biāo)記以及第二翻譯后的變量和與所述第二翻譯后的變量相對(duì)應(yīng)的第二翻譯后的標(biāo)記”的聲明;賦值翻譯單元,用于將未翻譯的程序中的“向第一未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第一翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中, 以及寫(xiě)入第二翻譯后的標(biāo)記,無(wú)論記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效”的文本,以及將未翻譯的程序中的“向第二未翻譯的變量賦值”的文本翻譯為翻譯后的程序中的“向第二翻譯后的變量賦值,將所賦值中要記錄在重疊存儲(chǔ)區(qū)域中的信息寫(xiě)入用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中與所述重疊存儲(chǔ)區(qū)域相對(duì)應(yīng)的存儲(chǔ)區(qū)域中,以及寫(xiě)入第一翻譯后的標(biāo)記,無(wú)論記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效”的文本;以及參考翻譯單元,用于將未翻譯的程序中的“參考第一未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第一翻譯后的標(biāo)記,確定記錄在用于保持第一翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第一翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第一翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁剑约皩⑽捶g的程序中的“參考第二未翻譯的變量的值”的等式翻譯為翻譯后的程序中的“通過(guò)參考第二翻譯后的標(biāo)記,確定記錄在用于保持第二翻譯后的變量的存儲(chǔ)區(qū)域中的信息作為第二翻譯后的變量的值是否有效;當(dāng)確定為有效時(shí)參考第二翻譯后的變量的值,以及當(dāng)確定為無(wú)效時(shí)創(chuàng)建異?!钡牡仁?。
全文摘要
聲明翻譯單元(104)將第一語(yǔ)言的、重疊存儲(chǔ)區(qū)域中的變量的聲明編譯為第二語(yǔ)言的、獨(dú)立數(shù)據(jù)變量的聲明和相應(yīng)的對(duì)應(yīng)標(biāo)記變量;賦值翻譯單元(105)對(duì)第一語(yǔ)言的至區(qū)域中的變量的賦值進(jìn)行編譯,使得在第二語(yǔ)言中,假設(shè)執(zhí)行了至相應(yīng)重疊數(shù)據(jù)變量的賦值,檢查變量值是否有效,針對(duì)相應(yīng)變量,將結(jié)果保存在標(biāo)記變量中,以及僅對(duì)有效數(shù)據(jù)變量執(zhí)行賦值;以及參考翻譯單元(106),將第一語(yǔ)言的、重疊存儲(chǔ)區(qū)域中的變量的參考進(jìn)行編譯,使得在第二語(yǔ)言中,如果標(biāo)記變量有效,則返回?cái)?shù)據(jù)變量的值,如果無(wú)效,則產(chǎn)生異常。
文檔編號(hào)G06F9/45GK102365622SQ20108001381
公開(kāi)日2012年2月29日 申請(qǐng)日期2010年3月26日 優(yōu)先權(quán)日2009年3月26日
發(fā)明者江口淳 申請(qǐng)人:日本電氣株式會(huì)社