程序生成装置、方法及程序的制作方法

文档序号:6371112阅读:199来源:国知局
专利名称:程序生成装置、方法及程序的制作方法
技术领域
本发明涉及一种自动生成程序的程序生成装置,尤其是涉及一种生成用于验证编译器(compiler)等语言处理装置的动作的源程序来作为检测程序的程序生成装置。
背景技术
现有的程序生成装置例如公开在特开平5-342054号公报中。该现有技术是生成用于验证编译器等语言处理处理器的动作的测试程序的程序生成装置,事先准备多个表示程序中的控制结构的结构数据,作为模板,根据指定了1个以上模板的脚本(script)来生成测试程序。
图1是表示上述现有技术中的结构数据例的图。如图所示,序号1的结构数据表示被称为重复执行的控制结构(1个LOOP结构)。序号20的结构数据在1个LOOP结构中,两个并行的LOOP结构成为嵌套。
图2表示上述现有技术中的脚本及测试程序的一例。在图中,脚本2a指定两个序号1的结构数据即LOOP结构。根据该脚本2a来自动生成测试程序2b。测试程序2b为具有两个并行for语句的循环结构的程序结构。
图3表示脚本及测试程序的另一例。该图的脚本3a各指定一个序号1的结构数据和序号20的结构数据。根据该脚本3a来自动生成测试程序3b。测试程序2b的程序结构为,具有for语句构成的两个并行循环结构,并在第2个循环结构中两个并行的循环结构成为嵌套。
这样,现有的程序自动生成装置生成具有与脚本中指定的结构数据对应的控制结构的测试程序,编程器(progammer)也可仅描述指定结构数据的简单的脚本,以便降低记述测试程序细节的工作量。
但是,根据现有技术中的程序自动生成装置,存在有为了生成具有多种程序结构的多个测试程序,编制脚本需要很大的工作量的问题。原因在于,由1个脚本生成的测试程序为1个,为了生成具有多种程序结构的多个测试程序,编程器需要制作相同数量的脚本。并且,也必需制作多个事先准备的结构数据。
例如,为了验证编译器的动作,在进行生成具有多种程序结构的多个测试程序的随机测试的情况下,或在将特定控制结构(LOOP结构、if结构等)进行多种组合,需要测试程序的情况下,对不同的测试程序制作上述脚本需要很多工作量,上述现有技术在生成多种测试程序中不实用。

发明内容
本发明的目的在于提供一种程序生成装置,以少的工作量来实现生成具有多种程序结构的多个测试程序。
本发明的另一目的在于提供一种程序生成装置,编程器可容易地确认测试程序的执行结果。
为了实现上述目的,本发明的程序生成装置具备接收装置,接收指定应生成程序的多个程序结构的第1脚本;和脚本生成装置,生成记述所述第1脚本指定的多个程序结构中彼此不同的1个程序结构的多个第2脚本。
根据该结构,程序生成装置由1个第1脚本生成多个第2脚本,所以编程器仅制作1个第1脚本即可,可以用少的工作量来实现具有多种程序结构的多个程序。
这里,所述第1脚本通过表示应生成程序中的控制结构的多个组合方法来指定多个程序结构,所述各第2脚本记述唯一地组合控制结构的程序结构,所述脚本生成装置根据第1脚本中指定的组合方法,组合控制结构,从而生成所述多个第2脚本。
根据该结构,第1脚本表示控制结构的多个组合方法,所以编程器可简单制作第1脚本。
这里,所述控制结构最好是循环结构、if-then型分支结构、if-then-else型分支结构至少之一。
另外,所述第1脚本,作为所述组合方法,表示将控制结构并行的组合方法和将控制结构成为嵌套的组合方法。
另外,所述第1脚本可以包含应生成的程序数量的指定,所述脚本生成装置根据第1脚本中指定的多个程序结构,随机生成第1脚本中指定数量的第2脚本。
根据该结构,程序生成装置生成指定数量的程序,所以编程器可使程序生成装置生成所需数量的程序。
这里,程序生成装置还可具备程序生成装置,生成分别对应于由脚本生成装置生成的多个第2脚本的程序。
根据该结构,通过接收装置、脚本生成装置、程序生成装置顺序联动,可从接收1个第1脚本开始依次生成多个第2脚本、多个测试程序。
这里,所述第1脚本还具有参数,指示对程序中的多个部位设定特定的程序语句,所述脚本生成装置对于各第2脚本,将表示所述参数的标记赋予给多个部位,所述程序生成装置在对应于赋予给第2脚本的标记的位置的程序位置上,设定所述特定程序语句。
另外,所述特定程序语句可以是输出字符串和变量之一的输出语句及具有数据依赖关系的赋值语句对中的一个。
根据该结构,程序生成装置向应生成的程序中插入特定程序语句,所以在编译之后的程序执行中,通过执行特定程序语句(数据依赖关系、输出语句),可容易且更确实地进行编程器对编译器的动作验证。
另外,本发明的程序生成方法、生成程序用的生成程序、脚本具有与上述一样的结构、作用及效果。


图1是表示现有技术中的结构数据的图。
图2是表示现有技术中的脚本与测试程序一例的图。
图3是表示现有技术中的脚本与测试程序另一例的图。
图4是实施例中的测试程序生成装置的外观图。
图5是表示测试程序生成装置结构的功能框图。
图6是表示HLSL例、MLSL例、程序例的图。
图7是表示HLSL语法的说明图。
图8是翻译部的更详细的功能框图。
图9是表示参数读取处理的流程图。
图10是表示控制结构生成处理的流程图。
图11是表示具有if型控制结构的多个MLSL脚本生成处理的流程图。
图12是表示完全树T的图。
图13是表示对应于完全树T与部分树S1-S8的MLSL脚本的图。
图14是表示具有if-then-else型的多个控制结构的MLSL脚本生成处理的流程图。
图15是表示HLSL脚本与其完全树的一例的图。
图16是表示部分树与MLSL脚本实例的图。
图17是表示部分树与MLSL脚本实例的图。
图18是表示部分树与MLSL脚本实例的图。
图19是表示具有LOOP型控制结构的多个MLSL脚本生成处理的流程图。
图20是表示附加信息生成处理的流程图。
图21是表示附加信息设定例与测试程序例的图。
图22是表示附加信息设定例与测试程序例的图。
图23是生成部3的详细框图。
图24是表示数据依赖设定处理的流程图。
图25是表示比较位置设定处理的流程图。
具体实施例方式
说明本发明实施例的程序生成装置。
图4是本发明实施例中的程序生成装置1的外观图。如图所示,程序生成装置1具备控制部1a、显示装置1b和输入装置1c。该硬件结构与一般的个人计算机或工作站一样。本发明的程序生成装置通过在上述硬件上执行记述其功能(或本发明的程序生成方法)的特定软件来实现。

