JP5844347B2 - コンピュータプログラム生成装置 - Google Patents

コンピュータプログラム生成装置 Download PDF

Info

Publication number
JP5844347B2
JP5844347B2 JP2013272170A JP2013272170A JP5844347B2 JP 5844347 B2 JP5844347 B2 JP 5844347B2 JP 2013272170 A JP2013272170 A JP 2013272170A JP 2013272170 A JP2013272170 A JP 2013272170A JP 5844347 B2 JP5844347 B2 JP 5844347B2
Authority
JP
Japan
Prior art keywords
subtree
node
branch
statement
computer 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
Application number
JP2013272170A
Other languages
English (en)
Other versions
JP2015125751A (ja
Inventor
通和 兵頭
通和 兵頭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
OHTORI CORPORATION
Original Assignee
OHTORI CORPORATION
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by OHTORI CORPORATION filed Critical OHTORI CORPORATION
Priority to JP2013272170A priority Critical patent/JP5844347B2/ja
Priority to PCT/JP2014/084237 priority patent/WO2015099008A1/ja
Publication of JP2015125751A publication Critical patent/JP2015125751A/ja
Application granted granted Critical
Publication of JP5844347B2 publication Critical patent/JP5844347B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、コンピュータプログラム生成装置に関し、さらに詳しくは、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置に関する。
一般的なコンピュータプログラムの開発では、最初に、コンピュータプログラムの仕様書が作成される。プログラマが、作成された仕様書を解釈しその意味内容を把握して、C言語などのプログラミング言語により記述されたコンピュータプログラムを作成する。そして、作成されたコンピュータプログラムを検査して、作成されたコンピュータプログラムに含まれる瑕疵(バグ)などを取り除く作業が行なわれる。
しかし、プログラマがコンピュータプログラムを作成する場合、作成されたコンピュータプログラムは、プログラマの思い違いや不注意に由来する多くの瑕疵を含む。これらの瑕疵を取り除くために、非常に多くの時間を必要とするため、開発効率が一向に向上せず品質も向上しないという問題がある。
このため、コンピュータプログラムを作成する工程の一部を自動化することが提案されている。例えば、コンピュータプログラムの仕様書から、コンピュータプログラムを自動的に作成する技術が、特許文献1に開示されている。
特許文献1の方法では、予めプログラムの設計知識を入力して設計知識ベースを構築しておき、後にプログラム仕様を入力して構文木に変換する。変換された構文木から部分木を取り出して設計知識ベースを適用し、プログラムを生成する。この方法では、すべての場合にプログラム生成が成功するとは限らない。
特許文献1の方法が全ての場合に成功するとは限らないのは、プログラム生成の単位が、部分木と呼ばれる複数のプログラム文を含んだプログラム仕様であり、このプログラム仕様に対して設計知識と呼ばれる既知の小プログラム群のいずれかを適用し、プログラムを生成しているからである。登録されている設計知識の量が不足すれば、適用の対象外となるプログラム仕様が現われるのは必然である。
特許文献1の方法が不成功部分を残していることの根本原因は、コンピュータが最も不得手とする意味解釈を、設計知識と呼ばれる辞書に委ねたことである。膨大な量の設計知識を設計知識ベースに登録すれば、理論的には完全性が期待できると思われるが、設計知識を検索して適用する時間が膨大になるなどの時間的制約や、設計知識を具体的に収集する方法などの実際的な限界を考えれば、この方法は現実的ではない。また、プログラマがコンピュータプログラムを作成する上述の方法でプログラム作成が可能であったのは、人間が文書化された仕様書の内容や目的を理解し、かつ適切に判断する能力を持っているからである。このような能力を持たないコンピュータプログラムにプログラム仕様を解読させるのは、本来的に無理である。プログラム仕様を意味解釈する行為は、複数の文からなる文脈依存の文章の意味を解釈することに相当して、人間以外の機械には不可能な行為である。特許文献1のみならず多くの先行技術がプログラム仕様を入力してその意味を解釈し、解釈した結果に基づいてプログラム生成を試みているが、いずれも生成不可能な場面に遭遇するというプログラム生成の限界性に直面している。従って、特許文献1のように、コンピュータに意味解釈を実行させてコンピュータプログラムを生成する方法では、コンピュータプログラムの開発効率の向上に限界がある。
特開平05−181651号公報
本発明の目的は、コンピュータプログラムの開発効率を向上することができるコンピュータプログラム生成装置を提供することである。
本発明によるコンピュータプログラム生成装置は、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置である。このコンピュータプログラム生成装置は、用語データベースと、文法データベースと、入力部と、生成部とを備える。用語データベースは、ユーザによって定義された用語と、用語に対応する識別子とを記憶する。文法データベースは、プログラミング言語の文法に従って形成される木構造であって、プログラミング言語に用いられる命令文の構成要素を格納するノードを含む木構造を有する。入力部は、用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部は、用語データベースを検索して入力部で入力された用語に対応する識別子を読み出し、文法データベースを検索してノードから構成要素を読み出し、読み出された識別子及び構成要素を配列することにより命令文を生成する。
この発明によれば、入力されたコンピュータプログラムのアルゴリズムに従って、所定のプログラミング言語に用いられる命令文が生成される。生成された命令文を含むコンピュータプログラムのアルゴリズムは入力されたアルゴリズムと同じであるため、このコンピュータプログラムは、ユーザの意図と異なる動作を行うことがない。従って、コンピュータプログラムの開発効率を向上させることができる。
好ましくは、入力部は、プログラミング言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する。
ユーザは、命令の選択する操作と、選択した命令に用いられる用語を入力することにより、アルゴリズムを入力することができる。ユーザは、アルゴリズムの記述に用いる所定の言語や、所定のプログラミング言語を覚えることなく、コンピュータプログラムを生成することができる。
好ましくは、命令文は、演算式と、変数と、代入文定義子とを含む代入文を含む。代入文定義子は、演算式の結果を変数に代入することを定義する。文法データベースは、代入文定義部分木と、変数部分木と、演算式部分木とを含む。代入文定義部分木は、代入文定義子を定義する部分木であって、代入文定義子を格納するノードを含む。変数部分木は、変数を定義する部分木であって、変数を格納するノードを含む。演算式部分木は、演算式を定義する部分木であって、演算式の構成要素を格納するノードを含む。生成部は、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航する。
生成部が、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航することにより、代入文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の代入文は、文法エラーを含まないため、開発効率を向上させることができる。
好ましくは、命令文は、分岐判定式と、命令句と、分岐文定義子とを含む分岐文を含む。命令句は、分岐判定式が満たされる場合に実行される命令を指示する。分岐文定義子は、命令文が分岐命令であることを示す。文法データベースは、判定式部分木と、命令句部分木と、分岐文定義部分木とを含む。判定式部分木は、分岐判定式を定義する部分木であって、分岐判定式の構成要素を格納するノードを含む。命令句部分木は、命令句を定義する部分木であって、命令句の構成要素を格納するノードを含む。分岐文定義部分木は、分岐文定義子を定義する部分木であって、分岐文定義子を格納するノードを含む。生成部は、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航する。
生成部が、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航することにより、分岐文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の分岐文は、文法エラーを含まないため、開発効率を向上させることができる。
本発明の実施の形態に係るコンピュータプログラム生成装置のハードウェア構成を示す機能ブロック図である。 図1に示すコンピュータプログラム生成装置のソフトウェア構成を示すブロック図である。 図1に示すコンピュータプログラム生成プログラムのフローチャートである。 図1に示す用語データベースの一例を示す図である。 図1に示すモニタに表示されるアルゴリズム入力画面の初期画面を示す図である。 ユーザによる命令の選択と、選択された命令に用いられる用語の入力を受け付けた後の図5に示すアルゴリズム入力画面を示す図である。 図1に示す代入文木の構造を示す図である。 図1に示す分岐文木の構造を示す図である。 図6に示すインタフェースに入力される自己のラベルと、自己のラベルから変換された自ラベルとの対応を示すテーブルである。 図2に示すコンピュータプログラム生成処理のフローチャートである。 図10に示す命令文生成処理のフローチャートである。 図7に示す演算式部分木の構造の変形例を示す図である。
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
[1.プログラム生成装置の構成]
図1は、本実施の形態に係るコンピュータプログラム生成装置(以下、「生成装置」と略して記載する。)1のハードウェア構成を示す機能ブロック図である。なお、図1において、ハードウェアの他に、生成装置1が使用するデータ、プログラム等を示している。
図1を参照して、生成装置1は、所定のプログラミング言語により記述されるコンピュータプログラム24を生成する。本実施の形態において、「コンピュータプログラム」とは、生成装置1により生成されたプログラムを意味する。本実施の形態では、所定のプログラミング言語は、C言語である。つまり、生成装置1は、ユーザにより入力されたアルゴリズムに従ってC言語の命令文を生成することにより、コンピュータプログラム24を生成する。
生成装置1は、例えば、PC(パーソナルコンピュータ)である。PCは、後述するコンピュータプログラム生成プログラム21(以下、「生成プログラム21」と略して記載する。)がインストールされることにより、生成装置1として機能する。なお、PCは、生成装置1として動作する際に、HDD14に予め保存された文法データベース22及び用語データベース23を使用する。文法データベース22及び用語データベース23の詳細については、後述する。
生成装置1は、CPU(Central Processing Unit)11と、RAM(Random Access Memory)12と、操作部13と、モニタ14と、HDD(Hard Disk Drive)15とを備える。
CPU11は、HDD15に格納されたプログラムをRAM12にロードし、ロードされたプログラムを実行して生成装置1を制御する。RAM12は、生成装置1のメインメモリである。
操作部13は、マウス及びキーボードであり、ユーザによる操作を受け付ける。
モニタ14は、例えば、液晶ディスプレイであり、CPU11によるプログラムの実行結果を表示する。
HDD15は、生成プログラム21と、文法データベース22と、用語データベース23と、コンピュータプログラム24とを記憶する。
文法データベース22は、C言語の文法に従って形成される木構造であって、C言語に用いられる命令文の構成要素を格納する葉ノードを含む木構造を有する。文法データベース22は、C言語における各々の命令文に対応する複数の木構造を有する。本実施の形態では、文法データベース22は、代入文木3と、分岐文木4とを含む。代入文木3は、C言語に用いられる代入文の文法に従って形成される木構造のデータである。分岐文木4は、C言語に用いられる二値論理に基づく分岐文(以下、単に「分岐文」と呼ぶ。)の文法に従って形成される木構造のデータである。代入文及び分岐文の定義、代入文木3及び分岐文木4の詳細は、後述する。
用語データベース23は、ユーザによって定義された用語と、用語に対応する識別子とを対応付けて記憶する。識別子は、用語に1対1に対応する情報であり、C言語用の命令文において変数、定数、関数として用いられる記号列である。用語及び識別子の定義については、後述する。
生成プログラム21は、ユーザが生成したいコンピュータプログラムのアルゴリズムの入力を受け付けるためのインタフェースをモニタ14に表示し、インタフェースを介して入力されたアルゴリズムに従ってC言語用の命令文を生成する。生成プログラム21の動作の詳細については、後述する。
図2は、生成装置1におけるソフトウェア構成を示す機能ブロック図である。図2を参照して、生成装置1は、入力部61と、知識ベース62と、生成部63とを含む。入力部61及び生成部63は、生成プログラム21により実現される機能部である。知識ベース62は、文法データベース22及び用語データベース23を含む。
入力部61は、用語データベース23に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部63は、用語データベース23を検索して入力部61で入力された用語に対応する識別子を読み出し、文法データベース22を検索して葉ノードから構成要素を読み出す。生成部63は、読み出された識別子及び構成要素を配列することによりC言語の命令文を生成する。
[2.生成装置1の基本思想]
コンピュータプログラムを生成するにあたり、最初に、ユーザは、要求仕様及びアルゴリズムを決定する。
要求仕様とは、問題解決のための人間の要求事項もしくは意思表明の内容である。要求仕様の作成は、人間に限られる。アルゴリズムは、問題解決の具体的方法すなわち機械的に実行できる手続のことである。生成装置1を用いたコンピュータプログラムの生成にあたり、アルゴリズムの決定は人間に限るものとする。要求仕様は、人間要求の発露であるため、コンピュータが代行することが不可能な、人間の専決事項である。また、アルゴリズムが人間要求を実現するための具体的な方法であることから、アルゴリズムの決定も人間の専決事項である。
生成装置1は、人間の専決事項であるアルゴリズムの決定に関与しない。生成装置1を用いたコンピュータプログラムの作成では、内容を扱う系(内容系)を人間が分担し、形式を扱う系(形式系)を生成装置1が分担する。形式系は、内容を一切取り除いて、機械的な操作が可能な体系を指す。つまり、生成装置1は、人間の専決事項である要求仕様及びアルゴリズムの意味解釈を実行しない。
次に、要求仕様及びアルゴリズムの記述方法について説明する。本実施の形態では、要求仕様及びアルゴリズムを記述するための最小の記述対象は、問題解決のための「場合分け」と「演算式」の二種類とする。数理論理学の教えによれば、現在の数学上のほとんどの命題は一階述語論理で記述できることが経験的に知られており、要求仕様の表現手段として場合分けと演算式の二つに要素還元することは自然な帰結である。一方、プログラムに関する構造化定理によれば、コンピュータプログラムは順処理、分岐処理、反復処理の三種類の制御文で記述でき、さらに反復処理は順処理と分岐処理の組み合わせで記述できるとされている。なお、実用的なコンピュータプログラム作成の範囲内なら、一階述語論理で十分である。
上記の理論的背景に裏付けられて、場合分けと演算式の二種類に構造化定理の結果を組み合わせれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現するなら、代入文と分岐文に要素還元できると結論づけられる。代入文とは、演算式の結果をある名称を持った変数に記憶させておくことに相当し、分岐文とは、最も素朴で単純な二値論理に基づく場合分けに相当する。
さらに、要求仕様及びアルゴリズムを記述する際に、関数呼出を用いてもよい。関数呼出は、ひとまとまりの要求仕様であり、また、ひとまとまりのアルゴリズムに相当する。以下、関数呼出を要求仕様及びアルゴリズムの記述に利用できる理由を説明する。
コンピュータプログラムは、計算可能関数にその理論的基礎を置く。本実施の形態では、計算可能関数の中の原始帰納的(再帰的)関数を基礎理論とする。原始帰納的関数は、ゼロ関数、後者関数、射影関数の3つの初期関数を出発点として、関数合成と原始帰納法を組み合わせながら、計算可能な関数を構成するものと教えている。本実施の形態では、この考え方も最大限に尊重するものとする。初期関数に相当するコンピュータプログラムを「初期プログラム」と呼ぶなら、初期プログラムはOS(オペレーティングプログラム)やプログラミング言語が用意する「システム関数」と、生成装置1が独自に用意する「基本関数」である。基本関数とは、最も基礎的な働きをするプログラムであるとする。上記の教えに従えば、一つのプログラム関数を形成するとき、すでに定義された関数が新しい関数の関数要素となることが示されているものと理解される。この教えは、プログラムの中に「関数呼出」を必要機能とするものである。
以上のことを総合すれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現すると、代入文、分岐文、及び関数呼出の、3種類の記述文であることが結論づけられる。要求仕様及びアルゴリズムの記述において、上記の三種類の文を基本的な記述文とする。以上の結論は、要求仕様及びアルゴリズムが、最も少ない言葉で記述できることを保証するものである。最も少ない言葉とは、ここでは最も少ない指令(命令)と解釈されるものである。
なお、本実施の形態では、代入文及び分岐文を用いたコンピュータプログラム24の生成について詳しく説明する、上述のように、関数呼出は、ひとまとまりのアルゴリズムであるため、関数呼出によって用いられる関数のアルゴリズムも、代入文及び分岐文により記述可能であるためである。
次に、アルゴリズムの入力の際に用いられる用語と、用語データベース23において用語に対応付けられる識別子について説明する。
要求仕様を記述する場合にも、アルゴリズムを記述する場合にも、いずれの場合も言葉を使用して記述する。問題解決の対象となる世界を対象世界と呼ぶならば、対象世界を記述する言葉は、その世界固有の用語である。今後は、この意味を込めて「用語」と言う言葉を使用する。どの用語を使用するかは、人間が決定する。用語を決定する人間は、対象世界に所属する者であり、生成装置1を使用する人間である。用語の意味内容を十分に理解した人間が、用語を収集し命名するものとする。上記の方法で収集された用語は、人間が判断できる情報を含んでいると言う意味で、内容系に属するものと解釈できる。一方で、用語は形式系である生成装置1の記号に変換されなければならない。形式系は、意味内容を取り払った記号を取り扱う体系であるからである。本実施の形態では、内容系の用語を一定の規則に従って記号化するものとし、記号化された用語を「識別子」と呼ぶ。このとき本実施の形態においては、用語を挟んで内容系と形式系が併存する構図が描かれる。内容系の用語と形式系の識別子が、同一記述対象の上で併存する構図である。人間は用語によって対象世界における記述対象の意味内容を把握し、プログラム生成装置は識別子によって形式系における記述対象を把握する。内容系と形式系の接点が、用語および識別子の上に出現する。内容系と形式系の二面性の設定である。
[3.生成プログラム21の処理]
図3は、図1に示す生成プログラム21のフローチャートである。図3を参照して、生成プログラム21を実行する生成装置1の動作を説明する。なお、生成プログラム21が図3に示す処理を開始する前に、文法データベース22及び用語データベース23が、HDD15に保存される。
最初に、生成装置1は、アルゴリズム入力用のインタフェースをモニタ14に表示して、用語データベース23に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける(ステップS1)。ステップS1の処理は、図2に示す入力部61により実行される処理に対応する。
ユーザは、代入文と分岐文とで記述されたコンピュータプログラムのアルゴリズムを前もって準備する。このアルゴリズムで用いられる代入文及び分岐文は、アルゴリズム記述用の所定の言語に基づいて作成しなくてもよく、ユーザが理解できるものであればよい。従って、ユーザは、自然言語で記述される用語を含むアルゴリズムを準備すればよく、アルゴリズムそのものを自然言語で記述してもよい。
インタフェースに入力されるアルゴリズムにおいて、演算式や分岐判定式の演算子は、ユーザが日常の算術計算等で用いられるものである。従って、アルゴリズムを入力したユーザ以外のユーザでも、インタフェースに入力されるアルゴリズムの内容を直感的に理解することができる。
生成装置1は、プログラムの生成指示を受け付けた場合(ステップS2においてYes)、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム24を生成する(ステップS3)。ステップS3の処理は、図2に示す生成部63により実行される処理に対応する。
具体的には、生成装置1は、用語データベース23を検索して、インタフェースに入力された用語に対応する識別子を読み出し、文法データベース22を検索して葉ノードから構成要素を読み出す。そして、生成装置1は、読み出された識別子及び構成要素を配列することにより、C言語の命令文を生成する。
以下、生成プログラム21の処理をさらに詳しく説明する。ステップS1を説明する前に、用語データベース23について説明する。
[3.1.用語データベース23]
図4は、用語データベース23の一例を示す図である。図4を参照して、用語データベース23は、リレーショナル型であり、1つのテーブルを有する。
用語データベース23において、各行が1つのレコードに対応する。各レコードは、位置、用語、識別子、型、配列次元数のフィールドを有する。
位置は、用語データベース23において用語が登録されている場所を示し、各レコードに固有の情報である。用語は、ユーザによって定義され、上述のように、ユーザがその意味を理解できるように自然言語で記述される。識別子は、用語に1対1で対応する記号列であり、C言語の命令文の作成に用いられる。図4に示す用語データベース23に登録された識別子は、C言語の命令文において、変数として用いられる。型は、コンピュータプログラム24における識別子のデータ型を示し、整数型、実数型、文字列型などが記録される。配列次元数は、識別子が配列を示す変数として用いられるか否かを示す。配列次元数が0であれば、対応する識別子は、単一変数として用いられる。配列次元数が1以上であれば、対応する識別子は、配列次元数に対応する次元の配列(添字付変数)として用いられる。
例えば、識別子「V001」は、ユーザによって定義された用語「温度測定値」に対応する。識別子「V001」のデータ型は、実数型であり、配列次元数が0であるため単一変数として使用されることがわかる。
なお、用語データベース23において、型及び配列次元数が記録されていなくてもよい。型及び配列次元数は、識別子がコンピュータプログラムにおいて変数として用いられる際の属性を示す情報であるため、用語の定義に直接影響しないためである。この場合、識別子の属性を定義するデータベースを別途準備し、HDD15に格納するようにすればよい。
[3.2.アルゴリズム入力]
図5は、モニタ14に表示されるアルゴリズム入力用のインタフェース5(アルゴリズム入力画面)の初期画面を示す図である。
インタフェース5は、メニューバー51と、行番号欄52と、ラベル入力欄53と、文記述欄54と、文名称欄55とを有する。インタフェース5がモニタ14に最初に表示されたとき、行番号欄52と、ラベル入力欄53と、文記述欄54と、文名称欄55とは、全て空欄である。
メニューバー51は、C言語に用いられる複数の命令のうち、アルゴリズムに用いられる命令(代入文、分岐文)を表示する。開始文、終了文は、アルゴリズムの開始、終了を宣言する文である。関数呼出文は、知識ベース62に登録された関数の呼び出しに用いられる。なお、図2では、関数が登録されたデータベースの表示を省略している。ユーザは、メニューバー51を操作することにより、アルゴリズムで用いられる命令を選択する。
文記述欄54は、メニューバー51により選択された命令に用いられる用語や、選択された命令に用いられる演算式等を記述するための領域である。行番号欄52は、文記述欄54に入力されたアルゴリズムの命令の位置を示す行番号を記述するための領域である。ラベル入力欄53は、文記述欄54に入力されたアルゴリズムの命令を特定するラベル(自己のラベル)を入力するための領域である。文名称欄55は、文記述欄54に入力されたアルゴリズムの命令の種類を示す情報の表示に用いられる。
以下、アルゴリズムの入力方法について詳しく説明する。図6は、ユーザにより命令の選択が行われ、選択された命令に用いられる用語及び演算式の入力が行われた後のインタフェース5を示す図である。
ユーザは、メニューバー51に登録されている開始文、終了文、代入文、分岐文、及び関数呼出文のいずれかから1つを選択する操作を行う。
ユーザは、アルゴリズムの入力を開始する場合、メニューバー51から開始文を選択する操作を行う。生成装置1は、この操作に応じて、行番号欄52に行番号「001」を追加し、行番号「001」に対応する文記述欄54の位置に、「開始」と記述する。これにより、アルゴリズムが行番号「001」から開始されたことを、ユーザは容易に認識できる。
次に、ユーザは、メニューバー51から代入文を選択する操作を行う。生成装置1は、この操作により、C言語に用いられる複数の命令のうち、アルゴリズムで用いられる命令(代入文)の選択を受け付ける。
生成装置1は、行番号欄52に行番号「002」を追加し、アルゴリズムの代入文の入力に用いられるテンプレート541を、文記述欄54に表示する。テンプレート541は、行番号「002」に対応する位置に配置され、左辺(単一変数)に対応するテキストボックス541aと右辺(演算式)に対応するテキストボックス541bとを含む。テキストボックス541aと541bとの間には、等号(=)が表示される。また、生成装置1は、文名称欄55において行番号「002」に対応する位置に、代入文に対応するテンプレート541が表示されていることを示す「式と代入」を表示する。
ユーザは、用語を含む演算式をテキストボックス541bに入力し、入力された演算式の結果が代入される用語をテキストボックス541aに入力する。テキストボックス541aには、用語「温度測定値」が入力される。テキストボックス541bには、「センサ出力値×補正係数+オフセット(添字A)」が演算式として入力される。入力された演算式は、用語として、「センサ出力値」、「補正係数」、「オフセット」及び「添字A」を含んでいる。ここで、「オフセット(添字A)」は、配列を示す。「オフセット」は、配列名を示し、「添字A」は、配列の要素番号として用いられる。
また、生成装置1は、ラベルが入力されるテキストボックス531をラベル入力欄53に表示する。テキストボックス531は、行番号「002」に対応する位置に配置される。
ユーザは、行番号「002」で記述される代入文のラベル「温度取得」を、テキストボックス531に入力する。テキストボックス531に入力されるラベルは、行番号「002」で記述される代入文の内容をユーザが理解できるものであればよい。なお、ラベルの入力は任意であり、ユーザは、テキストボックス531を空欄のままにしてもよい。以下、ユーザによりラベル入力欄53に入力されるラベルを「自己のラベル」と呼ぶ。
これにより、行番号「002」に対応する代入文で用いられる用語及び演算式の入力が完了する。
次に、ユーザは、メニューバー51から分岐文を選択する操作を行う。生成装置1は、この操作に応じて、行番号欄52に行番号「003」を追加する。生成装置1は、ラベルが入力されるテキストボックス532をラベル入力欄53に表示する。テキストボックス532は、行番号「003」に対応する位置に配置される。ユーザは、行番号「003」に対応する自己のラベルとして、「温度判定」をテキストボックス532に入力する。
また、生成装置1は、分岐文で用いられる分岐判定式及び自己のラベルの入力に用いられるテンプレート542を文記述欄54に表示する。テンプレート542は、行番号「003」に対応する位置に配置され、テキストボックス542a及び542bを含む。テキストボックス542aは、分岐判定式の入力に用いられる。テキストボックス542bは、分岐判定式が満たされる場合に実行される命令句を示す自己のラベル(分岐先ラベル)の入力に用いられる。
ユーザは、テキストボックス542aに、「温度測定値≦内部温度」を分岐判定式として入力し、テキストボックス542bに、「温度記録」を分岐先ラベルとして入力する。入力される分岐判定式は、用語と算術演算等で一般的に用いられる演算子とにより記述される。入力された分岐先ラベル「温度記録」に対応するアルゴリズムは、行番号「003」に対応する分岐文に関する情報の入力が終了した後に、ユーザにより入力される。
図6に示していないが、ユーザが、メニューバーから関数呼出文を選択した場合、生成装置1は、この操作に応じて、行番号欄52に新たな行番号を追加する。生成装置1は、代入文及び分岐文が選択された時と同様に、自己のラベルが入力されるテキストボックスをラベル入力欄53に配置し、呼出対象の関数名を入力するためのテキストボックスを含むテンプレートを文記述欄54に配置する。ユーザは、テンプレート中のテキストボックスに、入力中のアルゴリズムで使用する関数名(用語)を入力する。なお、アルゴリズムで使用する関数名(用語)と、生成装置1が使用する識別子とは、知識ベース62において予め対応付けられている。
このように、ユーザは、予め作成したアルゴリズムに従って、アルゴリズムに用いられる代入文、分岐文、及び関数呼出文の入力を繰り返す。
最後に、ユーザは、メニューバー51から終了文を選択する操作を行うことにより、アルゴリズムの終了を宣言する。生成装置1は、この操作に応じて、行番号欄52に新たな行番号を追加し、追加された行番号に対応する文記述欄54に、「終了」と記述する。これにより、アルゴリズムの入力が終了する。
このように、生成装置1は、コンピュータプログラムのアルゴリズムの入力を受け付ける際に、C言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付ける。これにより、ユーザは、C言語などのプログラミング言語や、アルゴリズムを記述するための言語を覚えなくても、アルゴリズムを入力することができる。
また、アルゴリズムの入力の際に、演算式や分岐判定式に用いられる演算子は、特定のプログラミング言語により定義された演算子でなく、人間が一般的な演算を行う際に用いられる演算子である。従って、ユーザは、インタフェース5に入力されたアルゴリズムを、直感的に理解できる。
[4.文法データベース22]
生成装置1は、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム24を生成する(ステップS3)。このとき、生成装置1は、文法データベース22が有する代入文木3及び分岐文木4を参照して、C言語に用いられる命令文を生成する。以下、代入文木3及び分岐文木4の構造について詳しく説明する。
[4.1.代入文木3の構造]
図7は、代入文木3の構造を示す図である。図7を参照して、代入文木3は、C言語に用いられる代入文の文法に従って形成される木構造であり、ノード300〜322を有する。ノード300は、図7に示す木構造が代入文木3であることを示す根ノードである。
ノード303、305、309、311、313、315、316、318、320、及び322は、葉ノードである。C言語に用いられる代入文の構成要素は、代入文木3内の葉ノードに格納される。
葉ノードにおいて、ダブルクォーテーションで囲まれた記号(“:”、“=”、“;”)は、C言語における命令文において、一定の表現である部分(固定部分)を示す。ダブルクォーテーションで囲まれた記号が記載された葉ノードは、この記号を初期値として格納しており、固定部分は変更されない。
先頭にアンパサンド(&)が付されている葉ノードは、ユーザにより定義された用語から変換された識別子や、ユーザにより入力された自己のラベルから変換された自ラベルが格納されることを示す。つまり、先頭にアンパサンド(&)が付されている葉ノードに格納される構成要素は、ユーザにより入力される入力情報により変化する部分(変化部分)である。先頭にアンパサンド(&)が付されている葉ノードには、ユーザにより入力された用語に対応する識別子が後で格納されるが、この点については、後述する。分岐文木4の構造を示す図(図8参照)における葉ノードの表記も、上記と同様である。
代入文木3において、子孫を有するノード(ノード301、302など)は、子孫ノードがC言語に用いられる代入文のどの構成要素に関連したノードであるかを定義するノードである。従って、子孫ノードを有するノードには、C言語で用いられる代入文の構成要素は格納されない。分岐文木4でも同様である。
C言語で用いられる代入文は、以下のように記述される。
自ラベル:単一変数=演算式;
C言語で用いられる代入文は、ラベル句(「自ラベル:」の部分)と、代入節(「単一変数=演算式」の部分)と、セミコロン記号「;」とにより構成される。代入節は、演算式と、単一変数と、演算式の結果を変数に代入することを定義する代入文定義子「=」とを含む。
代入文木3は、ラベル句を定義する部分木(ラベル句部分木31)と、代入節を定義する部分木(代入節部分木32)と、セミコロン記号を定義する部分木(セミコロン部分木33)とを有する。
ラベル句部分木31は、ノード301〜ノード305により構成される。ノード301は、ラベル句部分木31の根であり、ラベル句部分木31を定義する。
ノード302は、C言語に用いられる自ラベルを定義するノードであり、自ラベルを格納するノード303を子ノードとして有する。自ラベルは、ユーザがインタフェース5に入力した自己のラベルから生成される。アルゴリズムの代入文に付された自己のラベルは、対象世界を記述する用語であるため、形式系の記号列に変換される。このため、自己のラベルは、生成装置1により自ラベルに変換された上で、ノード303に格納される。
ノード304は、ラベル句に含まれるコロン記号を定義するノードである。コロン記号を格納するノード305(葉ノード)は、ノード304の子である。
代入節部分木32は、ノード306〜320により構成される。ノード306は、代入節部分木32の根であり、代入節部分木32を定義する。代入節部分木32は、代入節の構成に応じて、変数部分木3aと、代入文定義部分木3bと、演算式部分木3cとを有する。
変数部分木3aは、演算式の結果が入力される単一変数を定義する部分木であり、単一変数を格納する葉ノードを含む。
ノード308及び309は、単一変数が単純変数である場合に用いられる。ノード308は、単純変数を定義するノードである。ノード309は、ユーザにより単一変数として定義された用語に対応する識別子を格納する葉ノードである。
ノード310〜316は、単一変数が添字付変数として記述される場合に用いられる。ノード310は、添字付変数を定義するノードである。ノード311は、配列名に対応する識別子を格納する葉ノードである。ノード312は、配列要素を定義するノードである。ノード313は、C言語において、配列要素の始まりを示す左大括弧記号を格納する葉ノードである。ノード316は、C言語において、配列要素の終わりを示す右大括弧記号を格納する葉ノードである。ノード314は、添字変数(配列の要素番号)を定義するノードである。ノード315は、インタフェース5において、ユーザが添字変数として指定した用語に対応する識別子を格納する葉ノードである。
代入文定義部分木3bは、代入文定義子「=」を定義する部分木である。ノード317は、代入文定義部分木3bの根である。ノード318は、代入文定義子「=」を格納する葉ノードである。
演算式部分木3cは、C言語に用いられる代入文における演算式を定義する部分木である。ノード319が、演算式部分木3cの根である。ノード320は、葉ノードであり、アルゴリズムの代入文の右辺(テキストボックス541b)に入力された演算式がC言語の文法に従って変換された演算式を格納する。演算式の変換の詳細については、後述する。
セミコロン部分木33は、ノード321及び322により構成される。ノード321は、セミコロン部分木33の根であり、セミコロン部分木33を定義する。ノード322は、セミコロン記号を格納する。
[4.2.分岐文木4の構造]
図8は、分岐文木4の構造を示す図である。図8を参照して、分岐文木4は、C言語に用いられる分岐文の文法に従って形成される木構造であり、ノード400〜425を有する。ノード400は、図8に示す木構造が分岐文であることを示す根ノードである。
ノード403、405、408、410、412、414、417、419、421、423、及び425は、葉ノードである。C言語に用いられる分岐文の構成要素は、分岐文木4内の葉ノードに格納される。
C言語に用いられる分岐文は、以下のように記述される。
自ラベル:if(分岐判定式) goto 真ラベル;
C言語で用いられる分岐文は、ラベル句(「自ラベル:」の部分)と、if句(「if(分岐判定式) goto 真ラベル」の部分)と、セミコロン記号「;」とにより構成される。分岐文木4は、この構成に基づいて、ラベル句部分木41と、if句を定義する部分木(if句部分木42)と、セミコロン部分木43とを有する。
分岐文木4において、ラベル句部分木41は、ノード401〜405を有し、セミコロン部分木43は、ノード424及び425を有する。分岐文木4におけるラベル句部分木41及びセミコロン部分木43は、代入文木3と同様であるため、その説明を省略する。
if句部分木42について説明する。ノード406は、if句部分木42の根であり、if句部分木42を定義する。if句部分木42は、if句の構成に応じて、分岐文定義部分木4aと、判定式部分木4bと、命令句部分木4cとを有する。
分岐文定義部分木4aは、C言語に用いられる命令文が分岐文であることを示す分岐文定義子「if」を定義する部分木であり、ノード407及び408を含む。ノード407は、分岐文定義部分木4aの根である。ノード408は、分岐文定義子「if」を格納する葉ノードである。
判定式部分木4bは、C言語に用いられる分岐文において分岐条件を示す分岐判定式を定義する部分木であり、ノード411及び412を含む。ノード411は、判定式部分木4bの根である。ノード412は、葉ノードであり、アルゴリズムの分岐文で入力された分岐判定式をC言語の文法に従って変換した分岐判定式を格納する。分岐判定式の変換の詳細については、後述する。
命令句部分木4cは、C言語に用いられる分岐文において分岐条件が満たされる場合に実行される命令を示す命令句を定義する部分木である。命令句部分木4cは、ノード415〜423を有する。ノード415は、命令句部分木4cの根である。
ノード416は、C言語において命令句の開始を示すGOTO文定義子を定義する。ノード417は、GOTO文定義子「goto」を格納する葉ノードである。
ノード418は、GOTO文定義子の後に付加される空白記号を定義する。ノード419は、空白記号を格納する葉ノードである。
ノード420は、分岐条件が満たされる場合に実行される命令のラベル(真ラベル)を定義する。ノード421は、真ラベルを格納する。真ラベルは、例えば、図6に示すインタフェース5において、テキストボックス542bに入力される分岐先ラベルから変換された自ラベルである。
ノード422は、真ラベルの後に付加される空白記号を定義する。ノード423は、空白記号を格納する葉ノードである。
このように、代入文木3及び分岐文木4は、C言語の文法に従った木構造を有する。後述するように、代入文木3を、C言語に用いられる代入文の記述順序に従って巡航することにより、C言語に用いられる代入文が生成される。C言語に用いられる分岐文も同様に生成される。
[5.プログラム生成処理(ステップS3)]
ユーザは、アルゴリズムの入力が終了した後に、コンピュータプログラム24の作成を指示する操作を行う。生成装置1は、この操作に応じて、インタフェース5に入力されたアルゴリズムに従って、C言語により記述されるコンピュータプログラム24を生成する(ステップS3)。
最初に、生成装置1は、ラベル入力欄53に入力された自己のラベルを、C言語で利用可能な文字列に変換して、ラベル用のテーブルを生成する。
ラベル入力欄53に設けられたテキストボックス531、532の各々には、自己のラベルとして「温度取得」、「温度判定」が入力される。日本語をC言語のラベルとしてそのまま使用することができないため、生成装置1は、ラベル入力欄53に入力された自己のラベルを、C言語で利用可能な文字列に変換して自ラベルを生成する。
自己のラベル「温度取得」は、自ラベル「L001」に変換され、自己のラベル「温度判定」は、自ラベル「L002」に変換される。自己のラベル及び自ラベルは、図9に示すラベル用のテーブルにおいて対応付けられる。ラベル用のテーブルは、知識ベース62に登録されている。また、図6のインタフェース5に示されていない自己のラベル「温度記録」は、自ラベル「L015」に対応付けられる。
図10は、図3に示すコンピュータプログラム生成処理(ステップS3)のフローチャートである。図3に示すコンピュータプログラム生成処理(ステップS3)は、インタフェース5に入力されたアルゴリズムの行番号ごとに実行される。例えば、行番号「002」の代入文に対応して、C言語に用いられる代入文が生成される。その次に、行番号「003」の分岐文に対応して、C言語に用いられる分岐文が生成される。
以下、行番号「002」におけるアルゴリズムの代入文に対応するC言語用の代入文を生成する場合を例にして、コンピュータプログラム生成処理(ステップS3)を説明する。
図10を参照して、行番号「002」に対応する文名称欄55の表示が「式と代入」であるため、生成装置1は、C言語の命令文の生成に用いる木として、代入文木3を文法データベース22から選択する(ステップS31)。
生成装置1は、ステップS32〜S36の処理により、行番号「002」で記述されたアルゴリズムの代入文の構成要素を、C言語の文法に適合するように変換する。具体的には、テキストボックス541aに入力された用語(単一変数)と、テキストボックス541bに入力された演算式が、変換される。以下、詳しく説明する。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を取得する(ステップS32)。具体的には、生成装置1は、テキストボックス541a及び541bに入力された用語及び演算式を構成要素として取得する。
生成装置1は、取得した構成要素の中から、テキストボックス541aに入力された用語「温度測定値」を選択する(ステップS33)。生成装置1は、用語データベース23を検索して、取得された用語「温度測定値」に対応する識別子「V001」を特定する。生成装置1は、取得された用語「温度測定値」を、特定された識別子「V001」に変換する(ステップS34)。
ステップS33において選択された用語「温度測定値」は、演算子及び配列記号を含まない。このため、生成装置1は、ステップS35及びS36を実行せず、ステップS37に進む。ステップS35及びS36については、後述する。
生成装置1は、ステップS34において変換された識別子「V001」を、ステップS31において選択された代入文木3の葉ノードに格納する(ステップS37)。識別子「V001」は、テンプレート541において単一変数として入力された用語「温度測定値」に対応する。図4を参照して、識別子V001は、配列次元数が0であるため、単純変数である。このため、生成装置1は、識別子「V001」を、変数部分木3a内のノード309に格納する。これにより、識別子「V001」は、C言語に用いられる代入文の構成要素として使用可能となる。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を全て選択していないため(ステップS38においてNo)、ステップS33に戻る。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素として、テキストボックス541bに入力された演算式「センサ出力値×補正係数+オフセット(添字A)」を選択する(ステップS33)。
生成装置1は、取得した演算式に含まれる用語を、用語データベース23を参照して識別子に変換する(ステップS34)。具体的には、生成装置1は、取得した演算式を、乗算記号(×)、加算記号(+)などの演算子や、配列の要素番号の定義に用いられる小括弧を用いて区分する。これにより、取得した演算式から、用語「センサ出力値」、「補正係数」、「オフセット」、「添字A」が抽出される。生成装置1は、用語データベース23を参照して、用語「センサ出力値」を識別子「V002」に変換する。同様に、用語「補正係数」は、識別子「V003」に変換される。用語「オフセット」は、識別子「V004」に変換される。用語「添字A」は、識別子「V005」に変換される。
次に、生成装置1は、取得した演算式に含まれる演算子を、C言語の文法に適合する演算子に変換する(ステップS35)。生成装置1は、アルゴリズムの入力に用いられる演算子と、C言語に用いられる演算子とを対応付けた演算子用のテーブルを有しており、このテーブルを用いて演算子を変換する。演算子用のテーブルは、知識ベース62に登録される。テキストボックス541bに入力された演算式で用いられる乗算記号「×」は、C言語で用いられる乗算記号「*」に変換される。テキストボックス541bに入力された演算式で用いられる乗算記号「+」は、C言語で用いられる乗算記号「+」に変換される。
生成装置1は、演算式に含まれる配列記号を、C言語に用いられる配列記号に変換する(ステップS36)。テキストボックス541bに入力された演算式において、「オフセット(添字A)」は、配列を示す。この配列において、小括弧は、要素番号を定義するために用いられる。生成装置1は、小括弧を、C言語において配列の要素番号を定義するために用いられる大括弧に変換する。生成装置1は、演算子用のテーブルにおいて、アルゴリズムで配列の要素番号の定義に用いられる記号(小括弧)を、C言語で配列の要素番号の定義に用いられる記号(大括弧)に対応付けておけばよい。
テキストボックス541bに入力された演算式「センサ出力値×補正係数+オフセット(添字A)」は、ステップS34〜S36が実行された結果、C言語で利用可能な下記の演算式(1)に変換される。
V002*V003+V004[V005] ・・・(1)
演算式(1)は、自然言語(日本語)に基づく用語を含んでいないため、C言語に用いられる代入文の演算式として利用可能である。
生成装置1は、ステップS34〜S36により変換された演算式(1)を、代入文木3の葉ノードに格納する(ステップS37)。演算式(1)は、テキストボックス541bに入力された演算式から生成されたものである。このため、演算式(1)は、代入文木3における演算式部分木3cのノード320(葉ノード)に格納される。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を全て選択したため、(ステップS38においてYes)、ステップS39に進む。
ステップS39において、生成装置1は、ラベル用のテーブル(図9参照)に基づいて、テキストボックス531に入力された自己のラベル「温度取得」に対応する自ラベル「L001」を取得する。生成装置1は、取得した自ラベル「L001」を、代入文木3におけるラベル句部分木のノード303(葉ノード)に格納する(ステップS39)。
以上の処理により、代入文木3には、C言語に用いられる代入文の全ての構成要素が格納される。生成装置1は、代入文木3を所定の順序で巡航することにより、C言語に用いられる代入文を生成する(ステップS40)。
以下、上記の処理によって構成要素が格納された代入文木3を用いて、C言語に用いられる代入文を生成する場合を例にして、命令文生成処理(ステップS40)を説明する。
命令文生成処理(ステップS40)において、生成装置1は、代入文木3の各ノードを行きがけ順で巡航して葉ノードに格納された構成要素を取得する。そして、生成装置1は、取得した構成要素を、取得した順に配列することにより、C言語に用いられる代入文を生成する。
図11は、命令文生成処理(ステップS40)のフローチャートである。以下、図7及び図11を参照して、C言語に用いられる代入文の生成について説明する。図7に示す代入文木3のノード303、309、320は、それぞれ例として示す文字列が格納されている。
生成装置1は、初期設定として、代入文木3の根であるノード300を現在位置に設定する(ステップS401)。巡航の順序が行きがけ順であるため、代入文木3において、ラベル句部分木31、代入節部分木32、セミコロン部分木33の順に巡航が行われる。
生成装置1は、現在位置を、ノード300の子ノードへ移動する(ステップS402)。ステップS402において、現在位置は、現在位置に設定されたことがない子ノードのうち、最も左側に位置する子ノードに移動する。この時点では、ノード300の全子ノード(ノード301、306、及び321)が現在位置に設定されたことはないため、現在位置は、一番左側に位置するノード301へ移動する。これにより、ラベル句部分木31の巡航が開始される。
生成装置1は、現在位置(ノード301)が葉ノードであるか否かを判断する(ステップS403)。ノード301が葉ノードではないため(ステップS403においてNo)、生成装置1は、ステップS402を再び実行して、現在位置をノード302へ移動する。ノード302が葉ノードではないため(ステップS403においてNo)、生成装置1は、ノード302の子であるノード303へ移動する(ステップS402)。
ノード303が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード303に格納された構成要素(自ラベル「L001」)を取得する(ステップS404)。
生成装置1は、ノード303の親であるノード302に戻り(ステップS405)、ノード303の弟ノードが存在するか否かを判断する(ステップS406)。弟ノードが存在しないため(ステップS406においてNo)、生成装置1は、現在位置が代入文木3の根(ノード300)であるか否かを判断する(ステップS408)。現在位置がノード302であるため(ステップS408においてNo)、生成装置1は、ステップS405に戻り、現在位置を、ノード302からノード302の親であるノード301に移動する(ステップS405)。
生成装置1は、巡航済みのノード302の弟ノード(ノード304)が存在するため(ステップS406においてYes)、現在位置をノード304に移動する(ステップS407)。生成装置1は、さらに、現在位置をノード304の子ノード(ノード305)に移動する(ステップS402)。現在位置のノード305が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード305に格納された構成要素(コロン記号「:」)を取得する(ステップS404)。その後、生成装置1は、ステップS405、S406、及びS408を繰り返して、現在位置をノード300に移動する(ステップS405)。これにより、ラベル句部分木31の巡航が終了する。
次に、生成装置1は、代入節部分木32を巡航する。ノード301の弟ノード(ノード306)が存在するため(ステップS406においてYes)、生成装置1は、現在位置をノード300からノード306に移動する(ステップS407)。これにより、代入節部分木32の巡航が開始される。生成装置1は、変数部分木3a、代入文定義部分木3b、演算式部分木3cの順に巡航する。
変数部分木3aの巡航について説明する。生成装置1は、ラベル句部分木31の巡航と同様に、ステップS402及びS403を繰り返して、現在位置をノード309まで移動する。ノード309が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード309に格納された構成要素(識別子「V001」)を取得する(ステップS404)。
その後、生成装置1は、ステップS405、S406、及びS408を実行して、現在位置をノード307に移動する。しかし、生成装置1は、ノード310及びノード310の子孫ノードの巡航を行わない。上述のように、生成装置1は、代入文の単一変数として、既に識別子「V001」を取得しているため、添字付変数を使用しないためである。生成装置1は、ノード309に構成要素が格納されていなかった場合に、ノード310及びノード310の子孫ノードを巡航して、添字付変数の構成要素を取得する。この場合、生成装置1は、ノード311、313、315、316の順で、構成要素を取得する。
生成装置1は、現在位置を、ノード307の親ノード(ノード306)に移動する(ステップS405)。これにより、変数部分木3aの巡航が終了する。
次に、生成装置1は、代入文定義部分木3bを上記と同様に巡航して、ノード318(葉ノード)から、代入文定義子「=」を取得する(ステップS404)。生成装置1は、演算式部分木3cを上記と同様に巡航して、ノード320(葉ノード)から、演算式(1)を取得する(ステップS404)。その後、生成装置1は、ノード300に戻る。これにより、代入節部分木32の巡航が終了する。
次に、生成装置1は、セミコロン部分木33を巡航する。ノード306の弟ノード(ノード321)が存在するため(ステップS406においてYes)、生成装置1は、現在位置をノード321に移動する(ステップS407)。これにより、生成装置1は、セミコロン部分木を巡航して、ノード322(葉ノード)からセミコロン記号「;」を取得する(ステップS404)。その後、生成装置1は、ステップS405、S406、及びS408を実行して、現在位置をノード300に移動する(ステップS405)。
ノード321の弟ノードが存在しないため(ステップS406においてNo)、生成装置1は、現在位置が代入文木3の根(ノード300)であるか否かを判断する。現在位置がノード300であるため(ステップS408においてYes)、生成装置1は、取得した構成要素を取得した順に配列する(ステップS409)。これにより、C言語で用いられる代入文が生成される。
代入文木3の巡航により取得された構成要素は、取得した順に、「L001」、「:」、「V001」、「=」、「V002*V003+V004[V005]」、「;」である。これの構成要素を取得した順に配列することにより生成されるC言語用の代入文(2)を、以下に示す。
L001:V001=V002*V003+V004[V005];
・・・(2)
上記のC言語に用いられる代入文(2)は、行番号「002」に対応するアルゴリズムの代入文と同じ処理を示している。このように、生成装置1は、アルゴリズムの代入文と1対1に対応するC言語の代入文を生成することができる。
[6.C言語に用いられる分岐文の生成]
生成装置1は、行番号「002」に対応するアルゴリズムの代入文に従って、C言語に用いられる代入文を生成した後に、行番号「003」に対応するアルゴリズムの分岐文に従って、C言語に用いられる分岐文を生成する。
以下、C言語に用いられる分岐文の生成について説明する。なお、C言語に用いられる代入文の生成と重複する点については、その説明を省略する。
[6.1.分岐文木4の葉ノードへの格納]
図6及び図10を参照して、生成装置1は、行番号「003」に対応するアルゴリズムの命令が、文名称欄55に記述されているように「分岐」であるため、分岐文木4を選択する(ステップS31)。
生成装置1は、行番号「003」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス542aに入力された分岐判定式「温度測定値≦内部温度」と、テキストボックス542bに入力された分岐先ラベル「温度記録」を取得する(ステップS32)。
生成装置1は、ステップS32で取得した構成要素の中から、分岐判定式「温度測定値≦内部温度」を選択する(ステップS33)。ステップS34において、生成装置1は、用語データベース23を検索して、取得された分岐判定式に含まれる用語「温度測定値」を識別子「V001」に変換する。同様に、生成装置1は、取得された分岐判定式に含まれる用語「内部温度」を識別子「V007」に変換する。生成装置1は、演算子用のテーブルを参照して、分岐判定式に含まれる演算子「≦」を、C言語に用いられる演算子「<=」に変換する(ステップS35)。取得された分岐判定式が配列を含まないため、ステップS36は、実行されない。ステップS34及びS35が実行されることにより、ステップS33で選択された分岐判定式「温度測定値≦内部温度」は、下記の分岐判定式(3)に変換される。
V001<=V007 ・・・(3)
分岐判定式(3)は、C言語に用いられる分岐文の構成要素として、分岐文木4のノード412(図8参照)に格納される(ステップS37)。
次に、生成装置1は、番号「003」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス542aに入力された分岐先ラベル「温度記録」を選択する(ステップS33)。分岐先ラベル「温度記録」は、用語データベース23に登録されていない。この場合、生成装置1は、図9に示すラベル用のテーブルを参照して、ラベル「温度記録」に対応する自ラベル「L015」を特定し、特定した自ラベルを、分岐文木4のノード421(図8参照)に格納する(ステップS37)。
そして、生成装置1は、行番号「003」における自己のラベル「温度判定」に対応する自ラベル「L002」を、ラベル用のテーブルから取得して、分岐文木4にノード403(葉ノード)に格納する(ステップS39)。生成装置1は、構成要素の格納が終了した分岐文木4を巡航して、C言語に用いられる分岐文を生成する(ステップS40)。
[6.2.分岐文木4の巡航(ステップS40)]
生成装置1は、代入文木3の巡航と同様に、分岐文木4を行きがけ順で巡航する(図11参照)。これにより、生成装置1は、C言語に用いられる分岐文の構成要素を、分岐文木4の葉ノードから取得する。生成装置1が分岐文木4の葉ノードを巡航する順序は、ノード403、405、408、410、412、414、417、419、421、423、425の順である。生成装置1は、巡航した順序に従って、取得した構成要素を配列することにより、下記に示すC言語用の分岐文(4)を生成する。
L002:if(V001<=V007) goto L015 ;
・・・(4)
上記のC言語に用いられる分岐文(4)は、行番号「003」に対応するアルゴリズムの分岐文と同じ処理を示している。このように、生成装置1は、アルゴリズムの分岐文と1対1に対応するC言語用の分岐文を生成することができる。
以下、生成装置1は、インタフェース5に入力された行番号の順に、アルゴリズムの命令文に1対1に対応するC言語用の命令文を生成する。生成装置1は、C言語用の命令文を生成した順序で記述することにより、コンピュータプログラム24を生成する。
このようにして生成されたコンピュータプログラム24のアルゴリズムは、インタフェース5に入力されたアルゴリズムと同じである。従って、生成されたコンピュータプログラム24をコンピュータに実行させた場合、コンピュータは、ユーザの意図に反する処理を実行することがない。つまり、生成されたコンピュータプログラムを修正しなくてもよいため、開発効率を向上させることができる。
また、生成装置1により生成されるC言語用の命令文は、C言語の文法に従って構成された代入文木3又は分岐文木4を行きがけ順で巡航することにより生成されるため、C言語の文法エラーが発生することがない。従って、コンピュータプログラムの開発効率を向上させることができる。
なお、上記実施の形態の代入文木3及び分岐文木4において、C言語に用いられる命令文(代入文及び分岐文)の構成要素が葉ノードに格納される例を説明したが、これに限られない。命令文の構成要素は、子ノードを有するノード(中間ノード)に格納されていてもよい。すなわち、文法データベース22は、C言語に用いられる命令文の構成要素を格納するノードを含む木構造を有していればよい。
また、上記実施の形態において、行番号「002」で記述されたアルゴリズムの代入文中の演算式を変換した演算式(1)を、ノード320(葉ノード)に格納する処理を説明した。しかし、生成装置1は、演算式(1)の構成要素の各々を、式を構成するノードに格納してもよい。
図12は、図7に示す演算式部分木3cの変形例を示す図である。図12を参照して、演算式部分木3cは、演算式(1)の構成要素を格納するノード351〜358を含む。ノード351〜358は、演算式(1)の木構造(部分木35)を構成する。部分木35の根であるノード351は、ノード319の子であり、加算を示す演算子「+」を格納する。ノード351は、ノード352及び355を子ノードとして有する。
ノード352は、乗算を示す演算子「*」を格納し、ノード353及び354を子ノードとして有する。ノード353は、識別子「V002」を格納し、ノード354は、識別子「V003」を格納する。
ノード355は、ノード356〜358を子ノードとして有する。ノード355〜358は、演算式(1)の構成要素のうち、添字付変数(配列)の構成要素を格納する。ノード355は、配列名を示す識別子「V004」を格納する。ノード356は、C言語において配列の要素番号を定義するために用いられる左大括弧記号を格納する。ノード358は、右大括弧記号を格納する。ノード357は、配列の要素番号を示す識別子「V005」を格納する。
このように、演算式(1)の構成要素を、演算式部分木3cの葉ノード、あるいは、中間ノードに格納してもよい。分岐判定式(3)も、演算式(1)と同様に、ノード412(図8参照)に格納されなくてもよい。この場合、判定式部分木4bは、分岐判定式(3)の構成要素を格納するノード(葉ノード及び中間ノード)を含んでいればよい。
なお、上記実施の形態では、所定のプログラミング言語としてC言語を例にして説明したが、これに限られない。所定のプログラミング言語は、FORTRAN、BASICなどの高水準言語であってもよい。所定のプログラミング言語としてFORTRANが用いられる場合、代入文木3及び分岐文木4は、FORTRANの文法に従って構成される。
あるいは、所定のプログラミング言語は、アセンブリ言語などの低水準言語であってもよいし、機械語であってもよい。アセンブリ言語を用いる場合、代入文木3及び分岐文木4は、アセンブリ言語の文法に従って構成される。機械語を用いる場合も同様である。
また、上記実施の形態において、アルゴリズムの代入文の演算式を入力する際に、1次元配列「オフセット(添字A)」を入力する場合を説明した(図6参照)。しかし、ユーザは、代入文の演算式、分岐文の分岐判定式、あるいは、変数を入力する際に、2次元以上の配列を用いてもよい。
生成装置1がC言語に用いられる2次元以上の配列を生成する場合、配列の要素番号を示す記号列は、以下のようにして生成される。例えば、テキストボックス541b(図6参照)に入力される「オフセット(添字A)」に代えて、ユーザは、「オフセット(添字A,添字B)」と入力する。この場合、生成装置1は、図10に示す配列記号変換処理(ステップS36)において、カンマを基準に小括弧内の文字列を区分して、2つの用語(添字A、添字B)を取得する。生成装置1は、取得した2つの用語から変換された2つの識別子を、大括弧でそれぞれ括る。これにより、配列の要素番号を示す記号列が生成される。
また、生成装置1がFORTRANに用いられる配列を生成する場合、変換された2つの識別子をカンマで区切ることにより、配列の要素番号を示す記号列を生成すればよい。
このように、配列の表現形式に関するプログラミング言語ごとの定義は、配列要素番号を定義する文法によって定められる。この文法は、文法データベース22に予め登録される。
また、生成装置1は、上述のプログラム生成処理を用いて、生成プログラム21を生成してもよい。
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
1 コンピュータプログラム生成装置
3 代入文木
4 分岐文木
5 インタフェース
11 CPU
12 RAM
13 操作部
14 モニタ
15 HDD
21 コンピュータプログラム生成プログラム
22 文法データベース
23 用語データベース

Claims (4)

  1. 所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置であって、
    ユーザによって定義された用語と、前記用語に対応する識別子とを記憶する用語データベースと、
    前記プログラミング言語の文法に従って形成される木構造であって、前記プログラミング言語に用いられる命令文を構成する複数の構成要素をそれぞれ格納する複数のノードを含む木構造を有する文法データベースと、
    前記用語を含む前記コンピュータプログラムのアルゴリズムの入力を受け付ける入力部と、
    前記用語データベースを検索して前記入力部で入力された用語に対応する識別子を読み出し、前記文法データベースを検索して前記ノードから構成要素を読み出し、前記読み出された識別子及び構成要素を配列することにより複数の命令文を1つずつ生成し、前記生成された複数の命令文を前記入力されたアルゴリズムに従って順番に並べる生成部とを備える、コンピュータプログラム生成装置。
  2. 請求項1に記載のコンピュータプログラム生成装置であって、
    前記入力部は、前記プログラミング言語に用いられる複数の命令のうち前記アルゴリズムで用いられる命令の選択と、前記選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する、コンピュータプログラム生成装置。
  3. 請求項1又は2に記載のコンピュータプログラム生成装置であって、
    前記命令文は、演算式と、変数と、前記演算式の結果を前記変数に代入することを定義する代入文定義子とを含む代入文を含み、
    前記文法データベースは、
    前記代入文定義子を定義する部分木であって、前記代入文定義子を格納するノードを含む代入文定義部分木と、
    前記変数を定義する部分木であって、前記変数を格納するノードを含む変数部分木と、
    前記演算式を定義する部分木であって、前記演算式の構成要素を格納するノードを含む演算式部分木とを含み、
    前記生成部は、前記代入文定義部分木と、前記変数部分木と、前記演算式部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。
  4. 請求項1〜3のいずれか1項に記載のコンピュータプログラム生成装置であって、
    前記命令文は、分岐判定式と、前記分岐判定式が満たされる場合に実行される命令を示す命令句と、前記命令文が分岐命令であることを示す分岐文定義子と含む分岐文を含み、
    前記文法データベースは、
    前記分岐判定式を定義する部分木であって、前記分岐判定式の構成要素を格納するノードを含む判定式部分木と、
    前記命令句を定義する部分木であって、前記命令句の構成要素を格納するノードを含む命令句部分木と、
    前記分岐文定義子を定義する部分木であって、前記分岐文定義子を格納するノードを含む分岐文定義部分木とを含み、
    前記生成部は、前記判定式部分木と、前記命令句部分木と、前記分岐文定義部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。
JP2013272170A 2013-12-27 2013-12-27 コンピュータプログラム生成装置 Active JP5844347B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013272170A JP5844347B2 (ja) 2013-12-27 2013-12-27 コンピュータプログラム生成装置
PCT/JP2014/084237 WO2015099008A1 (ja) 2013-12-27 2014-12-25 コンピュータプログラム生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013272170A JP5844347B2 (ja) 2013-12-27 2013-12-27 コンピュータプログラム生成装置

Publications (2)

Publication Number Publication Date
JP2015125751A JP2015125751A (ja) 2015-07-06
JP5844347B2 true JP5844347B2 (ja) 2016-01-13

Family

ID=53478855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013272170A Active JP5844347B2 (ja) 2013-12-27 2013-12-27 コンピュータプログラム生成装置

Country Status (2)

Country Link
JP (1) JP5844347B2 (ja)
WO (1) WO2015099008A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109542420A (zh) * 2018-10-15 2019-03-29 张海光 一种基于标记的代码编辑方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05181651A (ja) * 1991-12-27 1993-07-23 Nec Corp プログラム自動生成装置
JP3004847B2 (ja) * 1993-09-29 2000-01-31 日立ソフトウエアエンジニアリング株式会社 ソースプログラム生成方法およびシステム
JP3430252B2 (ja) * 2000-01-24 2003-07-28 独立行政法人産業技術総合研究所 ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置
JP2001273123A (ja) * 2000-03-28 2001-10-05 Mitsubishi Electric Corp 指示書入力装置
JP4311327B2 (ja) * 2004-10-04 2009-08-12 日本電気株式会社 ソースコード自動生成装置、ソースコード自動生成方法、プログラムおよび記録媒体

Also Published As

Publication number Publication date
JP2015125751A (ja) 2015-07-06
WO2015099008A1 (ja) 2015-07-02

Similar Documents

Publication Publication Date Title
EP3239835B1 (en) System architecture with visual modeling tool for designing and deploying complex models to distributed computing clusters
Stone et al. Linking product functionality to historic failures to improve failure analysis in design
US20170091589A1 (en) Framework for data extraction by examples
Wassermann et al. Sedna: A BPEL-based environment for visual scientific workflow modeling
US8776016B2 (en) Integration of structured profiling data with source data in the eclipse development environment
US11256755B2 (en) Tag mapping process and pluggable framework for generating algorithm ensemble
US7296248B2 (en) Method and apparatus for compiling a parameterized cell
CN112069456A (zh) 一种模型文件的生成方法、装置、电子设备及存储介质
Nachawati et al. Unity decision guidance management system: Analytics engine and reusable model repository
US9519463B1 (en) Application for automatically generating graphical flowcharts based on configurable means
Balbaert Getting started with Julia
JP5844347B2 (ja) コンピュータプログラム生成装置
Carré et al. From subsets of model elements to submodels: A characterization of submodels and their properties
Patankar et al. MATLAB and Simulink In-Depth: Model-based Design with Simulink and Stateflow, User Interface, Scripting, Simulation, Visualization and Debugging (English Edition)
JP2017111749A (ja) 計算コード生成装置、方法及びプログラム
Balbaert et al. Julia 1.0 programming complete reference guide: discover Julia, a high-performance language for technical computing
EP4352669A1 (en) Artificial intelligence approach to solving industrial data transformation problems
Gebser et al. Writing declarative specifications for clauses
US20190205392A1 (en) System and method for generating blocks of natural language
CN106598839A (zh) 一种面向目标代码的程序静态分析方法
JP5356851B2 (ja) マクロプログラムの構造化システム、マクロプログラムの構造化方法およびプログラム
Schrettner et al. Visualization of software architecture graphs of java systems: managing propagated low level dependencies
EP4345677A1 (en) System and method for managing simulation artifacts
Balbaert Julia 1.0 Programming: Dynamic and high-performance programming to build fast scientific applications
Osakabe et al. Hitachi Materials Informatics Analytics Platform Assisting Rapid Development.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150513

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20150513

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150513

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20150611

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150826

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151118

R150 Certificate of patent or registration of utility model

Ref document number: 5844347

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313117

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250