JP2005032212A - プログラム生成装置、方法及びプログラム - Google Patents
プログラム生成装置、方法及びプログラム Download PDFInfo
- Publication number
- JP2005032212A JP2005032212A JP2003387156A JP2003387156A JP2005032212A JP 2005032212 A JP2005032212 A JP 2005032212A JP 2003387156 A JP2003387156 A JP 2003387156A JP 2003387156 A JP2003387156 A JP 2003387156A JP 2005032212 A JP2005032212 A JP 2005032212A
- Authority
- JP
- Japan
- Prior art keywords
- program
- script
- control structure
- parameter
- generated
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims description 46
- 238000013515 script Methods 0.000 claims abstract description 217
- 238000002910 structure generation Methods 0.000 claims description 49
- 238000012360 testing method Methods 0.000 abstract description 20
- 238000013519 translation Methods 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 12
- 238000000547 structure data Methods 0.000 description 12
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 238000007796 conventional method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】多種多様なプログラム構造を有する複数のテストプログラムの生成を少ない工数で実現するプログラム生成装置を提供する。
【解決手段】生成すべきプログラムの複数通りのプログラム構造を指定する1つのHLSL(ハイレベルスクリプト言語)スクリプトを受け付け、当該HLSLスクリプトにより指定された複数通りのプログラム構造のうち互いに異なる1つのプログラム構造を記述する複数のMLSL(ミドルレベルスクリプト言語)スクリプトに翻訳する翻訳部2と、複数の第2スクリプトのそれぞれに対応するプログラムを生成する生成部3とを備える。
【選択図】図5
【解決手段】生成すべきプログラムの複数通りのプログラム構造を指定する1つのHLSL(ハイレベルスクリプト言語)スクリプトを受け付け、当該HLSLスクリプトにより指定された複数通りのプログラム構造のうち互いに異なる1つのプログラム構造を記述する複数のMLSL(ミドルレベルスクリプト言語)スクリプトに翻訳する翻訳部2と、複数の第2スクリプトのそれぞれに対応するプログラムを生成する生成部3とを備える。
【選択図】図5
Description
本発明は、プログラムを自動的に生成するプログラム生成装置に関し、特にコンパイラ等の言語処理装置の動作を検証するためのソースプログラムをテストプログラムとして生成するプログラム生成装置に関する。
従来のプログラム生成装置は例えば特許文献1に開示されている。この従来技術は、コンパイラなどの言語処理プロセッサの動作を検証するためのテストプログラムを生成するプログラム生成装置であって、プログラム中の制御構造を示す構造データをテンプレートとして予め複数用意しておき、1つ以上のテンプレートを指定するスクリプトに従ってテストプログラムを生成している。
図1は、上記従来技術における構造データ例を示す図である。同図のように番号1の構造データは、繰り返し実行という制御構造(1つのLOOP構造)を示している。番号20の構造データは、1つのLOOP構造の中に、2並列のLOOP構造が入れ子になっている。
図2は、上記従来技術におけるスクリプト及びテストプログラムの一例を示す。同図においてスクリプト2aは番号1の構造データすなわちLOOP構造を2つ指定する。このスクリプト2aに従ってテストプログラム2bが自動生成される。テストプログラム2bは、for文によるループ構造を2つ並列に有するプログラム構造になっている。
図3はスクリプト及びテストプログラムの他の一例を示す。同図のスクリプト3aは番号1の構造データと番号20の構造データを1つずつ指定する。このスクリプト3aに従ってテストプログラム3bが自動生成される。テストプログラム2bは、for文によりループ構造を2つ並列に有し、2つめのループ構造には2並列のループ構造が入れ子になっているというプログラム構造になっている。
このように従来のプログラム自動生成装置は、スクリプトに指定された構造データに対応する制御構造を有するテストプログラムを生成する。プログラマは、構造データを指定する簡単なスクリプトを記述するだけでよく、テストプログラムの細部を記述する工数の低減を図っている。
特開平5−342054号公報
しかしながら、従来技術におけるプログラム自動生成装置によれば、多種多様なプログラム構造を有する多数のテストプログラムを生成するためには、スクリプト作成の工数を多大に要するという問題がある。なぜなら、1つのスクリプトから生成されるテストプログラムは1つであり、多種多様なプログラム構造を有する複数のテストプログラムを生成するためには、同数のスクリプトをプログラマが作成する必要があるからである。さらに、予め用意されている構造データも多数作成しておく必要がある。
例えば、コンパイラの動作を検証するためには、多種多様なプログラム構造を有する複数のテストプログラムを生成するランダムテストをする場合や、特定の制御構造(LOOP構造、if構造など)を多様に組み合わせテストプログラムを必要とする場合に、テストプログラム個別に上記スクリプトを作成するのは、多大な工数を要してしまい、上記従来技術は多種多様なテストプログラムの生成には実用的ではない。
本発明の目的は、多種多様なプログラム構造を有する複数のテストプログラムの生成を少ない工数で実現するプログラム生成装置を提供することにある。
本発明の他の目的は、テストプログラムの実行結果をプログラマが容易に確認することができるプログラム生成装置を提供することにある。
本発明の他の目的は、テストプログラムの実行結果をプログラマが容易に確認することができるプログラム生成装置を提供することにある。
上記目的を達成するため、本発明のプログラム生成装置は、生成すべきプログラムの複数通りのプログラム構造を指定する第1スクリプトを受け付ける受付手段と、前記第1スクリプトにより指定された複数通りのプログラム構造のうち互いに異なる1つのプログラム構造を記述する複数の第2スクリプトを生成するスクリプト生成手段とを備える。
この構成によれば、プログラム生成装置は、1つの第1スクリプトから複数の第2スクリプトを生成するので、プログラマは、たった1つの第1スクリプトを作成するだけでよく、多種多様なプログラム構造を有する複数のプログラムを少ない工数で実現することができる。
この構成によれば、プログラム生成装置は、1つの第1スクリプトから複数の第2スクリプトを生成するので、プログラマは、たった1つの第1スクリプトを作成するだけでよく、多種多様なプログラム構造を有する複数のプログラムを少ない工数で実現することができる。
ここで、前記第1スクリプトは、生成すべきプログラムにおける制御構造の複数通りの組み合わせ方を示すことにより複数通りのプログラム構造を指定し、前記各第2スクリプトは、制御構造を一意に組み合わせたプログラム構造を記述し、前記スクリプト生成手段は、第1スクリプトに指定された組み合わせ方に基づいて制御構造を組み合わせることにより前記複数の第2スクリプトを生成する構成としてもよい。
この構成によれば、第1スクリプトは制御構造の複数通りの組み合わせ方を示すので、プログラマは第1スクリプトの作成を簡単にすることができる。
ここで、前記制御構造は、ループ構造、if−then型分岐構造、if−then−else型分岐構造の少なくとも1つとしてもよい。
また、前記第1スクリプトは、前記組み合わせ方として、制御構造を並列な組み合わ方及び制御構造を入れ子にする組み合わせ方を示すようにしてもよい。
ここで、前記制御構造は、ループ構造、if−then型分岐構造、if−then−else型分岐構造の少なくとも1つとしてもよい。
また、前記第1スクリプトは、前記組み合わせ方として、制御構造を並列な組み合わ方及び制御構造を入れ子にする組み合わせ方を示すようにしてもよい。
また、前記第1スクリプトは、生成すべきプログラムの数の指定を含み、前記スクリプト生成手段は、第1スクリプトにおいて指定された数の第2スクリプトを、第1スクリプトに指定された複数通りのプログラム構造からランダムに生成する構成としてもよい。
この構成によれば、プログラム生成装置は、指定された数のプログラムを生成するので、プログラマは所望する数のプログラムをプログラム生成装置に生成させることができる。
この構成によれば、プログラム生成装置は、指定された数のプログラムを生成するので、プログラマは所望する数のプログラムをプログラム生成装置に生成させることができる。
ここで、プログラム生成装置は、さらに、スクリプト生成手段によって生成された複数の第2スクリプトのそれぞれに対応するプログラムを生成するプログラム生成手段を備える構成としてもよい。
この構成によれば、受付手段、スクリプト生成手段、プログラム生成手段が順に連動することによって、1つの第1スクリプトの受付から複数の第2スクリプト、複数のテストプログラムと順次生成することができる。
この構成によれば、受付手段、スクリプト生成手段、プログラム生成手段が順に連動することによって、1つの第1スクリプトの受付から複数の第2スクリプト、複数のテストプログラムと順次生成することができる。
ここで、前記第1スクリプトは、さらに、プログラム中の複数箇所に特定のプログラム文を設定することを指示するパラメータを有し、前記スクリプト生成手段は、第2スクリプトのそれぞれに対して、前記パラメータを示すマークを複数箇所に付与し、前記プログラム生成手段は、第2スクリプトに付与されたマークの位置に対応するプログラムの位置に、前記特定のプログラム文を設定する構成としてもよい。
また、前記特定のプログラム文は、文字列と変数の何れかを出力する出力文及びデータ依存関係を有する代入文ペアの何れかである構成としてもよい。
この構成によれば、プログラム生成装置は、生成すべきプログラム中に特定プログラム文を挿入するので、コンパイル後のプログラム実行において、特定プログラム文(データ依存関係、出力文)の実行によって、プログラマによるコンパイラの動作検証を容易にし、より確実にすることができる。
また、本発明のプログラム生成方法、プログラムを生成するための生成プログラム、スクリプトについても上記と同様の構成、作用及び効果を有する。
この構成によれば、プログラム生成装置は、生成すべきプログラム中に特定プログラム文を挿入するので、コンパイル後のプログラム実行において、特定プログラム文(データ依存関係、出力文)の実行によって、プログラマによるコンパイラの動作検証を容易にし、より確実にすることができる。
また、本発明のプログラム生成方法、プログラムを生成するための生成プログラム、スクリプトについても上記と同様の構成、作用及び効果を有する。
本発明のプログラム生成装置によれば、1つの第1スクリプトから複数の第2スクリプトを生成するので、プログラマは、たった1つの第1スクリプトを作成するだけでよく、多種多様なプログラム構造を有する複数のプログラムを少ない工数で実現することができる。
本発明の実施の形態におけるプログラム生成装置について説明する。
<外観>
図4は、本発明の実施の形態におけるプログラム生成装置1の外観を示す図である。同図のようにプログラム生成装置1は、制御部1aと表示装置1bと入力装置1cを備える。このハードウェア構成は、一般的なパーソナルコンピュータ又はワークステーションと同様である。本発明のプログラム生成装置は、その機能(あるいは本発明のプログラム生成方法)を記述した特定のソフトウェアを上記ハードウェア上で実行することにより実現される。
<外観>
図4は、本発明の実施の形態におけるプログラム生成装置1の外観を示す図である。同図のようにプログラム生成装置1は、制御部1aと表示装置1bと入力装置1cを備える。このハードウェア構成は、一般的なパーソナルコンピュータ又はワークステーションと同様である。本発明のプログラム生成装置は、その機能(あるいは本発明のプログラム生成方法)を記述した特定のソフトウェアを上記ハードウェア上で実行することにより実現される。
<概略構成>
図5は、プログラム生成装置1の構成を示す機能ブロック図を示す。同図において、プログラム生成装置1は翻訳部2と生成部3を備える。
図5は、プログラム生成装置1の構成を示す機能ブロック図を示す。同図において、プログラム生成装置1は翻訳部2と生成部3を備える。
翻訳部2は、ハイ・レベル・スクリプト言語で記述された1つのファイルからミドル・レベル・スクリプト言語で記述された複数のファイルを生成する。
生成部3は、ミドルレベルスクリプト言語で記述された各々のファイルから1つテストプログラムを生成する。
これにより、プログラマがハイレベルスクリプト言語で記述した1つのファイルを作成すればよく、プログラム生成装置1は、そのファイルから多種多様な複数のプログラム構造を有するテストプログラムを生成することができる。
生成部3は、ミドルレベルスクリプト言語で記述された各々のファイルから1つテストプログラムを生成する。
これにより、プログラマがハイレベルスクリプト言語で記述した1つのファイルを作成すればよく、プログラム生成装置1は、そのファイルから多種多様な複数のプログラム構造を有するテストプログラムを生成することができる。
以下、ハイレベルスクリプト言語をHLSL、ミドルレベルスクリプト言語をMLSLと呼ぶ。また、HLSLで記述されたファイルをHLSLスクリプト、MLSLで記述されたファイルをMLSLスクリプトと呼ぶ。
図5には機能ブロックの他の、HLSLスクリプトh1、n個のMLSLスクリプトm1〜mn、n個のテストプログラムt1〜tnを図示してある。
図5には機能ブロックの他の、HLSLスクリプトh1、n個のMLSLスクリプトm1〜mn、n個のテストプログラムt1〜tnを図示してある。
ここで、HLSLスクリプトは、プログラム中の制御構造について複数通りの配置の仕方(又は組み合わせ方)を指定するファイルであり、その複数通りの配置(又は組み合わせ)により定まる複数通りのプログラム構造を包括的に表現する。言い換えれば、HLSLスクリプトは、制御構造の指定と、その指定された制御構造をプログラム中の複数箇所に配置する仕方を複数通り示す。また、MLSLスクリプトとは、図2、図3に示したスクリプト2a、3aのように、1つのプログラム構造を表現したファイルであり、制御構造をプログラム中の複数箇所に一意に配置する仕方を示す。
プログラム生成装置は、1つのHLSLスクリプトから複数のMLSLスクリプト及び複数のテストプログラムを生成することができる。
プログラム生成装置は、1つのHLSLスクリプトから複数のMLSLスクリプト及び複数のテストプログラムを生成することができる。
<生成例>
図6は、HLSLスクリプト、MLSLスクリプト及びテストプログラムの一例を示す図である。同図では、1つのHLSLスクリプトからn個のMLSLスクリプト及びn個のテストプログラムが生成されている。
図6は、HLSLスクリプト、MLSLスクリプト及びテストプログラムの一例を示す図である。同図では、1つのHLSLスクリプトからn個のMLSLスクリプト及びn個のテストプログラムが生成されている。
図中のHLSLスクリプトh1は、LOOP構造の指定と、LOOP構造の組み合わせ方をパラメータ類によって指定する一例である。すなわち、LOOP構造の入れ子の数を1〜2、LOOP構造の並列数を1〜2と指定している。
MLSLスクリプトm1〜mnは、HLSLスクリプトh1に指定された複数通りの配置の仕方のうち、1つを記述するファイルである。例えば、従来技術の図2、図3で説明したスクリプト2a、3aに相当する。
MLSLスクリプトm1〜mnは、HLSLスクリプトh1に指定された複数通りの配置の仕方のうち、1つを記述するファイルである。例えば、従来技術の図2、図3で説明したスクリプト2a、3aに相当する。
テストプログラムt1〜tnは、MLSLスクリプトm1〜mnに1対1で対応するテストプログラムである。同図では、C言語のソースプログラムとして生成されている。
このように、プログラム生成装置1は、1つのHLSLスクリプトからn個のMLSLスクリプトを生成し、さらにn個のMLSLスクリプトからn個のテストプログラムを生成する。
このように、プログラム生成装置1は、1つのHLSLスクリプトからn個のMLSLスクリプトを生成し、さらにn個のMLSLスクリプトからn個のテストプログラムを生成する。
生成されたそれぞれのテストプログラムは、図5に示したコンパイラ10によりコンパイルされることにより機械語プログラムに変換される。この機械語プログラムは、コンパイラの動作検証のために、図5に示したターゲットコンピュータ(またはそのシミュレータ)11により実行される。なお、コンパイラ10は例えば、図4に示した外観のパーソナルコンピュータ上でコンパイラ・ソフトウェアを実行することにより実現される。また、ターゲットコンピュータ(またはそのシミュレータ)11は、汎用的なコンピュータや組み込みマイクロコンピュータにより制御される家電製品などである。例えば、DVD録画再生装置、STB(セットトップボックス)、デジタル・スチル・カメラ、デジタルビデオカメラなどである。これらのターゲットコンピュータ自身のハードウェアがまだ開発されていない場合は、そのシミュレータである。
<HLSLの構文>
図7は、HLSLスクリプトの構文を示す説明図である。同図のようにHSLSスクリプトは、パラメータ1{パラメータ2:パラメータ3・・・という構文を1つ以上記述することが可能な構文になっている。
図7は、HLSLスクリプトの構文を示す説明図である。同図のようにHSLSスクリプトは、パラメータ1{パラメータ2:パラメータ3・・・という構文を1つ以上記述することが可能な構文になっている。
パラメータ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型となる。
”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”であれば可能な限りの全数を意味する。
”parallel”は当該制御構造を並列に配置することを指定する。並列数は、parallelに後続するパラメータ3により指定される。
”number”は生成すべきMLSLスクリプト数(テストプログラム数でもある)を指定する。その数は、numberに後続するパラメータ3により指定される。後続するパラメータ3が数値ではなく文字列”all”であれば可能な限りの全数を意味する。
”depend”は、プログラム中に依存関係のあるプログラム文の設定を指定する。dependに後続するパラメータ3により、プログラム中の何箇所に設定すべきかが指定される。
”compare”は、定められた文字列などを出力する出力文の設定を指定する。本プログラム生成装置1により最終的に生成されたテストプログラムが、コンパイラ10によりコンパイルされ、さらにターゲットコンピュータ11により実行されるときに、出力文による出力と、MLSLスクリプト中のマーク位置とをプログラマが比較して動作を検証することができる。
”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個のブロック置きに依存関係又は出力文を設定することの指定としてもよい。
”N”の代わりに”all”と指定した場合は、可能な全ての数を意味する。
”N”(Nは整数)は、第1パラメータ”nest”、”parallel”に後続する場合はNを最大数として制御構造を配置することを指定する。”depend”、”compare”に後続する場合はN箇所に依存関係又は出力文を設定することを指定する。なお、この場合、N個のブロック置きに依存関係又は出力文を設定することの指定としてもよい。
”N”の代わりに”all”と指定した場合は、可能な全ての数を意味する。
例えば、”nest:1−2”は、指定された制御構造を入れ子にする階層数が1(入れ子なし)から2(入れ子が1段)であることを意味する。”parallel:1−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の構文>
MSLSスクリプトの具体例としては、図2中のスクリプト2a、図3中のスクリプト3a等がある。また、図1中の構造データもそれぞれMLSLスクリプトである。
MSLSスクリプトの具体例としては、図2中のスクリプト2a、図3中のスクリプト3a等がある。また、図1中の構造データもそれぞれMLSLスクリプトである。
このように、MLSLスクリプトは、制御構造を示す複数のパラメータの組み合わせとして記述され、制御構造の配置を一意に示す。MLSLスクリプト中のパラメータとしては、LOOP、if(if〜then、if〜then〜else)などがある。
<翻訳部2の詳細構成>
図8は、翻訳部2のより詳細な構成を示すブロック図である。同図のように翻訳部2は、パラメータ読取部21と、制御構造生成部22と、付加情報生成部23とを有する。
図8は、翻訳部2のより詳細な構成を示すブロック図である。同図のように翻訳部2は、パラメータ読取部21と、制御構造生成部22と、付加情報生成部23とを有する。
パラメータ読取部21は、HLSLスクリプト中に記述されたパラメータ1〜3を読み取って、制御構造生成部22に出力する。ただし、パラメータ1中、テストプログラムに付加すべき情報の指定(depend、compare)は、付加情報生成部23に出力する。
制御構造生成部22は、パラメータ読取部21によって読み取られたパラメータ1〜3について、パラメータ2に指定された配置の仕方に従って、パラメータ1に指定された制御構造を配置することにより、複数のMLSLスクリプトを生成する処理を行う。(例えば、図6に示したMLSLスクリプトm1、m2、mn参照)
制御構造生成部22は、パラメータ読取部21によって読み取られたパラメータ1〜3について、パラメータ2に指定された配置の仕方に従って、パラメータ1に指定された制御構造を配置することにより、複数のMLSLスクリプトを生成する処理を行う。(例えば、図6に示したMLSLスクリプトm1、m2、mn参照)
付加情報生成部23は、パラメータ読取部21によって読み取られたパラメータ中のテストプログラムに付加すべき情報の指定(depend、compare)に従って、制御構造生成部22によって生成された複数のMLSLスクリプトのそれぞれに対して付加情報を設定すべき位置にマークを付与する。このマークは、”depend”に対応するマークと、”compare”に対応するマークとがある。これらのマークが付与された後の複数のMLSLスクリプトのそれぞれは、生成部3により複数のテストプログラムに変換される。その際、MLSLスクリプト中の”depend”マークの位置に対応するテストプログラム中のそれぞれの位置には、生成部3によって、データ依存関係を有するプログラム文が設定される。”compare”マークの位置に対応するテストプログラム中のそれぞれの位置には、生成部3によって、出力文が設定される。これらのプログラム文又は出力文によって、プログラマは実行フローを検証することができる。
<パラメータ読取処理>
図9は、図8に示したパラメータ読取部21におけるパラメータ読取処理の詳細を示すフローチャートである。
図9は、図8に示したパラメータ読取部21におけるパラメータ読取処理の詳細を示すフローチャートである。
同図において、パラメータ読取部21は、HLSLスクリプトに記述されたパラメータ1が”if”であるか”LOOP”であるかを判定する(S201)。判定の結果”if”である場合、パラメータ読取部21は、それに後続するパラメータ2及びパラメータ3を読み取り、”pattern”、”nest”、”parallel”、”number”に関するパラメータ1、2及び3を制御構造生成部22に出力し、”depend”、”compare”に関するパラメータ2及び3を付加情報生成部23に出力する(S202)。判定の結果”LOOP”である場合、パラメータ読取部21は、それに後続するパラメータ2及びパラメータ3を読み取り、”nest”、”parallel”、”number”に関するパラメータ1、2及び3を制御構造生成部22に出力し、”depend”、”compare”に関するパラメータ2及び3を付加情報生成部23に出力する(S203)。
<制御構造生成処理>
図10は、図8に示した制御構造生成部22における制御構造生成処理を示すフローチャートである。
制御構造生成部22は、パラメータ読取部21から出力されたパラメータ1が”if”であるか”LOOP”であるかを判定し(S205)、判定結果が”LOOP”であればLOOP型の制御構造生成処理を行う。このLOOP型制御構造生成処理では、制御構造生成部22はパラメータで指定された範囲内でLOOP型の制御構造を複数通りに配置して、それぞれの配置に対応するプログラム構造を有する複数のMLSLスクリプトを生成する(S209)。
図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)。
<制御構造生成処理の詳細(if型)>
図11は、図10のステップS206に示したif型(if−then型)の制御構造生成処理の詳細を示すフローチャートである。
まず、制御構造生成部22は、パラメータ読取部21から出力された”parallel”のパラメータ3の数値(以下、その最大値をparallel数と呼ぶ)、”nest”のパラメータ3の数値(以下、その最大値をnest数と呼ぶ)に従う完全木を生成する(S210)。具体的には、制御構造生成部22は、ツリーの高さ(ノードの階層数)を(nest数)+1と決定し(S210a)、各ノードの子ノード数(ブランチ数)を(parallel数)決定し(S210b)、決定した高さ、ブランチ数に従った完全木を表すデータを生成する。
図11は、図10のステップS206に示したif型(if−then型)の制御構造生成処理の詳細を示すフローチャートである。
まず、制御構造生成部22は、パラメータ読取部21から出力された”parallel”のパラメータ3の数値(以下、その最大値をparallel数と呼ぶ)、”nest”のパラメータ3の数値(以下、その最大値をnest数と呼ぶ)に従う完全木を生成する(S210)。具体的には、制御構造生成部22は、ツリーの高さ(ノードの階層数)を(nest数)+1と決定し(S210a)、各ノードの子ノード数(ブランチ数)を(parallel数)決定し(S210b)、決定した高さ、ブランチ数に従った完全木を表すデータを生成する。
図12は、parallel:2、nest:2である場合に制御構造生成部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を1つ生成し(S212)、その高さが(nest数+1)でなければ再度部分木の生成に戻り(S213)、子ノードの最大数が(parallel数)でなければ再度部分木の生成に戻る(S214)。ここで戻る理由は、部分木がパラメータ(nest、parallel)で指定された数の制御構造(ノード)を有していないからである。
より詳しく説明すると、制御構造生成部22は、まず完全木からランダムに部分木Sを1つ生成し(S212)、その高さが(nest数+1)でなければ再度部分木の生成に戻り(S213)、子ノードの最大数が(parallel数)でなければ再度部分木の生成に戻る(S214)。ここで戻る理由は、部分木がパラメータ(nest、parallel)で指定された数の制御構造(ノード)を有していないからである。
さらに、制御構造生成部22は、当該部分木に対応するMLSLスクリプトが既に生成済であるか否かを判定し(S215)、生成済でなければ当該部分木に対応するMLSLスクリプトを生成する(S216)。
以上により1つの部分木が生成される。制御構造生成部22は、numberで指定された数の部分木が生成されるまで、上記処理(ループ1)を繰り返す。
以上により1つの部分木が生成される。制御構造生成部22は、numberで指定された数の部分木が生成されるまで、上記処理(ループ1)を繰り返す。
図13は、図12に示した完全木から生成される部分木に対応するMLSLスクリプトを示す図である。同図ではnumberとして”all”が指定された場合に生成される全ての部分木を示し、全部で9つのMLSLスクリプトが生成されている。同図においてMLSLスクリプトT1は完全木に対応する。MLSLスクリプトS1〜S8は、それぞれ部分木から1以上のノードが削除された部分木に対応している。
<制御構造生成処理の詳細(if−then−else型)>
図14は、図10のステップS206に示したif−then−else型の制御構造生成処理を示すフローチャートである。
同図のフローは、図11と比較して、ステップS210の代わりにS2101を有する点(つまりステップS210cの代わりにステップS210d及びS210eを有する点)と、ステップ216の代わりにステップ216aを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
図14は、図10のステップS206に示したif−then−else型の制御構造生成処理を示すフローチャートである。
同図のフローは、図11と比較して、ステップS210の代わりにS2101を有する点(つまりステップS210cの代わりにステップS210d及びS210eを有する点)と、ステップ216の代わりにステップ216aを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
ステップ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と指定している。それに対応する完全木において、ルートノード以外の全ノードは、内部に2つのノードを有する双子ノードとなっている。双子ノード内部の左ノードはif−then−else型の”then”に対応し、右ノードはelseに対応させている。
図15に、if−then−else型の制御構造を指定するHLSLスクリプトとそれに対応する完全木の一例を示す。同図のHLSLスクリプトh2は、(nest数)を2、(parallel数)を2と指定している。それに対応する完全木において、ルートノード以外の全ノードは、内部に2つのノードを有する双子ノードとなっている。双子ノード内部の左ノードはif−then−else型の”then”に対応し、右ノードはelseに対応させている。
図16は、制御構造生成部22に生成される部分木と、当該部分木から生成されるMLSLスクリプトの第1の例を示す。同図において、この双子ノードn1内の左ノードに2つの双子ノードn2、n3が接続されている。これに対応するMLSLスクリプトでは、双子ノードn1に対応するif−then−else文のthen側に、並列な2つの双子ノードn2、n3に対応する2つのif−then−else文が入れ子になっている。
図17は、制御構造生成部22に生成される部分木と、当該部分木から生成されるMLSLスクリプトの第2の例を示す。同図ルートノードの下に2つの双子ノードn4、n5が並列な2つのif−then−else文に対応する。
図18は、制御構造生成部22に生成される部分木と、当該部分木から生成されるMLSLスクリプトの第3の例を示す。同図の部分木は6つの双子ノードを有する。MLSLスクリプトにおいて双子ノードn6、n9に対応する2つのif−then−else文は並列である。双子ノードn6に対応するif−then−else文のthen側には2つの並列な双子ノードn7、n8に対応するif−then−else文が入れ子になっている。双子ノードn9に対応するif−then−else文のthen側には双子ノードn10に対応するif−then−else文が入れ子になり、else側には双子ノードn11に対応するif−then−else文が入れ子になっている。
このようにして、制御構造生成部22は、図16〜図18のように部分木に対応するMLSLスクリプトを生成する。
図18は、制御構造生成部22に生成される部分木と、当該部分木から生成されるMLSLスクリプトの第3の例を示す。同図の部分木は6つの双子ノードを有する。MLSLスクリプトにおいて双子ノードn6、n9に対応する2つのif−then−else文は並列である。双子ノードn6に対応するif−then−else文のthen側には2つの並列な双子ノードn7、n8に対応するif−then−else文が入れ子になっている。双子ノードn9に対応するif−then−else文のthen側には双子ノードn10に対応するif−then−else文が入れ子になり、else側には双子ノードn11に対応するif−then−else文が入れ子になっている。
このようにして、制御構造生成部22は、図16〜図18のように部分木に対応するMLSLスクリプトを生成する。
<制御構造生成処理の詳細(LOOP型)>
図19は、図10のステップS206に示したLOOP型の制御構造生成処理を示すフローチャートである。同図のフローは、図11と比較して、ステップ216の代わりにステップ216bを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
図19は、図10のステップS206に示したLOOP型の制御構造生成処理を示すフローチャートである。同図のフローは、図11と比較して、ステップ216の代わりにステップ216bを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
ステップS216bにおいて制御構造生成部22は、ステップS216と比べて、if−then型の制御構造の代わりにLOOP型の制御構造を生成する点のみ異なっている。すなわち、制御構造生成部22は、図12、13のようなMLSLスクリプト中の”if(){}”の表記の代わりに”LOOP{}”の表記にした複数のMLSLスクリプトを生成する。
なお、制御構造生成処理として制御構造が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マークは、データ依存関係を有する2つのプログラム文を設定すべき位置を指定する2つのマークペアである。
図20は、図8に示した付加情報生成部23における付加情報生成処理を示すフローチャートである。
付加情報生成部23は、パラメータ読取部21から出力されたパラメータ中に”depend”とそれに後続するパラメータ3が存在する場合(S220)、制御構造生成部22によって生成された複数のMLSLスクリプトのそれぞれに対して、パラメータ3で指定された数のマーク(以下dependマークと呼ぶ)を付加する(S221)。ここで、1つのdependマークは、データ依存関係を有する2つのプログラム文を設定すべき位置を指定する2つのマークペアである。
また、付加情報生成部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マークである。
図22は、付加情報生成部23によってcompareマークが付加されたMLSLスクリプトとテストプログラムの一例を示す図である。同図のMLSLスクリプトm11中の3つの”compare”は、それぞれcompareマークである。
<生成部の詳細構成>
図23は、生成部3のより詳細な構成を示すブロック図である。同図のように生成部3は、データ依存設定部31と、比較位置設定部32とを有し、MLSLスクリプトからコンパイラ10のコンパイル対象としてテストプログラムを生成する。本実施の形態ではテストプログラムはC言語のソースプログラムである。
図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マークの位置に出力文を付加する。
比較位置設定部32は、テストプログラムの生成に際して、compareマークの位置に出力文を付加する。
<データ依存設定処理フロー>
図24は、図23に示したデータ依存設定部31におけるデータ依存設定処理を示すフローチャートである。
同図のようにデータ依存設定部31は、MLSLスクリプト中の各ブロックについてステップS310〜S314の処理を行う。ここでブロックとは、途中から分岐することがない常に連続実行されるプログラムの単位をいう。つまり、ブロックの末尾の命令のみが分岐し、それ以外の命令から分岐が発生しない単位をいう。MLSLスクリプトでは、if、LOOPの制御構造で区切られた間の部分に相当する。
図24は、図23に示したデータ依存設定部31におけるデータ依存設定処理を示すフローチャートである。
同図のようにデータ依存設定部31は、MLSLスクリプト中の各ブロックについてステップS310〜S314の処理を行う。ここでブロックとは、途中から分岐することがない常に連続実行されるプログラムの単位をいう。つまり、ブロックの末尾の命令のみが分岐し、それ以外の命令から分岐が発生しない単位をいう。MLSLスクリプトでは、if、LOOPの制御構造で区切られた間の部分に相当する。
データ依存設定部31は、MLSLスクリプト中の当該ブロックにデータ依存マーク(dependマークのマークペアの一方)が設定されているか否かを判定する(S311)。設定されていないと判定された場合、データ依存設定部31は、テストプログラムにおける当該ブロックを構成するプログラム文としてランダムに代入文を生成し(S312)、設定されていると判定された場合には、データ依存設定部31は、MLSLスクリプト中のマークペアの他方がマークされたブロックを探し出し、テストプログラム中のブロックのペアに対して、データ依存関係を有する2つの代入文のひとつずつを生成する(S313)。なお、ステップS313において既にデータ依存関係を有する代入文が既に設定されている場合には、省略しても良い。
図21に示したテストプログラムp10は、データ依存設定部31によって設定されたデータ依存関係を有するプログラム文の一例である。同図のように、MLSLスクリプトm10中のマークペアAの位置に、データ依存関係を有する2つのプログラム文(代入文)”x=a+b;”と”y=x+c;”とが設定されている。この場合変数xを介在してこの2つのプログラム文がデータ依存関係にある。また、マークペアBの位置に、データ依存関係を有する2つのプログラム文”z=a+b;”と”k=z−d;”とが設定されている。この場合変数zを介在してこの2つのプログラム文がデータ依存関係にある。
<比較位置設定処理フロー>
図25は、図23に示した比較位置設定部32における比較位置設定処理を示すフローチャートである。
同図のように32は、MLSLスクリプト中の各ブロックについてステップS320〜S323の処理(ループ1)を行う。データ依存設定部31は、MLSLスクリプト中の当該ブロックに比較位置のマーク(compareマーク)が設定されているか否かを判定する(S321)。設定されていると判定された場合は、比較位置設定部32は、そのマーク位置に対応するテストプログラム中のブロックに、出力文を設定する(S322)。
図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構造、・・・)に対応させればよい。
なお、上記実施の形態では、テストプログラムとしてC言語のソースプログラムを生成する例を説明したが、C言語以外の高級言語でもよい。その場合、パラメータ1中のLOOP、ifは、当該高級言語に記述可能な制御構造(if構造、for構造、while構造、・・・)に対応させればよい。
また、上記実施の形態では、1つのHLSLスクリプトに1つのパラメータ1によって1つの制御構造が指定される場合を例に説明したが、1つのHLSLスクリプトに複数のパラメータ1を指定してもよいし、複数のパラメータ1により異なる制御構造を指定してもよい。例えば、if−then型を指定するパラメータ1とif−then−else型を指定するパラメータ1とが混在していてもよいし、LOOP構造を指定するパラメータ1とif−then−else型を指定するパラメータ1とが混在していてもよい。
また、上記実施の形態では、コンパイラ用のテストプログラムを生成しているが、コンパイラでなくともインタープリタ、アセンブラでもよいし、JAVA(R)やVisualBasic(R)等のスクリプト言語を解釈実行する仮想マシンをターゲットとしてもよい。
上記実施形態において制御構造を指定するパラメータ1としてLOOP、ifを説明したが、これ以外の制御構造を示すパラメータを含んでいてもよい。例えば、逐次構造を示すパラメータ(例えばsequence)、再帰呼び出し構造(例えばrecursive)、1対nの分岐を示すn分岐構造(n−branch)などである。
上記実施形態において制御構造を指定するパラメータ1としてLOOP、ifを説明したが、これ以外の制御構造を示すパラメータを含んでいてもよい。例えば、逐次構造を示すパラメータ(例えばsequence)、再帰呼び出し構造(例えばrecursive)、1対nの分岐を示すn分岐構造(n−branch)などである。
なお、上記実施の形態では、プログラム生成装置1に生成されたプログラムは開発中のコンパイラの動作検証のためのテストプログラムとしているが、開発中のターゲットコンピュータ11の動作検証に用いることができることは勿論である。
本発明は、複数のプログラムを生成するプログラム生成装置に適し、例えば、コンパイラの動作を検証するために多種多様なテスト用のプログラムの生成するプログラム生成装置に適している。
1 プログラム生成装置
1a 制御部
1b 表示装置
1c 入力装置
2 翻訳部
3 生成部
10 コンパイラ
11 ターゲットコンピュータ
21 パラメータ読取部
22 制御構造生成部
23 付加情報生成部
31 データ依存設定部
32 比較位置設定部
1a 制御部
1b 表示装置
1c 入力装置
2 翻訳部
3 生成部
10 コンパイラ
11 ターゲットコンピュータ
21 パラメータ読取部
22 制御構造生成部
23 付加情報生成部
31 データ依存設定部
32 比較位置設定部
Claims (29)
- 生成すべきプログラムの複数通りのプログラム構造を指定する第1スクリプトを受け付ける受付手段と、
前記第1スクリプトにより指定された複数通りのプログラム構造のうち互いに異なる1つのプログラム構造を記述する複数の第2スクリプトを生成するスクリプト生成手段と
を備えることを特徴とするプログラム生成装置。 - 前記第1スクリプトは、生成すべきプログラムにおける制御構造の複数通りの配置の仕方を示すことにより複数通りのプログラム構造を指定し、
前記各第2スクリプトは、制御構造を一意に配置したプログラム構造を記述し、
前記スクリプト生成手段は、第1スクリプトに指定された配置の仕方に基づいて制御構造を配置することにより前記複数の第2スクリプトを生成する
ことを特徴とする請求項1記載のプログラム生成装置。 - 前記制御構造は、ループ構造である
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記制御構造は、分岐構造である
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記は分岐構造は、if−then型分岐構造である
ことを特徴とする請求項4記載のプログラム生成装置。 - 前記は分岐構造は、if−then−else型分岐構造である
ことを特徴とする請求項4記載のプログラム生成装置。 - 前記第1スクリプトは、前記配置の仕方として前記制御構造の並列度に関する指定を含む
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記第1スクリプトは、前記配置の仕方として前記制御構造の入れ子に関する指定を含む
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記第1スクリプトは、前記配置の仕方として制御構造の並列度及び入れ子に関する指定を含む
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記第1スクリプトは、生成すべきプログラムの数の指定を含み、
前記スクリプト生成手段は、第1スクリプトにおいて指定された数の第2スクリプトを、第1スクリプトに指定された複数通りのプログラム構造からランダムに生成する
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記スクリプト生成手段は、第1スクリプトに指定された複数通りのプログラム構造の全てに対応する複数の第2スクリプトを生成する
ことを特徴とする請求項2記載のプログラム生成装置。 - 前記第1スクリプトは、さらに、プログラム中の複数箇所に特定のプログラム文を設定することを指示するパラメータを有し、
前記スクリプト生成手段は、第2スクリプトのそれぞれに対して、前記パラメータを示すマークを複数箇所に付与する
ことを特徴とする請求項1記載のプログラム生成装置。 - 前記特定のプログラム文は、文字列と変数の何れかを出力する出力文である
ことを特徴とする請求項12記載のプログラム生成装置。 - 前記特定のプログラム文は、データ依存関係を有する代入文ペアである
ことを特徴とする請求項12記載のプログラム生成装置。 - 前記第1スクリプトは、生成すべきプログラムに設定すべき制御構造を示す第1パラメータと、その制御構造の複数通りの配置の仕方を示す第2パラメータとを含み、
前記各第2スクリプトは、制御構造を一意に配置したプログラム構造を記述し、
前記スクリプト生成手段は、
第1スクリプトから第1及び第2パラメータを読み取る読み取り手段と、
読み取られた第1及び第2パラメータが示す制御構造及び配置の仕方に基づいて前記複数の第2スクリプトを生成する制御構造生成手段と
を有することを特徴とする請求項1記載のプログラム生成装置。 - 前記第1パラメータは、前記制御構造としてループ構造及び分岐構造の少なくとも1つを示し、
前記第2パラメータは、第1パラメータが示す制御構造を並列に設定すべき数的範囲及び当該制御構造を入れ子に設定すべき数的範囲の少なくとも一方を示す
ことを特徴とする請求項15記載のプログラム生成装置。 - 前記制御構造生成手段は、
第2パラメータに示される数的範囲の最大限の配置に対応する完全木を示す完全木データを生成する完全木生成手段と、
生成された完全木の部分木を示す複数の部分木データを生成する部分木生成手段と、
生成された各部分木が示す制御構造を一意に配置したプログラム構造を記述した第2スクリプトを生成する第2スクリプト生成手段と
を有することを特徴とする請求項16記載のプログラム生成装置。 - 前記完全木生成手段は、
前記第2パラメータに示される入れ子数的範囲の最大数に1を加算した値を、前記完全木のノードの階層数である高さと決定し、
前記第2パラメータに示される並列に設定すべき制御構造の数的範囲の最大数を、前記完全木の各ノードの子ノード数と決定し、
決定された高さと子ノード数に従うツリー構造データを前記完全木として生成し、
その際、第1パラメータがif−then−else型の分岐構造を示す場合には、ルートノード以外の各ノードを双子ノードとして生成し、双子ノード中の各ノードが決定された前記子ノード数の双子ノードを有するように前記完全木を生成する
ことを特徴とする請求項17記載のプログラム生成装置。 - 前記第1スクリプトは、さらに、データ依存関係の設定指示と設定すべきデータ依存関係の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第1スクリプト中のデータ依存関係の設定指示に応じて、制御構造生成手段で生成された第2スクリプトのそれぞれに、データ依存関係を設定すべき位置を示す依存マークを、指定された数に従って付与するマーク付与手段を有する
ことを特徴とする請求項15記載のプログラム生成装置。 - 前記マーク付与手段は、隣合う2つの基本ブロックにマークペアを前記依存マークとして付与する
ことを特徴とする請求項19記載のプログラム生成装置。 - 前記制御構造は、if−then−else型分岐構造であり、
前記マーク付与手段は、thenに対応する基本ブロック及びelseに対応する基本ブロックに前記マークペアを付与する
ことを特徴とする請求項19記載のプログラム生成装置。 - 前記第1スクリプトは、さらに、出力文の設定指示と設定すべき出力文の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第1スクリプト中の出力文の設定指示に応じて、制御構造生成手段で生成された第2スクリプトのそれぞれに対して、前記指定された数の基本ブロックにランダムに、出力文を設定すべき位置を示す出力マークを付与するマーク付与手段を有する
ことを特徴とする請求項15記載のプログラム生成装置。 - 前記第1スクリプトは、さらに、出力文の設定指示と設定すべき出力文の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第1スクリプト中の出力文の設定指示に応じて、制御構造生成手段で生成された第2スクリプトのそれぞれに対して、前記指定された数ずつの間隔を置いた基本ブロック毎に、出力文を設定すべき位置を示す出力マークを付与するマーク付与手段を有する
ことを特徴とする請求項15記載のプログラム生成装置。 - 前記プログラム生成装置は、さらに、
スクリプト生成手段によって生成された複数の第2スクリプトのそれぞれに対応するプログラムを生成するプログラム生成手段を備える
ことを特徴とする請求項1記載のプログラム生成装置。 - 生成すべきプログラムの複数通りのプログラム構造を指定する第1スクリプトを受け付ける受付ステップと、
前記第1スクリプトにより指定された複数通りのプログラム構造のうち互いに異なるに1つのプログラム構造を記述する複数の第2スクリプトを生成するスクリプト生成ステップと
を有することを特徴とするプログラム生成方法。 - プログラムを生成するためにコンピュータで実行される生成プログラムであって、
生成すべきプログラムの複数通りのプログラム構造を指定する第1スクリプトを受け付ける受付ステップと、
前記第1スクリプトにより指定された複数通りのプログラム構造に含まれる1つプログラム構造を記述する複数の第2スクリプトを生成する第1生成ステップと
をコンピュータに実行させることを特徴とする生成プログラム。 - プログラムを生成するためのプログラム生成装置において、1つのハイレベルスクリプトから複数のミドルレベルスクリプトに変換され、さらに複数のミドルレベルスクリプトから生成すべき複数のプログラムに変換される際に処理されるデータ構造を有するハイレベルスクリプト及びミドルレベルスクリプトを含むスクリプトであって、
前記ハイレベルスクリプトは、
生成すべきプログラムに設定すべき制御構造を示す第1パラメータと、その制御構造の複数通りの配置の仕方を示す第2パラメータと、第2パラメータの数的範囲を指定する第3パラメータとを含み、生成すべきプログラムにおける制御構造の複数通りの配置の仕方を示すことにより複数通りのプログラム構造を指定し、
前記ミドルレベルスクリプトは、
制御構造を示す複数の第4パラメータの組み合わせとして記述され、前記制御構造の複数通りの配置の仕方のうち1つの配置を示す
ことを特徴とするスクリプト。 - 前記ハイレベルスクリプトは、1つの第1パラメータに対応して複数の第2パラメータと第3パラメータとの組を有する
ことを特徴とする請求項27記載のスクリプト。 - 前記第2パラメータは、さらに、データ依存関係を有するプログラム文及び出力を指示するプログラム文の何れかの設定を指定する
ことを特徴とする請求項27記載のスクリプト。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN03147238.9A CN1567223A (zh) | 2003-07-09 | 2003-07-09 | 程序生成装置、方法及程序 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005032212A true JP2005032212A (ja) | 2005-02-03 |
Family
ID=33557743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003387156A Withdrawn JP2005032212A (ja) | 2003-07-09 | 2003-11-17 | プログラム生成装置、方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20050010898A1 (ja) |
JP (1) | JP2005032212A (ja) |
CN (1) | CN1567223A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009025449A (ja) * | 2007-07-18 | 2009-02-05 | Yamaha Corp | 電子音楽装置及びプログラム |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7673292B2 (en) * | 2005-01-11 | 2010-03-02 | International Business Machines Corporation | Auto conversion of tests between different functional testing tools |
GB2443264A (en) * | 2006-10-27 | 2008-04-30 | Ntnu Technology Transfer As | Integrity checking method for a device in a computer network, which controls access to data; e.g. to prevent cheating in online game |
US8589892B2 (en) * | 2010-11-21 | 2013-11-19 | International Business Machines Corporation | Verification of speculative execution |
US9733907B2 (en) * | 2012-10-30 | 2017-08-15 | Oracle International Corporation | System and method for testing compiler implementation using dynamic combinatorial test generation |
US9465591B2 (en) * | 2012-12-17 | 2016-10-11 | Unisys Corporation | Syntax language generator for compiler validation |
US20140366003A1 (en) * | 2013-06-07 | 2014-12-11 | Daniel James Stoker | System and Method for Identifying and Valuing Software |
JP2016064591A (ja) * | 2014-09-25 | 2016-04-28 | キヤノン株式会社 | 情報処理装置、その制御方法、プログラム。 |
US20180044973A1 (en) * | 2016-08-15 | 2018-02-15 | Louisiana-Pacific Corporation | Garage door re-facing system |
US10884906B2 (en) * | 2017-06-23 | 2021-01-05 | Ge Aviation Systems Llc | Generating scripts that facilitate execution of tasks within different run-time environments that utilize different languages and syntax |
US11061696B2 (en) * | 2019-01-22 | 2021-07-13 | Servicenow, Inc. | Extension points for web-based applications and services |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69032640D1 (de) * | 1989-09-05 | 1998-10-15 | Lsi Logic Corp | Logik-Kompilator zum Entwurf von Schaltungsmodellen |
US5768564A (en) * | 1994-10-07 | 1998-06-16 | Tandem Computers Incorporated | Method and apparatus for translating source code from one high-level computer language to another |
US6029002A (en) * | 1995-10-31 | 2000-02-22 | Peritus Software Services, Inc. | Method and apparatus for analyzing computer code using weakest precondition |
US5754760A (en) * | 1996-05-30 | 1998-05-19 | Integrity Qa Software, Inc. | Automatic software testing tool |
US5910895A (en) * | 1997-06-13 | 1999-06-08 | Teradyne, Inc. | Low cost, easy to use automatic test system software |
US6230317B1 (en) * | 1997-07-11 | 2001-05-08 | Intel Corporation | Method and apparatus for software pipelining of nested loops |
US6289502B1 (en) * | 1997-09-26 | 2001-09-11 | Massachusetts Institute Of Technology | Model-based software design and validation |
US5978574A (en) * | 1997-11-05 | 1999-11-02 | Hewlett-Packard Company | Formal verification of queue flow-control through model-checking |
US6360332B1 (en) * | 1998-06-22 | 2002-03-19 | Mercury Interactive Corporation | Software system and methods for testing the functionality of a transactional server |
US6862563B1 (en) * | 1998-10-14 | 2005-03-01 | Arc International | Method and apparatus for managing the configuration and functionality of a semiconductor design |
US6484134B1 (en) * | 1999-06-20 | 2002-11-19 | Intel Corporation | Property coverage in formal verification |
WO2001022228A1 (en) * | 1999-09-17 | 2001-03-29 | Nortel Networks Limited | System and method for producing a verification system for verifying procedure interfaces |
US6745160B1 (en) * | 1999-10-08 | 2004-06-01 | Nec Corporation | Verification of scheduling in the presence of loops using uninterpreted symbolic simulation |
US6681351B1 (en) * | 1999-10-12 | 2004-01-20 | Teradyne, Inc. | Easy to program automatic test equipment |
US20010037492A1 (en) * | 2000-03-16 | 2001-11-01 | Holzmann Gerard J. | Method and apparatus for automatically extracting verification models |
US6681386B1 (en) * | 2000-05-22 | 2004-01-20 | International Business Machines Corporation | Method, system, and program for parameter expansion, generation, and execution of scripts in a networked environment |
US6591403B1 (en) * | 2000-10-02 | 2003-07-08 | Hewlett-Packard Development Company, L.P. | System and method for specifying hardware description language assertions targeting a diverse set of verification tools |
US20040078674A1 (en) * | 2001-04-04 | 2004-04-22 | Bops, Inc. | Methods and apparatus for generating functional test programs by traversing a finite state model of an instruction set architecture |
US20030110474A1 (en) * | 2001-12-06 | 2003-06-12 | International Business Machines Corporation | System for coverability analysis |
US7024589B2 (en) * | 2002-06-14 | 2006-04-04 | International Business Machines Corporation | Reducing the complexity of finite state machine test generation using combinatorial designs |
US7197417B2 (en) * | 2003-02-14 | 2007-03-27 | Advantest America R&D Center, Inc. | Method and structure to develop a test program for semiconductor integrated circuits |
US7284237B2 (en) * | 2003-11-26 | 2007-10-16 | Sap Aktiengesellschaft | Testing flow control at test assertion level |
-
2003
- 2003-07-09 CN CN03147238.9A patent/CN1567223A/zh active Pending
- 2003-11-17 JP JP2003387156A patent/JP2005032212A/ja not_active Withdrawn
-
2004
- 2004-07-01 US US10/880,529 patent/US20050010898A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009025449A (ja) * | 2007-07-18 | 2009-02-05 | Yamaha Corp | 電子音楽装置及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
CN1567223A (zh) | 2005-01-19 |
US20050010898A1 (en) | 2005-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH07105012A (ja) | 言語処理プログラムのコンパイル処理方式 | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
JP2005032212A (ja) | プログラム生成装置、方法及びプログラム | |
JP2015084256A (ja) | コンピュータ環境における式の変換 | |
Harman | Scaling genetic improvement and automated program repair | |
JP2013518352A (ja) | コードにおける時間計算量およびフローの理解を高める方法および装置 | |
US7111278B1 (en) | Automated translation of a microprocessor opcode summary table to an architecture description language | |
Peng et al. | Automatic model refinement for fast architecture exploration [soc design] | |
US20090064092A1 (en) | Visual programming language optimization | |
JP7059757B2 (ja) | Api処理方法、端末、api処理プログラム | |
CN117785242A (zh) | 一种面向多处理器平台上嵌入式软件的构建方法 | |
CN109271237A (zh) | 仿真控制方法和装置 | |
JP5275087B2 (ja) | プログラム生成装置およびブロック線図生成装置 | |
JP2005032213A (ja) | プログラム生成装置 | |
Corbera et al. | A framework to capture dynamic data structures in pointer-based codes | |
JP2002091762A (ja) | プログラム生成装置 | |
O'Neill et al. | GEVA-grammatical evolution in Java (v1. 0) | |
JP2008003841A (ja) | ビルド処理方法、ビルド処理装置、及びプログラム | |
WO2007051634A2 (en) | Method for generating a simulation program which can be executed on a host computer | |
Barreteau et al. | OCEANS: Optimising compilers for embedded applications | |
JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 | |
JP5181788B2 (ja) | ソースプログラムの言語変換装置、方法及びプログラム | |
Foster et al. | Object-level recombination of commodity applications | |
Green et al. | The The C++ Workshop: Learn to write clean, maintainable code in C++ and advance your career in software engineering | |
Ermel et al. | Simulating algebraic high-level nets by parallel attributed graph transformation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061005 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20081027 |