图5是表示程序生成装置1的结构的功能框图。该图中,程序生成装置1具备翻译部2和生成部3。
翻译部2根据用高级脚本语言记述的1个文件,生成用中级脚本语言记述的多个文件。
生成部3根据由中级脚本语言记述的各文件,生成1个测试程序。
由此,编程器可以制作由高级脚本语言记述的1个文件,程序生成装置1可根据该文件生成多种具有多个程序结构的测试程序。
下面,将高级脚本语言称为HLSL,将中级脚本语言称为MLSL。另外,将由HLSL记述的文件称为HLSL脚本,将由MLSL记述的文件称为MLSL脚本。
图5中图示功能块的另外的HLSL脚本h1、n个MLSL脚本m1~mn、n个测试程序t1~tn。
这里,HLSL脚本是对程序中的控制结构指定多个配置方法(或组合方法)的文件,总体表现由该多个配置(或组合)确定的多个程序结构。换言之,HLSL脚本表示多个控制结构的指定、和将该指定的控制结构配置在程序中多个部位的方法。另外,所谓MLSL脚本如图2、图3所示的脚本2a、3a那样,是表现1个程序结构的文件,表示将控制结构唯一地配置在程序中的多个位置的方法。
程序生成装置可根据1个HLSL脚本生成多个MLSL脚本和多个测试程序。
图6是表示HLSL脚本、MLSL脚本及测试程序一例的图。图中,由1个HLSL脚本生成n个MLSL脚本及n个测试程序。
图中的HLSL脚本h1是由参数种类来指定LOOP结构的指定和LOOP结构组合方法的一例。即,将LOOP结构的嵌套数量指定为1~2,将LOOP结构的并行数量指定为1~2。
MLSL脚本m1~mn是记述HLSL脚本h1所指定的多个配置方法中的一个的文件。例如,相当于现有技术的图2、图3中说明的脚本2a、3a。
测试程序t1~tn是一对一地对应于MLSL脚本m1~mn的测试程序。在该图中,生成为C语言的源程序。
如此,程序生成装置1根据1个HLSL脚本生成n个MLSL脚本,并根据n个MLSL脚本生成n个测试程序。
生成的各测试程序由图5所示编译器10进行编译,变换为机器语言程序。为了验证编译器的动作,由图5所示目标计算机(或其模拟装置)11来执行该机器语言程序。此外,编译器10通过例如在图4所示的外观个人计算机上执行编译程序软件来实现。另外,目标计算机(或其模拟装置)11是通用的计算机或嵌入式微机控制的家电制品等。例如,DVD录像再现装置、STB(机顶盒)、数码相机、数码摄像机等。在这些目标计算机自身的硬件还未开发的情况下,是其模拟装置。
图7是表示HLSL脚本语法的说明图。如图所示,HLSL脚本为可记述1个以上参数1{参数2参数3…}这样语法的语法。
参数1指定程序结构中应设定的控制结构。这里,所谓控制结构一般表示控制程序执行流程的要素,有顺序结构、重复结构、选择结构(也称为分支结构)等种类。由这些配置来确定程序的执行流程(即程序结构)。如图所示,作为参数1所指定的控制结构,LOOP表示重复结构,“if”表示选择结构。在if选择结果中有if-then型和if-then-else型。在参数1为if的情况下,可由参数2及3来指定if-then型和if-then-else型之一。
参数2中具体有pattern、nest、parallel、number、depend、compare等。
“pattern”在参数1指定的控制结构是if结构的情况下,表示将其if结构设为if-then型或设为if-then-else型的指定。在其后的参数3为“then”的情况下,表示if-then型,在“then-else”的情况下表示if-then-else型。在对参数1指定if结构、且省略pattern的情况下,成为if-then型。
“nest”指定将参数1指定的控制结构进行嵌套配置。嵌套的级数由nest之后的参数3来指定。
“parallel”指定将该控制结构并行配置。并行数量由parallel之后的参数3来指定。
“number”指定应生成的MLSL脚本数量(也可以是测试程序数量)。该数量由number之后的参数3来指定。若之后的参数3不是数值而是字符串“all”,则表示所有可能的全部数量。
“depend”指定程序中有依赖关系的程序语句的设定。由depend之后的参数3来指定应设定在程序中的几个部位。
“compare”指定输出确定的字符串等的输出语句的设定。本程序生成装置1最终生成的测试程序在由编译器10编译并由目标计算机11执行时,编程器可以比较输出语句的输出与MLSL脚本中的标记位置,验证动作。
参数3指定参数2为pattern情况下的if结构型、参数2的数量范围。如图所示,“then”“then-else”(或else)表示参数2为pattern的情况下的if结构型。在参数2为pattern、省略参数3的情况下,为if-then型。
在“L-M”(L、M为整数)后续在第1参数“nest”、“parallel”后的情况下,指定在N为从L到M的范围内对控制结构进行组合(或配置)。在后续“depend”、“compare”之后的情况下,指定在从L到M的范围内设定数据依赖关系或输出语句。
在“N”(N为整数)后续在第1参数“nest”、“parallel”之后的情况下,指定将N作为最大数量来配置控制结构。在后续在“depend”、“compare”之后的情况下,设定对N个部位设定依赖关系或输出语句。此时,也可指定对N个块分别设定依赖关系或输出语句。
在指定为“all”来代替“N”的情况下,表示所有可能的数。
例如,“nest1~2”表示将指定的控制结构进行嵌套的层数为1(无嵌套)到2(嵌套为1级)。“parallel1~2”表示使指定的控制结构的并行数量为1(单独)到2的范围内。在省略参数3的情况下,看作是由用户事先设定的默认值。对每种参数2都设定该默认值。
参数2及3可在参数1之后的{}内记述多个,用于(1)if结构型的指定、(2)参数1指定的控制结构的程序中的配置方法的指定(nest、parallel)、(3)应生成的测试程序数量的指定(number)、(4)应附加在测试程序中的信息数量的指定(depend、compare)。因为可由上述(1)及(2)来在1个HLSL脚本中指定多个控制结构的配置,所以可指定控制结构的配置方法不同的多个程序结构。可由(3)将应生成的测试程序数量设定为编程器所需的数量。在由编译器将测试程序编译为机器语言程序、并且由目标计算机执行机器语言程序的情况下,编程器可由(4)来容易进行数据依赖关系及执行路径的验证。
作为MLSL脚本的具体例,有图2中的脚本2a、图3中的脚本3a等。另外,图1中的结构数据也分别为MLSL脚本。
从而,MLSL脚本被记述为表示控制结构的多个参数的组合,唯一表示控制结构的配置。作为MLSL脚本中的参数,有LOOP、if(if-then、if-then-else)等。
(翻译部2的详细结构)图8是表示翻译部2的更详细结构的框图。如图所示,翻译部2具有参数读取部21、控制结构生成部22、和附加信息生成部23。
参数读取部21读取HLSL脚本中记述的参数1~3,输出到控制结构生成部22。其中,将参数1中应附加到测试程序上的信息指定(depend、compare)输出到附加信息生成部23。
控制结构生成部22根据参数2中指定的配置方法,配置参数1中指定的控制结构,对参数读取部21读取出的参数1~3进行生成多个MLSL脚本的处理(例如参照图6所示的MLSL脚本m1、m2、mn)。
附加信息生成部23根据参数读取部21读取出的参数中应附加到测试程序上的信息指定(depend、compare),向控制结构生成部22生成的多个MLSL脚本在应设定附加信息的位置分别赋予标记。该标记有对应于“depend”的标记和对应于“compare”的标记。生成部3分别将赋予这些标记后的多个MLSL脚本变换为多个测试程序。此时,生成部3在MLSL脚本中“depend”标记位置所对应的测试程序的各位置,设定具有数据依赖关系的程序语句。生成部3在“compare”标记位置所对应的测试程序中的各位置上设定输出语句。
通过这些程序语句或输出语句,编程器可验证执行流程。
图9是表示图8所示参数读取部21中的参数读取处理细节的流程图。
图9中,参数读取部21判断HLSL脚本中记述的参数1是“if”还是“LOOP”(S201)。在判断结果是“if”的情况下,参数读取部21读取后续的参数2及参数3,向控制结构生成部22输出关于“pattern”、“nest”、“parallel”、“number”的参数1、2及3,并向附加信息生成部23输出关于“depend”、“compare”的参数2及3(S202)。在判断结果为“LOOP”的情况下,参数读取部21读取后续的参数2及参数3,向控制结构生成部22输出关于“nest”、“parallel”、“number”的参数1、2及3,并向附加信息生成部23输出关于“depend”、“compare”的参数2及3(S203)。
图10是表示图8所示控制结构生成部22中的控制结构生成处理的流程图。
控制结构生成部22判断从参数读取部21输出的参数1是“if”还是“LOOP”(S205),若判断结果是“LOOP”,则进行LOOP型的控制结构生成处理。在该LOOP型控制结构生成处理中,控制结构生成部22在由参数指定的范围内配置多个LOOP型控制结构,生成多个具有对应于各配置的程序结构的MLSL脚本(S209)。
在判断结果为“if”、指定参数2为“pattern”及指定参数3为“then”的情况下(省略“pattern”的情况下,或有“pattern”但省略“then”或“then-else”的情况下),进行if型控制结构生成处理。在该if型控制结构生成处理中,控制结构生成部22在由参数指定的范围内配置多个if-then型控制结构,并生成具有对应于各配置的程序结构的多个MLSL脚本(S207)。
在判断结果为“if”、指定参数2为“pattern”及指定参数3为“then-else”的情况下,进行if-then-else型控制结构生成处理。在该if-then-else型控制结构生成处理中,控制结构生成部22在参数指定的范围内配置多个if-then-else型控制结构,并生成具有对应于各配置的程序结构的多个MLSL脚本(S208)。
图11是表示图10的步骤S206所示if型(if-then型)控制结构生成处理细节的流程图。
首先,控制结构生成部22生成依照从参数读以部21输出的“parallel”的参数3的数值(下面将其最大值称为parallel数量)、“nest”的参数3的数值(以下将其最大值称为nest数量)的完全树(S210)。具体而言,控制结构生成部22将树的高度(节点的层数)确定为(nest数量)+1(S210a),将各节点的子节点数量(branch数)确定为(parallel数量)(S210b),生成表示依照确定的高度、分支数量的完全树的数据。
图12是表示在parallel2、nest2情况下由控制结构生成部22生成的完全树T及与之对应的MLSL脚本的图。如图所示,树的高度为(nest数量2+1=)3,子节点数量为(parallel数量)的2。该完全树T与MLSL脚本T1相比,根节点(节点1)以外的各节点对应于1个if语句。即,如图中的MLSL脚本T1所示,完全树T表示最大限度配置由HLSL脚本指定的控制结构中由参数(nest、parallel)指定的控制结构的程序结构。
接着,控制结构生成部22根据完全树生成多个部分树(S221~S217的循环1)。生成的部分树的数量是由“number”指定的数量。各部分树表示在完全树范围内部分配置由HLSL脚本指定的控制结构的程序结构。这里,生成的部分树中还包含完全树本身。
具体来说,控制结构生成部22首先根据完全树随机生成一个部分树S(S212),若其高度不是(nest数量+1),则再次返回部分树的生成(S213),若子节点的最大数不是(parallel数),则再次返回部分树的生成(S214)。这里返回的理由在于,部分树不具有由参数(nest、parallel)指定的数的控制结构(节点)。
控制结构生成部22判断对应于该部分树的MLSL脚本是否已生成(S215),若还未生成,则生成对应于该部分树的MLSL脚本(S216)。
如上所述生成1个部分树。控制结构生成部22重复上述处理(循环1),直到生成由number指定的数的部分树。
图13是表示对应于根据图12所示完全树生成的部分树的MLSL脚本的图。图中表示指定number为“all”的情况下生成的所有的部分树,并生成总共9个MLSL脚本。图中,MLSL脚本T1对应于完全树。MLSL脚本S1~S8分别对应于从部分树中删除1个以上节点后的部分树。
图14是表示图10的步骤S206所示if-then-else型的控制结构生成处理的流程图。
该图的流程与图11相比,不同之处在于具有S2101来取代步骤S210(即具有步骤S210d及S210e来取代步骤S210c)、和具有步骤S216a来取代步骤S216。下面,省略相同点的说明,主要说明不同点。
在步骤S210a中,控制结构生成部22生成具有对应于if-then-else型的if语句的节点的完全树。因此,控制结构生成部22在确定高度和子节点数量后,生成根节点及其分支(S210d),并将从根节点以下的所有的子节点作为双子节点,根据确定的高度和子节点数量,生成双子节点和分支(S210e)。
在步骤216a中,控制结构生成部22与步骤S216相比,不同之处在于,生成不是配置if-then型而是if-then-else型控制结构的MLSL脚本。
图15表示指定if-then-else型控制结构的HLSL脚本和与其对应的完全树的一例。该图HLSL脚本h2将(nest数量)指定为2,将(parallel数量)指定为2。在与之对应的完全树中,根节点之外的所有节点成为内部具有两个节点的双子节点。双子节点内部的左节点对应于if-then-else型的“then”,右节点对应于else。
图16表示控制结构生成部22中生成的部分树、和由该部分树生成的MLSL脚本的第1例。图中,两个双子节点n2、n3连接于该双子节点n1内的左节点上。在与之对应的MLSL脚本中,在对应于双子节点n1的if-then-else语句的then侧,对应于并行的两个双子节点n2、n3的两个if-then-else语句成为嵌套。
图17表示控制结构生成部22生成的部分树与由该部分树生成的MLSL脚本的第2例。该图根节点下面,两个双子节点n4、n5对应于并行的两个if-then-else语句。
图18表示控制结构生成部22中生成的部分树、和由该部分树生成的MLSL脚本的第3例。该图的部分树具有6个双子节点。在MLSL脚本中,对应于双子节点n6、n9的两个if-then-else语句并行。在对应于双子节点n6的if-then-else语句的then侧,对应于两个并列的双子节点n7、n8的if-then-else语句成为嵌套。在对应于双子节点n9的if-then-else语句的then侧,对应于双子节点n10的if-then-else语句成为嵌套,在else侧,对应于双子节点n11的if-then-else语句成为嵌套。
从而,如图16~图18所示,控制结构生成部22生成对应于部分树的MLSL脚本。
图19是表示图10的步骤S206所示LOOP型控制结构生成处理的流程图。该图的流程与图11相比,不同之处在于具有步骤216b来取代步骤216。下面,省略相同点的说明,主要说明不同点。
步骤S216b中,控制结构生成部22与步骤S261相比,不同之处仅在于,生成LOOP型控制结构来取代if-then型的控制结构。即,控制结构生成部22生成表述为“LOOP{}”的多个MLSL脚本,代替图12、13的MLSL脚本中的“if(){}”表述。
以上分别说明了控制结构为if-then型、if-then-else型、LOOP型情况下的控制结构生成处理,但也可将其混合。例如,在混合if-then型与if-then-else型进行指定的情况下,在将if-then型看作是if-then-else型,一旦生成完全树后,可以追加在由parallel及nest指定的范围内将几个双子节点置换为通常节点的处理。LOOP型与if-then-else型混合的情况、及LOOP型与if-then型混合的情况也一样。

图20是表示图8所示附加信息生成部23中的附加信息生成处理的流程图。
附加信息生成部23,在从参数读取部21输出的参数中存在“depend”和其后续的参数3的情况下(S220),对控制结构生成部22生成的多个MLSL脚本分别附加由参数3指定的数量的标记(下面称为depend标记)(S221)。这里,1个depend标记是指定应设定具有数据依赖关系的两个程序语句的位置的两个标记对。
另外,附加信息生成部23在存在“compare”和其后续的参数3的情况下(S222),向控制结构生成部22生成的多个MLSL脚本分别附加由参数3指定的数量的标记(下面称为compare标记)(S221)。这里,compare标记是指定应设定表示程序执行位置或状态用输出语句的位置的标记。
图21是表示由附加信息生成部23附加depend标记后的MLSL脚本与测试程序一例的图。该图的MLSL脚本m10中的标记对A、B是depend标记。
图22是表示由附加信息生成部23附加compare标记后的MLSL脚本与测试程序一例的图。该图的MLSL脚本m11中的3个“compare”分别是compare标记。
图23是表示生成部3的更详细结构的框图。如图所示,生成部3具有数据依赖设定部31和比较位置设定部32,根据MLSL脚本来生成测试程序,作为编译器10的编译对象。在本实施例中,测试程序是C语言的源程序。
生成部3生成具有对应于MLSL脚本中记述为控制结构的LOOP或if的控制结构的源程序。例如,对应于MLSL中的LOOP来生成for语句的反复处理,并对应于MLSL中if来生成if语句,对应于MLSL中if-then-else生成if(){}else{}语句。这种根据MLSL脚本生成测试程序的技术可以与将图2的脚本变换为图3的源程序的现有技术一样进行。另外,现有技术不适用于depend标记及compare标记。
数据依赖设定部31在生成测试程序时,向depend标记的位置附加具有数据依赖关系的程序语句。
比较位置设定部32在生成测试程序时,向compare标记的位置附加输出语句。
图24是表示图23所示数据依赖设定部31中的数据依赖设定处理的流程图。
如图所示,数据依赖设定部31对MLSL脚本中的各块进行步骤S310-S314的处理。这里,所谓块是指没有从中途分支的始终连续执行的程序单位。即,指仅块末尾的指令分支、不会从这之外的指令发生分支的单位。在MLSL脚本中,相当于由if、LOOP的控制结构区分出的部分。
数据依赖设定部31判断MLSL脚本中的该块中是否设定数据依赖标记(depend标记的标记对中的一个)(S311)。在判断为未设定的情况下,数据依赖设定部31随机生成赋值语句,作为测试程序中构成该块的程序语句(S312),在判断为设定的情况下,数据依赖设定部31找出标记MLSL脚本中标记对中另一个被标记的块,并对测试程序中的一对块,生成具有数据依赖关系的两个赋值语句的每一个(S313)。步骤S313在已设定已具有数据依赖关系的赋值语句的情况下,也可省略该步骤。
图21所示的测试程序p10是具有数据依赖设定部31设定的数据依赖关系的程序语句的一例。如图所示,在MLSL脚本m10中的标记对A的位置,设定具有数据依赖关系的两个程序语句(赋值语句)“x=a+b;”和“y=x+c;”。此时,这两个程序语句经变量x而存在数据依赖关系。另外,在标记对B的位置设定具有数据依赖关系的两个程序语句“z=a+b;”和“k=z-d;”。此时,这两个程序语句经变量z而存在数据依赖关系。
图25是表示图23所示比较位置设定部32中的比较位置设定处理的流程图。
如图所示,比较位置设定部32对MLSL脚本中的各块进行步骤S320-S323的处理(循环1)。数据依赖设定部31判断MLSL脚本中的该块中是否设定比较位置标记(compare标记)(S321)。在判断为设定的情况下,比较位置设定部32在对应于该标记位置的测试程序中的块中设定输出语句(S322)。
图22所示测试程序p11是由比较位置设定部32设定的输出语句的一例。如图所示,在对应于MLSL脚本m11中的compare标记位置的测试程序p10的块中,设定输出语句“printf(“xxx”);”等。此时,编程器可以事先在程序生成装置1中设定应生成的输出语句。另外,输出内容xxx可以是表示该位置的字符串,或是变量的部分或全部值,或是特定的运算结果。
另外,本发明不限于上述实施例,可以在不脱离本发明的范围的情况下进行各种变形或修正。
上述实施例中,说明生成C语言源程序作为测试程序的实例,但也可以是C语言以外的高级语言。此时,可以使参数1中的LOOP、if对应于用该高级语言记述的控制结构(if结构、for结构、while结构、…)。
另外,在上述实施例中,举例说明通过1个参数1来对1个HLSL脚本指定1个控制结构的情况,但也可对1个HLSL脚本指定多个参数1,也可由多个参数1来指定不同的控制结构。例如,也可混合指定if-then型的参数1和指定if-then-else型的参数1,也可混合指定LOOP结构的参数1和指定if-then-else型的参数1。
另外,在上述实施例中,生成编译器用的测试程序,但也可以不是编译器,可以是翻译器(interpreter)、汇编器,也可将解释执行JAVA(R)或Visual Basic(R)等脚本语言的虚拟机作为目标。
上述实施例中,作为指定控制结构的参数1说明了LOOP、if,但也可包含表示此外的控制结构的参数。例如,表示顺序结构的参数(例如sequence)、递归调用结构(例如recursive)、表示1对n的分支的n分支结构(n-branch)等。
上述实施例中,程序生成装置1生成的程序为开发中的编译器的动作验证用的测试程序,但不用说,也可用于开发中的目标机11的动作验证。
产业上的可利用性本发明的程序生成装置适用于为了验证编译器的动作而生成多个多种测试用程序。
权利要求
1.一种程序生成装置,其特征在于具备接收装置,接收指定应生成程序的多个程序结构的第1脚本;和脚本生成装置,生成记述所述第1脚本指定的多个程序结构中彼此不同的1个程序结构的多个第2脚本。
2.根据权利要求1所述的程序生成装置,其特征在于所述第1脚本通过表示应生成程序中的控制结构的多个配置方法来指定多个程序结构,所述各第2脚本记述唯一配置控制结构的程序结构,所述脚本生成装置根据第1脚本指定的配置方法,配置控制结构,由此生成所述多个第2脚本。
3.根据权利要求2所述的程序生成装置,其特征在于所述控制结构是循环结构。
4.根据权利要求2所述的程序生成装置,其特征在于所述控制结构是分支结构。
5.根据权利要求4所述的程序生成装置,其特征在于所述控制结构是if-then型分支结构。
6.根据权利要求4所述的程序生成装置,其特征在于所述控制结构是if-then-else型分支结构。
7.根据权利要求2所述的程序生成装置,其特征在于所述第1脚本包含作为所述配置方法的关于所述控制结构并行度的指定。
8.根据权利要求2所述的程序生成装置,其特征在于所述第1脚本包含作为所述配置方法的关于所述控制结构嵌套的指定。
9.根据权利要求2所述的程序生成装置,其特征在于所述第1脚本包含作为所述配置方法的关于控制结构并行度及嵌套的指定。
10.根据权利要求2所述的程序生成装置,其特征在于所述第1脚本包含应生成程序数量的指定,所述脚本生成装置根据第1脚本中指定的多个程序结构,随机生成第1脚本中指定的数量的第2脚本。
11.根据权利要求2所述的程序生成装置,其特征在于所述脚本生成装置生成对应于所有第1脚本指定的多个程序结构的第2脚本。
12.根据权利要求1所述的程序生成装置,其特征在于所述第1脚本还具有参数,指示对程序中的多个部位设定特定的程序语句,所述脚本生成装置对于各第2脚本,向多个部位分别赋予表示所述参数的标记。
13.根据权利要求12所述的程序生成装置,其特征在于所述特定程序语句是输出字符串和变量之一的输出语句。
14.根据权利要求12所述的程序生成装置,其特征在于所述特定程序语句是具有数据依赖关系的赋值语句对。
15.根据权利要求1所述的程序生成装置,其特征在于所述第1脚本包含表示应生成程序中应设定控制结构的第1参数、和表示该控制结构的多个配置方法的第2参数,所述各第2脚本记述唯一配置控制结构的程序结构,所述脚本生成装置具有读取装置,从第1脚本中读取第1及第2参数;和控制结构生成装置,根据读取的第1及第2参数表示的控制结构及配置方法,生成所述多个第2脚本。
16.根据权利要求15所述的程序生成装置,其特征在于所述第1参数表示作为所述控制结构的循环结构及分支结构中的至少一个,所述第2参数表示应并行设定第1参数表示的控制结构的数量范围及应将该控制结构设定为嵌套的数量的范围中的至少一方。
17.根据权利要求16所述的程序生成装置,其特征在于所述控制结构生成装置具有完全树生成装置,生成表示对应于第2参数所示数量范围的最大限度的配置的完全树的完全树数据;部分树生成装置,生成表示生成的完全树的部分树的多个部分树数据;和第2脚本生成装置,生成第2脚本,该第2脚本记述唯一地配置生成的各部分树表示的控制结构的程序结构。
18.根据权利要求17所述的程序生成装置,其特征在于所述完全树生成装置,将所述第2参数所示嵌套数量范围的最大值加上1后的值,确定为所述完全树的节点层数的高度,将所述第2参数所示应并行设定的控制结构的数量范围的最大数量,确定为所述完全树的各节点的子节点数,生成作为所述完全树的依照确定的高度和子节点数的树结构数据,此时,在第1参数表示if-then-else型分支结构的情况下,生成根节点之外的各节点,作为双子节点,并生成所述完全树,以便具有确定了双子节点中各节点的所述子节点数量的双子节点。
19.根据权利要求15所述的程序生成装置,其特征在于所述第1脚本还包含数据依赖关系的设定指示和应设定数据依赖关系的数量的指定,所述脚本生成装置还具有标记赋予装置,根据第1脚本中的数据依赖关系的设定指示,依照指定的数量,向控制结构生成装置生成的各第2脚本分别赋予表示应设定数据依赖关系的位置的依赖标记。
20.根据权利要求19所述的程序生成装置,其特征在于所述标记赋予装置向相邻的两个基本块赋予作为所述依赖标记的标记对。
21.根据权利要求19所述的程序生成装置,其特征在于所述控制结构是if-then-else型分支结构,所述标记赋予装置向对应于then的基本块及对应于else的基本块赋予所述标记对。
22.根据权利要求15所述的程序生成装置,其特征在于所述第1脚本还包含输出语句的设定指示和应设定输出语句的数量的指定,所述脚本生成装置还具有标记赋予装置,根据第1脚本中的输出语句的设定指示,对于控制结构生成装置生成的各第2脚本,分别向所述指定数量的基本块随机赋予表示应设定输出语句的位置的输出标记。
23.根据权利要求15所述的程序生成装置,其特征在于所述第1脚本还包含输出语句的设定指示和应设定输出语句的数量指定,所述脚本生成装置还具有标记赋予装置,根据第1脚本中的输出语句的设定指示,对于控制结构生成装置生成的各第2脚本,分别向隔开每个所述指定数量的间隔的基本块,赋予表示应设定输出语句的位置的输出标记。
24.根据权利要求1所述的程序生成装置,其特征在于所述程序生成装置还具备程序生成装置,生成对应于由脚本生成装置生成的多个第2脚本的每一个的程序。
25.一种程序生成方法,其特征在于具备接收步骤,接收指定应生成程序的多个程序结构的第1脚本;和脚本生成步骤,生成记述所述第1脚本指定的多个程序结构中彼此不同的1个程序结构的多个第2脚本。
26.一种生成程序,为了生成程序而由计算机执行,其特征在于在计算机中执行接收步骤,接收指定应生成程序的多个程序结构的第1脚本;和第1生成步骤,生成记述所述第1脚本指定的多个程序结构中包含的1个程序结构的多个第2脚本。
27.一种脚本,包含高级脚本和中级脚本,这些脚本具有在生成程序用的程序生成装置中,从1个高级脚本变换为多个中级脚本、并且从多个中级脚本变换为应生成的多个程序时进行处理的数据结构,其特征在于所述高级脚本包含表示应生成程序中应设定的控制结构的第1参数、表示该控制结构的多个配置方法的第2参数、和指定第2参数数量范围的第3参数,通过表示应生成程序中的控制结构的多个配置方法,指定多个程序结构,所述中级脚本被记述为表示控制结构的多个第4参数的组合,表示所述控制结构的多个配置方法中的一个配置。
28.根据权利要求27所述的脚本,其特征在于所述高级脚本语言对应于1个第1参数,具有多个第2参数和第3参数的组。
29.根据权利要求27所述的脚本,其特征在于所述第2参数还指定具有数据依赖关系的程序语句及指示输出的程序语句之一的设定。
全文摘要
本发明的程序生成装置具备翻译部,接收指定应生成程序的多个程序结构的1个HLSL(高级脚本语言)脚本,并翻译成记述由该HLSL脚本指定的多个程序结构中彼此不同的1个程序结构的多个MLSL(中级脚本语言)脚本;和生成部,生成对应于多个第2脚本的每一个的程序。
文档编号G06F9/44GK1567223SQ03147238
公开日2005年1月19日 申请日期2003年7月9日 优先权日2003年7月9日
发明者小川一, 高山秀一, 瓶子岳人, 赵琛 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1