CN102365622B - 翻译设备、翻译方法和程序存储介质 - Google Patents
翻译设备、翻译方法和程序存储介质 Download PDFInfo
- Publication number
- CN102365622B CN102365622B CN201080013814.9A CN201080013814A CN102365622B CN 102365622 B CN102365622 B CN 102365622B CN 201080013814 A CN201080013814 A CN 201080013814A CN 102365622 B CN102365622 B CN 102365622B
- Authority
- CN
- China
- Prior art keywords
- translation
- variable
- storage area
- untranslated
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
声明翻译单元(104)将第一语言的、重叠存储区域中的变量的声明编译为第二语言的、独立数据变量的声明和相应的对应标记变量;赋值翻译单元(105)对第一语言的至区域中的变量的赋值进行编译,使得在第二语言中,假设执行了至相应重叠数据变量的赋值,检查变量值是否有效,针对相应变量,将结果保存在标记变量中,以及仅对有效数据变量执行赋值;以及参考翻译单元(106),将第一语言的、重叠存储区域中的变量的参考进行编译,使得在第二语言中,如果标记变量有效,则返回数据变量的值,如果无效,则产生异常。
Description
技术领域
本发明涉及翻译设备、翻译方法和存储介质,适于将以第一编程语言描述的、能够描述用于保持变量的重叠存储区域的程序翻译为以第二编程语言描述的、同时分解重叠变量存储区域的程序。
背景技术
在工业界,使用各种类型的编程语言。随着这些年使用许多程序,在某种程度上确保了这些程序的操作稳定性。
在这些程序中,存在很多以存储区域严重受限的时代创建的编程语言描述的程序。为了节约存储区域并转换一些变量类型,这些编程语言中的许多都允许特定变量和另一变量重叠地存储在相同存储区域的描述。
例如,在C语言中,声明诸如以下联合(union)的描述被用于将表示公历年的整数和以字符串表示公历年的字符数组重叠地分配给由RAM(随机存取存储器)实现的存储器:
union{int i;char s[5];}y;
变量y用于存储年。期望该描述将整数变量y.i和字符数组变量y.s分配给重叠区域,并且将公历年以整数值存储在y.i中并以字符串值存储在y.s中。
如果针对16比特CPU(中央处理单元)创建该程序,则通常以16比特表示整数int i,即,2个字节,而以5个字节表示字符数组char s[5]。在这种情况下,通过与字符数组变量y.s的头两个字节y.s[0]、y.s[1]重叠,将整数变量y.i分配给存储区域。
假设针对字节序列采用小字节序。为了将整数值赋值为公历年,执行以下等式:
y.i=2009;
这里,由于以下等式为真:
2009=217+7×256,
通过执行整数值的上述赋值,y.s[0]变为217,y.s[1]成为7。
同时,C语言针对字符串采用ASCIIZ格式,该格式使用值0作为终结符。为此,特别地当把整数赋值给y.i之前通过如下的等式写入长度为0或1的ASCIIZ字符串时,
strcpy(y.s,“”);
或
strcpy(y.s,“a”);
终结符被对y.i的赋值所重写。
结果,y.s成为非法的ASCIIZ字符串。
此外,7是ASCII字符中BEL的字符码,217超出ASCII字符的范围,它是一字节的片假名‘ru’的码,而不是程序员意图所指的‘表示公历年的字符串’。
此外,尽管如果执行以下等式:
strcpy(y.s,“2009”);
字符数组y.s是有效的ASCIIZ字符串并存储程序员所期望的值,但是由于‘2’指示字符码50,‘0’指示字符码48,整数y.i具有值
50+48×256=12338,
这不是适于公历年的值。
用于表示整数的其它方法包括:利用比特数组本身并将整数表示为1的补数或2的补数的方法;使用压缩二进制编码的十进制等式的方法,其中以半个字节(nibble)存储1个十进制数值(0-9);以及使用分区二进制编码的十进制等式的方法,该等式使用相应的字符码来表示1个十进制数值,并可以被解释为整数和字符数组。
例如,在COBOL语言中,不同于C语言,独立于CPU的规范和特征等,通过以1个字节存储一个数位,针对四位分区二进制编码的十进制保留4字节区域。
此外,REDEFINES子句用于将针对分区二进制编码的十进制的存储区域和针对字符串变量的存储区域重叠。
因此,为了以利用重新定义字段的声明的COBOL语言来描述以上的C语言程序,使用以下描述:
01 Y
02 YI PIC Z(4)
03 YY REDEFINES YI
04 YS PIC X(4)
在添加了这种声明的COBOL语言程序中,如果执行以下等式:
MOVE 2009TO YI,
则分配字符‘2’的字符码作为重叠存储区域中的字符数组变量YS的第一字符;分配字符‘0’的字符码作为第二字符;分配字符‘0’的字符码作为第三字符;以及分配字符‘9’的字符码作为第四字符。
结果,在这种情况下,字符数组变量YS和整数变量YI具有有效值。
另一方面,如果例如通过MOVE‘abcd’TO YS对长度为4的字符数组‘abcd’赋值,则该字符数组无法被解释为整数。因而,整数变量YI的值变为无效,参照YI的值,出现异常。
此外,将这种变量值存储至数据库或从数据库中获取该值的技术已经得以使用。
在特定的COBOL处理系统中,在如下实现中运行多个程序:当将变量存储至数据库时,仅写入在重新定义的字段的开始所声明的变量;以及在从数据库中获取变量时,仅读出在重新定义的字段的开始所声明的变量;以及在变量的值无效时,存储至数据库或从数据库中获取的值是NIL值。
同时,在近年来,随着存储器价格的降低以及计算机性能的提高,以不具有将多个变量分配至重叠的存储区域的特征的编程语言描述各种处理。例如,在专利文献1中描述的技术公开了一种使用不具有如上所述的特征的JAVA(注册商标)语言对商业过程计算机化的编译技术。
现有技术文献
专利文献
专利文献1:未申日本专利申请KOKAI公开No.2006-031173
发明内容
要解决的技术问题
因此,为了利用过去的资源,如以COBOL语言描述的程序,存在用于将该程序翻译为JAVA(注册商标)语言的方法。然而,如上所述,在JAVA(注册商标)语言中,不存在与联合或重新定义的字段等同的这种特征。因而,需要一种新的技术,对这些联合和重新定义的字段进行翻译。
除此之外,为了减少对CPU的规范等的依赖性,需要一种甚至在翻译为C语言或C++语言时也不使用联合的翻译技术。
本发明意在解决上述问题。本发明旨在提供翻译设备、翻译方法和存储介质,适于将以第一编程语言描述的、能够描述用于保持变量的重叠存储区域的程序翻译为以第二编程语言描述的、同时分解重叠变量存储区域的程序。
解决问题的手段
为了实现上述目的,将根据本发明的原理来公开以下发明。
根据本发明的第一方面的翻译设备将以第一编程语言描述的未翻译的程序翻译为以第二编程语言描述的翻译后的程序,所述翻译设备包括:声明翻译单元、赋值翻译单元、以及参考翻译单元,所述翻译设备被配置如下:
也就是说,所述声明翻译单元将未翻译的程序中的“用于保持第一未翻译的变量的存储区域和用于保持第二未翻译的变量的存储区域相重叠”的声明翻译为翻译后的程序中的“在不相互重叠的存储区域中保持第一翻译后的变量和与所述第一翻译后的变量相对应的第一翻译后的标记、以及第二翻译后的变量和与所述第二翻译后的变量相对应的第二翻译后的标记”的声明。
同时,所述赋值翻译单元将未翻译的程序中的“向第一未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第一翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第二翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第二翻译后的标记,无论记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效”的文本,以及将未翻译的程序中的“向第二未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第二翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第一翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第一翻译后的标记,无论记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效”的文本。
此外,所述参考翻译单元将未翻译的程序中的“参考第一未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时参考第一翻译后的变量的值,以及当确定为无效时创建异常”的等式,以及将未翻译的程序中的“参考第二未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时参考第二翻译后的变量的值,以及当确定为无效时创建异常”的等式。
此外,本发明的翻译设备还包括:登记翻译单元和读出翻译单元,可以被配置如下:
也就是说,所述登记翻译单元将未翻译的程序中的“向数据库登记第一未翻译的变量的值”的文本翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时,向数据库登记第一翻译后的变量的值;以及当确定为无效时,向数据库登记NIL值”的文本,以及将未翻译的程序中的“向数据库登记第二未翻译的变量的值”的文本翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时,向数据库登记第二翻译后的变量的值;以及当确定为无效时,向数据库登记NIL值”的文本。
同时,所述读出翻译单元将未翻译的程序中的“将从数据库读出的值赋值给第一未翻译的变量”的文本翻译为翻译后的程序中的“从数据库读出值;当读出值是NIL值时,在第一翻译后的标记中写入记录在用于保持第一翻译后的变量的存储区域中的信息是无效的;当读出值不是NIL值时,在第一翻译后的标记中写入记录在用于保持第一翻译后的变量的存储区域中的信息是有效的;以及将读出值写入用于保持第一翻译后的变量的存储区域中”的文本,以及将未翻译的程序中的“将从数据库读出的值赋值给第二未翻译的变量”的文本翻译为翻译后的程序中的“从数据库读出值;当读出值是NIL值时,在第二翻译后的标记中写入记录在用于保持第二翻译后的变量的存储区域中的信息是无效的;当读出值不是NIL值时,在第二翻译后的标记中写入记录在用于保持第二翻译后的变量的存储区域中的信息是有效的;以及将读出值写入用于保持第二翻译后的变量的存储区域中”的文本。
在本发明的翻译设备中,第一未翻译的变量可以是分区二进制编码的十进制,第二未翻译的变量可以是与分区二进制编码的十进制不同的整数;第一翻译后的变量可以是能够表示可包括第一未翻译的变量的整数域的整数;以及第二翻译后的变量可以是能够表示可包括第二未翻译的变量的整数域的整数。
此外,在本发明的翻译设备中,第一未翻译的变量可以是分区二进制编码的十进制;第二未翻译的变量可以是字符数组;第一翻译后的变量可以是能够表示可包括第一未翻译的变量的整数域的整数;以及第二翻译后的变量可以是第二未翻译的变量的字符数组。
通过用于将以第一编程语言描述的未翻译的程序翻译为以第二编程语言描述的翻译后的程序的翻译设备来执行根据本发明的另一方面的翻译方法。所述翻译设备包括:声明翻译单元、赋值翻译单元、以及参考翻译单元,所述翻译方法包括:声明翻译步骤、赋值翻译步骤、以及参考翻译步骤,所述翻译方法被配置如下:
也就是说,在所述声明翻译步骤中,所述声明翻译单元将未翻译的程序中的“用于保持第一未翻译的变量的存储区域和用于保持第二未翻译的变量的存储区域相重叠”的声明翻译为翻译后的程序中的“在不相互重叠的存储区域中保持第一翻译后的变量和与所述第一翻译后的变量相对应的第一翻译后的标记、以及第二翻译后的变量和与所述第二翻译后的变量相对应的第二翻译后的标记”的声明。
同时,在所述赋值翻译步骤中,所述赋值翻译单元将未翻译的程序中的“向第一未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第一翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第二翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第二翻译后的标记,无论记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效”的文本,以及将未翻译的程序中的“向第二未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第二翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第一翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第一翻译后的标记,无论记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效”的文本。
此外,在所述参考翻译步骤中,所述参考翻译单元将未翻译的程序中的“参考第一未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时参考第一翻译后的变量的值,以及当确定为无效时创建异常”的等式,以及将未翻译的程序中的“参考第二未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时参考第二翻译后的变量的值,以及当确定为无效时创建异常”的等式。
根据本发明的另一方面的用于记录程序的计算机可读存储介质被配置为运行所述程序,以使计算机充当上述翻译设备。
该程序可以存储在计算机可读存储介质中,如压缩盘、软盘、硬盘、磁光盘、数字通用盘、磁带和半导体存储器。
可以通过计算机通信网络,与运行程序的计算机相分离地传递/出售上述程序。此外,可以与计算机相分离地传递/出售上述存储介质。
发明效果
根据本发明,可以提供翻译设备、翻译方法和存储介质,适于将以第一编程语言描述的、能够描述用于保持变量的重叠存储区域的程序翻译为以第二编程语言描述的、同时分解重叠变量存储区域的程序。
附图说明
图1是示出了根据本发明的实施例的翻译设备的整体配置的框架格式的视图。
图2是示出了由设置方法执行的处理的控制流程的流程图。
图3是示出了由获取方法执行的处理的控制流程的流程图。
具体实施方式
以下将描述本发明的实施例。尽管以下实施例为了易于理解,描述了将COBOL语言(第一编程语言)程序(未翻译的程序)编译为JAVA(注册商标)语言(第二编程语言)程序(翻译后的程序),但是本申请的发明范围并不限于此。
因而,在本领域技术人员可以通过将这些元件中的每个或全部替换为等同物而采用其它实施例时,这些实施例也包括在本发明的范围内。
例如,本发明可以类似地应用于将C语言或C++语言用作描述翻译后的程序的编程语言(该翻译后的程序中不使用联合)的情况。
实施例1
图1是示出了根据本发明实施例的翻译设备的整体配置的框架格式的图示。以下将参照图1进行描述。
通过在计算机中运行编译器程序来实现图1中示出的翻译设备101。计算机从存储介质(如,硬盘)中将编译器程序读到RAM上,CPU与计算机中的其它功能组件一起工作来运行编译器程序。
例如,未翻译的程序和翻译后的程序可以均记录在存储介质(如,硬盘)中。此外,RAM用于记录编译过程的临时结果及其它目的。
如图1所示,当将未翻译的程序给予翻译设备101时,词汇分析单元102执行词汇分析,并将未翻译的程序转换为包括标识符、运算符和保留字的字符数组。
接下来,语法分析单元103接受该字符数组,执行语法分析,并获取包括未翻译的程序的文本。
这些文本包括以下种类:
(1)导致变量存储区域的重叠的声明文本
(2)向重叠存储区域中的变量赋值的赋值文本。以这种方式使用变量对应于使用该变量作为C++语言中的左手值(L-值)。
(3)包括用于参考重叠存储区域中的变量的值的等式的参考文本。以这种方式使用变量对应于使用该变量作为C++语言中的右手值(R-值)。
(4)用于向数据库登记重叠存储区域中的变量的值的登记文本。
(5)用于从数据库读出重叠存储区域中的变量的值的读出文本。
(6)不使用重叠存储区域中的变量的正常文本。
应注意,在以上赋值文本中,所赋值可以包括被参考的等式。
分别通过声明翻译单元104、赋值翻译单元105、登记翻译单元107、读出翻译单元106和正常翻译单元109来编译这些文本。
此外,参考翻译单元106编译参考文本中的“用于参考重叠存储区域中的变量的值的等式”。因而,如果将“用于参考重叠存储区域中的变量的值的等式”用作要在赋值文本中进行赋值的值,则赋值翻译单元105令参考翻译单元106编译该等式并使用结果。
通过组合单元110组合翻译后的文本以形成翻译后的程序。
词汇分析单元102、语法分析单元103、正常翻译单元109和组合单元110中的处理细节可以应用用于各种编译器和翻译器的公知技术。以下描述了声明翻译单元104、赋值翻译单元105、参考翻译单元106、登记翻译单元107和读出翻译单元108的特征的进一步的细节。
(声明翻译单元)
声明翻译单元104将COBOL语言的、分配给重叠存储区域的变量的声明编译为JAVA(注册商标)的声明。
例如,在以上示例中,将由分区二进制编码的十进制YI和字符数组变量YS表示整数变量的声明作为重新定义的字段重叠地分配给相同的存储区域。为了易于理解,以下描述用于编译这些变量的方法的示例。
声明翻译单元104将重叠存储区域中的这样的变量编译为例如以下所述的声明:
(a)用于存储每个COBOL变量的JAVA(注册商标)变量的声明。例如,假设vi和vs被声明为用于记录存储在COBOL变量yi和ys中的值的JAVA(注册商标)变量。以下,这些变量被称为数据变量。vi和vs的类型需要精确到足以记录可以在YI和YS中存储的信息。
(b)在访问每个COBOL变量时显示该变量是否有效的JAVA(注册商标)变量的声明。例如,假设fi和fs是记录存储在COBOL变量yi和ys中的值的JAVA(注册商标)变量。以下,将这些变量称为标记变量。尽管典型地,fi和fs的类型是记录真或假值的布尔类型,但是也可以使用诸如比特数组或比特字段的技术。fi和fs的缺省值典型被设置为“假”。
(c)针对JAVA(注册商标)变量的设置方法和获取方法的定义。设置方法是包括在翻译赋值文本之后的结果中的方法。获取方法是包括在翻译参考等式之后的结果中的方法。针对vi和vs的方法分别具有以下签名:
void setVI(Object value);
void setVS(Object value);
Object getVI()throws CobolException;
Object getVS()throws CobolException;
应注意,作为对象(Object)类型的替代,还可以使用其它类型,包括用于存储COBOL语言的值的用户定义类、嵌入类型(如int类型和long类型)、以及嵌入类(如String类型)。之后对以声明翻译单元104的编译结果输出的方法的内容的细节进行描述。
(赋值翻译单元)
赋值翻译单元105翻译分配给重叠存储区域的变量的赋值文本。因而,该翻译执行如下:
(1)首先,将COBOL语言的‘表示要赋给变量的值的等式’翻译为JAVA(注册商标)语言程序。
(2)接下来,翻译为JAVA(注册商标)语言程序,其中给出通过执行上述翻译所获得的值,作为调用设置方法的参数,从而将该值赋给该变量。
可以使用用于编译器/翻译器的一般技术来翻译等式,然而,假设将参考‘分配给重叠存储区域的变量’的等式的翻译留给之后描述的参考翻译单元106。
以下描述在运行JAVA(注册商标)语言程序时通过设置方法执行何种处理。
图2是示出了由设置方法执行的处理的控制流程的流程图。以下参考图2进行描述。
该处理以在通过给出要赋值的值作为参数来调用设置方法时开始。该设置方法首先提取给出的参数给字节数组(步骤S201)。
例如,当参数是arg时,为了提取该参数给字节数组bs,CPU调用方法如下:
bs=CobolExtractToByteSequence(arg);
接下来,CPU检查从参数中提取的字节数组作为设置方法的数据变量值是否有效(步骤S202)。
在以上示例中,CPU检查字节数组bs作为数据变量vs的值是否有效,也就是说,字节数组针对COBOL的字符数组是否足够有效。
结果,如果确定字节数组有效(步骤S202;是),则CPU将参数赋值给相应的数据变量(步骤S203),并将标记变量设置为“真”(步骤S204)。例如,如果参数是arg,以及设置方法是setVS(),则执行以下等式:
vs=arg;
fs=true;
另一方面,如果确定字节数组无效(步骤S202;否),则CPU将“假”赋值给标记变量(步骤S205)。
在以上示例中,例如,执行赋值如下:
fs=false;
接下来,对应于设置方法,针对COBOL变量中分配给重叠存储区域的所有变量执行以下处理(步骤S206-S213)。在该示例中,由于通过重叠COBOL变量YS来分配COBOL变量YI,对于COBOL变量YI执行以下处理。
首先,CPU提取此时记录在数据变量中的值给字节数组的存储图像(步骤S207)。
在本示例中,如以下等式,提取YI给字节数组cs:
cs=CobolExtractToByteSequence(yi);
然后,CPU以记录在从参数中提取的字节数组bs中的重叠区域中的字节值重写从数据变量中提取的字节数组cs中的重叠区域(步骤S208)。
在本示例中,由于YS和YI具有相同大小,所提取的字节数组的大小也一样,因而应重写整个数据。
应注意,如果仅有部分存储区域重叠,则仅从数据变量中提取的字节数组区域的一部分可以成为转移目的地,或仅从参数中提取的字节数组区域的一部分可以成为转移源。
此外,如果明确在翻译时重写整个数据,则在步骤S207可以跳过提取数据变量中记录的值。
接下来,CPU确定重写的字节数组作为表示原始数据变量的值的字节数组是否有效(步骤S209)。
如果无效(步骤S209;否),则CPU将“假”赋给标记变量(步骤S212)。在本示例中,执行以下等式:
fi=false;
另一方面,如果有效(步骤S209;是),则CPU生成由字节数组表示的值,将该值赋给原始数据变量(步骤S210),以及将“真”赋给标记变量(步骤S211)。在本示例中,执行例如以下的处理:
vi=CobolDeExtractFromByteSequence(cs);
fi=true;
之后,CPU针对重叠存储区域中的所有COBOL变量重复循环(步骤S213)。当循环结束时,CPU终止该设置方法。
应注意,尽管典型地要针对提取存储在数据变量中的值给字节数组的CobolExtractToByteSequence()或执行逆处理的CobolDeExtractFromByteSequence(),添加表示数据变量类型的参数或根据每个数据变量类型调用不同的方法,但是为了易于理解,不在此描述其细节。
以这种方式,通过将COBOL程序中的赋值文本翻译为JAVA(注册商标)程序中的赋值文本,可以准备好文本以便由之后描述的等式参考。
(参考翻译单元)
参考翻译单元106翻译‘参考分配给重叠存储区域的变量的值的等式’和‘包括参考分配给重叠存储区域的变量的值的等式的文本’。
在典型编程语言的‘参考变量的值的等式’中,这种变量的标识符用作“右手值”。
参考翻译单元106编译这些COBOL变量以针对数据变量调用获取方法。
以下描述了在运行JAVA(注册商标)语言程序时由获取方法执行何种处理。
图3是示出了通过获取方法执行的处理的控制流程的流程图。参照图3进行以下描述。
当调用针对特定COBOL变量的获取方法时,CPU首先确定与COBOL变量相对应的标记变量的值是“真”还是“假”(步骤S301)。
例如,对于参考COBOL变量YI的等式,标记变量fi是要确定的对象。
如果标记变量的值为“真”(步骤S302;真),由于认为相应的数据变量的值有效,CPU通过将数据变量的值设置为等式的结果来终止该处理(步骤S303)。在以上示例中,这等同于下式:
return vi;
另一方面,如果标记变量的值为“假”(步骤S302;假),则认为相应的数据变量的值无效。然后,CPU创建(抛出)符合COBOL语言中的操作的异常(步骤S304),并终止该处理。在以上的示例中,这等同于执行下式:
throw(new CobolException);
这里,CobolException用于模拟在运行COBOL语言时创建的异常。可以使用JAVA(注册商标)语言中的try...catch...finally...syntax来捕获异常。
也就是说,将以COBOL语言描述的异常处理编译为JAVA(注册商标)语言的try...catch...finally...syntax。
应注意,当将COBOL语言程序翻译为C语言或C++语言时,可以使用与上述针对JAVA(注册商标)语言的技术相类似的技术,而不使用联合。尽管由于C++语言具有异常处理特征,可以与JAVA(注册商标)语言的情况相类似地执行向C++语言的翻译,但是C语言不具有异常处理特征。
因而在C语言中,可以通过分别使用setjmp()函数代替try和longjmp()函数代替throw,基于异常处理来实现全局退出。
如果重新定义的字段(即,分配给重叠存储区域的变量)是要向数据库登记的记录的一部分,则在COBOL语言的实施方式中,仅向数据库登记先声明的变量,以及从数据库读出先声明的变量。
在这种实施方式中,在翻译了用于向数据库登记的登记文本之后所产生的JAVA(注册商标)程序执行以下处理:
(a)如果与先声明的COBOL变量相对应的标记变量为“真”,则向数据库写入数据变量的值;以及
(b)如果标记变量为“假”,则将指示该值不存在的NIL值写入数据库。
同时,在翻译了用于从数据库读取的读出文本之后所产生的JAVA(注册商标)程序执行以下处理:
(a)如果从数据库中读出的值为NIL值,则将标记变量设置为“假”;
(b)如果从数据库中读出的值不是NIL值,则将标记变量设置为“真”,并将读出值赋给数据变量。
此外,在一次一个地向数据库登记分配给重叠存储区域的每个变量、以及一次一个地从数据库读出分配给重叠存储区域的每个变量的另一实施例中,可以以针对每个COBOL变量重复以上处理的方式来执行向JAVA(注册商标)程序的翻译。
以这种方式,通过将以COBOL语言描述并使用数据库的程序自动转换为执行等同特征的JAVA(注册商标)语言程序,该程序可以适于最新的计算机环境,并且可以利用过去的大量程序资源。
应注意,该申请要求基于日本专利申请No.2009-075783的优先权,将日本专利申请No.2009-075783的全部说明书、权利要求书和附图包括在此作为参考。
工业可应用性
如上所述,根据本发明,可以提供翻译设备、翻译方法和存储介质,适于将以第一编程语言描述的、能够描述用于保持变量的重叠存储区域的程序翻译为以第二编程语言描述的、同时分解重叠变量存储区域的程序。
符号解释
101 翻译设备
102 词汇分析单元
103 语法分析单元
104 声明翻译单元
105 赋值翻译单元
106 参考翻译单元
107 登记翻译单元
108 读出翻译单元
109 正常翻译单元
110 组合单元
Claims (5)
1.一种翻译设备,将以第一编程语言描述的未翻译的程序翻译为以第二编程语言描述的翻译后的程序,所述翻译设备包括:
声明翻译单元,用于将未翻译的程序中的“用于保持第一未翻译的变量的存储区域和用于保持第二未翻译的变量的存储区域相重叠”的声明翻译为翻译后的程序中的“在不相互重叠的存储区域中保持第一翻译后的变量和与所述第一翻译后的变量相对应的第一翻译后的标记以及第二翻译后的变量和与所述第二翻译后的变量相对应的第二翻译后的标记”的声明;
赋值翻译单元,用于将未翻译的程序中的“向第一未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第一翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第二翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第二翻译后的标记,无论记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效”的文本,以及将未翻译的程序中的“向第二未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第二翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第一翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第一翻译后的标记,无论记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效”的文本;以及
参考翻译单元,用于将未翻译的程序中的“参考第一未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时参考第一翻译后的变量的值,以及当确定为无效时创建异常”的等式,以及将未翻译的程序中的“参考第二未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时参考第二翻译后的变量的值,以及当确定为无效时创建异常”的等式。
2.根据权利要求1所述的翻译设备,还包括:
登记翻译单元,用于将未翻译的程序中的“向数据库登记第一未翻译的变量的值”的文本翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时,向数据库登记第一翻译后的变量的值;以及当确定为无效时,向数据库登记NIL值”的文本,以及将未翻译的程序中的“向数据库登记第二未翻译的变量的值”的文本翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时,向数据库登记第二翻译后的变量的值;以及当确定为无效时,向数据库登记NIL值”的文本;以及
读出翻译单元,用于将未翻译的程序中的“将从数据库读出的值赋值给第一未翻译的变量”的文本翻译为翻译后的程序中的“从数据库读出值;当读出值是NIL值时,在第一翻译后的标记中写入记录在用于保持第一翻译后的变量的存储区域中的信息是无效的;当读出值不是NIL值时,在第一翻译后的标记中写入记录在用于保持第一翻译后的变量的存储区域中的信息是有效的;以及将读出值写入用于保持第一翻译后的变量的存储区域中”的文本,以及将未翻译的程序中的“将从数据库读出的值赋值给第二未翻译的变量”的文本翻译为翻译后的程序中的“从数据库读出值;当读出值是NIL值时,在第二翻译后的标记中写入记录在用于保持第二翻译后的变量的存储区域中的信息是无效的;当读出值部是NIL值时,在第二翻译后的标记中写入记录在用于保持第二翻译后的变量的存储区域中的信息是有效的;以及将读出值写入用于保持第二翻译后的变量的存储区域中”的文本。
3.根据权利要求2所述的翻译设备,其中
所述第一未翻译的变量是分区二进制编码的十进制,
所述第二未翻译的变量是与分区二进制编码的十进制不同的整数;
所述第一翻译后的变量是能够表示包括第一未翻译的变量的整数域的整数;以及
所述第二翻译后的变量是能够表示包括第二未翻译的变量的整数域的整数。
4.根据权利要求2所述的翻译设备,其中
所述第一未翻译的变量是分区二进制编码的十进制;
所述第二未翻译的变量是字符数组;
所述第一翻译后的变量是能够表示包括第一未翻译的变量的整数域的整数;以及
所述第二翻译后的变量是第二未翻译的变量的字符数组。
5.一种通过用于将以第一编程语言描述的未翻译的程序翻译为以第二编程语言描述的翻译后的程序的翻译设备来执行的翻译方法,其中所述翻译设备包括:声明翻译单元、赋值翻译单元、以及参考翻译单元,所述翻译方法包括:
声明翻译步骤,其中所述声明翻译单元将未翻译的程序中的“用于保持第一未翻译的变量的存储区域和用于保持第二未翻译的变量的存储区域相重叠”的声明翻译为翻译后的程序中的“在不相互重叠的存储区域中保持第一翻译后的变量和与所述第一翻译后的变量相对应的第一翻译后的标记以及第二翻译后的变量和与所述第二翻译后的变量相对应的第二翻译后的标记”的声明;
赋值翻译步骤,其中所述赋值翻译单元将未翻译的程序中的“向第一未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第一翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第二翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第二翻译后的标记,无论记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效”的文本,以及将未翻译的程序中的“向第二未翻译的变量赋值”的文本翻译为翻译后的程序中的“向第二翻译后的变量赋值,将所赋值中要记录在重叠存储区域中的信息写入用于保持第一翻译后的变量的存储区域中与所述重叠存储区域相对应的存储区域中,以及写入第一翻译后的标记,无论记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效”的文本;以及
参考翻译步骤,其中所述参考翻译单元将未翻译的程序中的“参考第一未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第一翻译后的标记,确定记录在用于保持第一翻译后的变量的存储区域中的信息作为第一翻译后的变量的值是否有效;当确定为有效时参考第一翻译后的变量的值,以及当确定为无效时创建异常”的等式,以及将未翻译的程序中的“参考第二未翻译的变量的值”的等式翻译为翻译后的程序中的“通过参考第二翻译后的标记,确定记录在用于保持第二翻译后的变量的存储区域中的信息作为第二翻译后的变量的值是否有效;当确定为有效时参考第二翻译后的变量的值,以及当确定为无效时创建异常”的等式。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009075783A JP5278088B2 (ja) | 2009-03-26 | 2009-03-26 | プログラムの飜訳装置、飜訳方法、ならびに、プログラム |
JP2009-075783 | 2009-03-26 | ||
PCT/JP2010/055387 WO2010110430A1 (ja) | 2009-03-26 | 2010-03-26 | プログラムの飜訳装置、飜訳方法、ならびに、記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102365622A CN102365622A (zh) | 2012-02-29 |
CN102365622B true CN102365622B (zh) | 2014-04-16 |
Family
ID=42781120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080013814.9A Active CN102365622B (zh) | 2009-03-26 | 2010-03-26 | 翻译设备、翻译方法和程序存储介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8527968B2 (zh) |
JP (1) | JP5278088B2 (zh) |
CN (1) | CN102365622B (zh) |
WO (1) | WO2010110430A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5278088B2 (ja) | 2009-03-26 | 2013-09-04 | 日本電気株式会社 | プログラムの飜訳装置、飜訳方法、ならびに、プログラム |
US10846197B1 (en) * | 2018-12-13 | 2020-11-24 | Facebook, Inc. | Systems and methods for debugging mixed-language applications |
CN112114817B (zh) * | 2020-09-28 | 2023-09-19 | 中国银行股份有限公司 | 基于cobol语言的数据字典字段信息获取方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101253476A (zh) * | 2005-08-10 | 2008-08-27 | 微软公司 | 句法程序语言翻译 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001005674A (ja) * | 1999-06-21 | 2001-01-12 | Pfu Ltd | データ受渡装置および記録媒体 |
JP2006031173A (ja) | 2004-07-13 | 2006-02-02 | Nec Corp | コンパイル装置,方法およびそのプログラム |
US20060031820A1 (en) * | 2004-08-09 | 2006-02-09 | Aizhong Li | Method for program transformation and apparatus for COBOL to Java program transformation |
US7386840B1 (en) * | 2004-09-09 | 2008-06-10 | Lockheed Martin Corporation | Method, apparatus, and program for source code translation from COBOL to object-oriented code |
JP5278088B2 (ja) | 2009-03-26 | 2013-09-04 | 日本電気株式会社 | プログラムの飜訳装置、飜訳方法、ならびに、プログラム |
US9182962B2 (en) * | 2010-12-09 | 2015-11-10 | Todd Bradley KNEISEL | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language |
-
2009
- 2009-03-26 JP JP2009075783A patent/JP5278088B2/ja active Active
-
2010
- 2010-03-26 CN CN201080013814.9A patent/CN102365622B/zh active Active
- 2010-03-26 US US13/259,914 patent/US8527968B2/en not_active Expired - Fee Related
- 2010-03-26 WO PCT/JP2010/055387 patent/WO2010110430A1/ja active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101253476A (zh) * | 2005-08-10 | 2008-08-27 | 微软公司 | 句法程序语言翻译 |
Also Published As
Publication number | Publication date |
---|---|
US20120017202A1 (en) | 2012-01-19 |
CN102365622A (zh) | 2012-02-29 |
US8527968B2 (en) | 2013-09-03 |
JP5278088B2 (ja) | 2013-09-04 |
JP2010231312A (ja) | 2010-10-14 |
WO2010110430A1 (ja) | 2010-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6195792B1 (en) | Software upgrades by conversion automation | |
US20080005728A1 (en) | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment | |
CA2204118A1 (en) | Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another | |
WO1996013784A9 (en) | Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another | |
JP4041248B2 (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
US20080005727A1 (en) | Methods, systems, and computer program products for enabling cross language access to an addressable entity | |
JPH06501579A (ja) | プログラミング演算の効果と従属性とを表現する方法及び装置 | |
US5805893A (en) | Assembly language program converter | |
CN102365622B (zh) | 翻译设备、翻译方法和程序存储介质 | |
US7921414B2 (en) | Method and system for compiling a source code | |
JP6982920B1 (ja) | ソースコード変換装置、及びプログラム | |
Fritzson et al. | Metamodelica–a symbolic-numeric modelica language and comparison to julia | |
CN110737431B (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN106815003A (zh) | 一种计算机语言的交互系统及交互方法 | |
Sonntag et al. | Efficient compilation strategy for object‐oriented languages under the closed‐world assumption | |
CA1259138A (en) | Method of compiling high level language statements into low level language instruction sets | |
Riddle et al. | Tools for software system construction | |
Naish et al. | Adtpp: lightweight efficient safe polymorphic algebraic data types for C | |
Chaflekar et al. | Compiler Architecture and Design Issues | |
CN111984243A (zh) | 一种基于注解的通用安全检查及功能扩展方法及装置 | |
Falvo | BN-Hermes: a decompilation and analysis plugin for react native's Hermes bytecode | |
Saxena et al. | Compiler Design | |
CN116795536A (zh) | 一种多处理器共享内存的方法及编程系统 | |
CN115904383A (zh) | 一种动态语言的缺陷分析方法和相关装置 | |
Beevi et al. | MetaJC++: A flexible and automatic program transformation technique using meta framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |