(57)【要約】【課題】使用されるコンパイラの種類に関らず、モデルに基づきＲＯＭ容量を抑制可能なソースコードを生成することができるコード生成装置等を提供する。【解決手段】コード生成装置として動作するＰＣは、制御モデルから生成された原ソースコードの中から各原記述パターンに従った原記述を検出する（Ｓ６１５）。そして、検出された原記述を、対応する変換パターンにより生成された変換記述に置換した場合に、原ソースコードのＲＯＭ容量が低減するか否かを判定すると共に（Ｓ６２５，Ｓ６３０）、ＲＯＭ容量を低減可能と判定された原記述を変換記述に置換した原ソースコードを、新ソースコードとして生成する（Ｓ６４０）。【選択図】図６
2013161220.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた処理手順を示すブロックの組合せによりプログラムを記述した制御モデルから原ソースコードを生成する生成手段（Ｓ６１０，Ｓ７０５）と、
対応する関数の実行中に一時的に使用可能となるテンポラリ変数を用いた処理の記述を原記述とし、予め定められたコンパイラが用いられる場合に、前記原ソースコードにおける前記原記述に対し、異なる方法で前記テンポラリ変数を用いて同一の処理を実現可能な変換記述への置換を行うことで、前記原ソースコードの容量が低減するか否かを判定する判定手段（Ｓ６３０，Ｓ７３５）と、
前記判定手段により前記置換を行うことで前記容量が低減すると判定されると、前記原ソースコードにおける前記原記述に対する前記置換を行い、新ソースコードを生成する置換手段（Ｓ６４０，Ｓ７４５）と、
を備えることを特徴とするコード生成装置（１）。
【請求項２】
請求項１に記載のコード生成装置において、
前記原ソースコードから、予め定められた原記述パターン（２００，３００，４００）に従った記述を前記原記述として検出する検出手段（Ｓ６１５，Ｓ７２０）と、
前記検出手段により検出された前記原記述と、該原記述に係る前記原記述パターンに対応する変換方法（２１０，３１０，４１０）とに基づき、前記変換記述を生成する変換手段（Ｓ６２５，Ｓ７３０）と、
をさらに備え、
前記判定手段は、前記検出手段により検出された前記原記述に対し、前記変換手段により生成された前記変換記述への前記置換を行うことで、前記容量が低減するか否かを判定し、
前記置換手段は、前記判定手段により前記置換を行うことで前記容量が低減すると判定された前記原記述について、前記原ソースコードにおける該原記述に対する前記置換を行い、前記新ソースコードを生成すること、
を特徴とするコード生成装置。
【請求項３】
請求項２に記載のコード生成装置は、
前記判定手段は、異なる種類の前記コンパイラが用いられる各場合について、それぞれ、前記検出手段により検出された前記原記述に対する前記置換により、前記容量が低減するか否かを判定し、
前記置換手段は、前記コンパイラ毎に、前記判定手段による判定結果に応じて前記原ソースコードに対する前記置換を行い、前記新ソースコードを生成し、
前記コンパイラ毎に生成された前記新ソースコードの前記容量を計測する計測手段（Ｓ７４５）と、
前記計測手段による計測結果に関する情報を報知する報知手段（Ｓ７５５）と、
をさらに備えることを特徴とするコード生成装置。
【請求項４】
請求項２または請求項３に記載のコード生成装置において、
前記検出手段は、複数の前記原記述パターンについて、それぞれ、前記原ソースコードから該原記述パターンに従った前記原記述を検出し、
前記判定手段は、前記検出手段により検出された前記原記述に係る前記原記述パターンが複数存在する場合には、これらの原記述パターン毎に、個別に、該原記述パターンに従った前記原記述に対する前記置換により前記容量が低減するか否かを判定し、
前記置換手段は、前記置換を行うことで前記容量が低減すると判定された前記原記述に係る前記原記述パターンが複数存在する場合には、これらの原記述パターン毎に、前記原ソースコードにおける該原記述パターンに従った前記原記述に対する前記置換を順次行い、前記新ソースコードを生成すること、
を特徴とするコード生成装置。
【請求項５】
予め定められた処理手順を示すブロックの組合せによりプログラムを記述した制御モデルから原ソースコードを生成する生成手段（Ｓ６１０，Ｓ７０５）と、
対応する関数の実行中に一時的に使用可能となるテンポラリ変数を用いた処理の記述を原記述とし、予め定められたコンパイラが用いられる場合に、前記原ソースコードにおける前記原記述に対し、異なる方法で前記テンポラリ変数を用いて同一の処理を実現可能な変換記述への置換を行うことで、前記原ソースコードの容量が低減するか否かを判定する判定手段（Ｓ６３０，Ｓ７３５）と、
前記判定手段により前記置換を行うことで前記容量が低減すると判定されると、前記原ソースコードにおける前記原記述に対する前記置換を行い、新ソースコードを生成する置換手段（Ｓ６４０，Ｓ７４５）と、
してコンピュータを動作させることを特徴とするコード生成プログラム（１００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデルに基づきソースコードを生成するコード生成装置等に関する。
【背景技術】
【０００２】
従来、例えば車両のエンジンＥＣＵのプログラムの開発においては、開発者が直接ソースコードを記述せず、目的とするプログラムの機能を、より作成が簡易で視認性の良い「モデル」という形態で記述する場合がある。開発者は、このモデルに対応したプログラム開発環境がインストールされたワークステーション，パーソナルコンピュータ等を用い、そのモデルにて定義された演算処理等のシミュレーションを行うと共に、該モデルからソースコードを自動生成する。
【０００３】
このようにしてモデルに基づきソースコードを自動生成するプログラム開発は、モデルベース開発と呼ばれており、モデルベース開発を行うためのプログラム開発環境としてＭａｔｌａｂ（登録商標）が知られている。Ｍａｔｌａｂ（登録商標）においては、開発者は、当該プログラム開発環境の付加機能を提供するＳｉｍｕｌｉｎｋ（登録商標）を用いてモデルを記述する。
【０００４】
そして、Ｓｉｍｕｌｉｎｋ（登録商標）においては、モデルは、各種演算やファイルからのデータの読み出し等を行う機能単位であるブロックや、ブロック間のデータの入出力を示す結線等の組合せとして記述される。すなわち、複数のブロックが結線によってつなぎ合わされることにより、エンジン制御におけるデータの入出力や、各種演算処理等を表現する集合体がモデルである。
【０００５】
特許文献１には、このようなモデルベース開発に用いられるソースコードの生成装置について記載されている。特許文献１に記載のコード生成装置によれば、複数の種別（例えば、装置の仕向け地や機種等）の機能が記述された一つのモデルから特定の種別に対応するソースコードを生成する際、対応しない種別についての機能の記述がモデルから除去される。これにより、不要なソースコードが生成されることを防ぐことができ、ＲＯＭ容量の小さいソースコードを生成することが可能となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２２７５００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ソースコードでは関数内のみでアクセス可能なテンポラリ変数が使用される場合があるが、同様の処理であっても、複数のテンポラリ変数を用いて記述された場合と、一つのテンポラリ変数を使い回して記述された場合とでは異なるアセンブラコードが生成される。すなわち、テンポラリ変数の使用方法によってソースコードのＲＯＭ容量は異なるものとなるが、さらに、同一のソースコードであっても、異なるコンパイラが用いられれば異なるアセンブラコードが生成され、ソースコードのＲＯＭ容量は異なるものとなる。
【０００８】
このため、コード生成装置によりモデルから生成されるソースコードにおいてどのような方法でテンポラリ変数を使用したとしても、用いられるコンパイラの種類によってはＲＯＭ容量を抑制するうえで好適な記述とならない場合がある。
【０００９】
本願発明は上記課題に鑑みてなされたものであり、使用されるコンパイラの種類に関らず、モデルに基づき生成されるソースコードのＲＯＭ容量を抑制することができるコード生成装置等を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑みてなされた請求項１に記載の発明に係るコード生成装置は、予め定められた処理手順を示すブロックの組合せによりプログラムを記述した制御モデルから原ソースコードを生成する生成手段と、対応する関数の実行中に一時的に使用可能となるテンポラリ変数を用いた処理の記述を原記述とし、予め定められたコンパイラが用いられる場合に、原ソースコードにおける原記述に対し、異なる方法でテンポラリ変数を用いて同一の処理を実現可能な変換記述への置換を行うことで、原ソースコードの容量が低減するか否かを判定する判定手段と、を備える。また、判定手段により置換を行うことで容量が低減すると判定されると、原ソースコードにおける原記述に対する置換を行い、新ソースコードを生成する置換手段を備える。
【００１１】
このような構成によれば、制御モデルから生成された原ソースコードにおけるテンポラリ変数の使用方法が、プログラム開発に用いられるコンパイラにとってＲＯＭ容量を抑制するうえで好適では無いという場合には、該使用方法をより好適なものに改変ことができる。このため、使用されるコンパイラの種類に関らず、モデルに基づき生成されるソースコードのＲＯＭ容量を抑制することができる。
【００１２】
また、既に述べたように、ＲＯＭ容量を低減させるうえで好適なテンポラリ変数の使用方法は、コンパイラの種類に応じて異なっている。そして、プログラム開発に用いられることが想定されるコンパイラには多くの種類が存在しているため、このような使用方法として様々なパターンが存在すると考えられる。
【００１３】
そこで、請求項２に記載のコード生成装置は、原ソースコードから、予め定められた原記述パターンに従った記述を原記述として検出する検出手段と、検出手段により検出された原記述と、該原記述に係る原記述パターンに対応する変換方法とに基づき、変換記述を生成する変換手段をさらに備える。
【００１４】
そして、判定手段は、検出手段により検出された原記述に対し、変換手段により生成された変換記述への置換を行うことで、容量が低減するか否かを判定し、置換手段は、判定手段により置換を行うことで容量が低減すると判定された原記述について、原ソースコードにおける該原記述に対する置換を行い、新ソースコードを生成する。
【００１５】
こうすることにより、コンパイラ毎に異なる様々な上記使用方法のパターンに応じて、予め原記述パターン及び変換方法を設定しておくことができる。そして、各原記述パターンについて、対応する原記述の置換により原ソースコードのＲＯＭ容量の低減が可能か否かを個別に判定し、ＲＯＭ容量を低減可能と判定された原記述パターン及び変換方法による置換のみを実施することができる。
【００１６】
したがって、原ソースコードに対し、様々なパターンでテンポラリ変数の使用方法を改変することができ、原ソースコードのＲＯＭ容量をより一層低減させることができる。
【図面の簡単な説明】
【００１７】
【図１】コード生成装置をなすＰＣや、ＰＣにインストールされたコード生成ツールの構成を示すブロック図である。
【図２】第１原記述パターン及び第１正常パターンと、第１原記述パターンに従った第１記述と、第１記述から得られた第１変換記述等についての説明図である。
【図３】第２原記述パターン及び第２正常パターンと、第２原記述パターンに従った第２記述と、第２記述から得られた第２変換記述等についての説明図である。
【図４】第３原記述パターン及び第３正常パターンと、第３原記述パターンに従った第３記述と、第３記述から得られた第３変換記述等についての説明図である。
【図５】第４制御モデルと、第４制御モデルから生成された第４記述と、第４記述から得られた第４変換記述等についての説明図である。
【図６】コード生成処理についてのフローチャートである。
【図７】コンパイラ判定処理についてのフローチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００１９】
［構成の説明］
図１（ａ）には、本実施形態におけるコード生成装置として作動する周知のパーソナルコンピュータ（ＰＣ）１の構成を示すブロック図が記載されている。このＰＣ１は、ディスプレイ１０，ＨＤＤ（ハードディスクドライブ）２０，ＣＰＵ（演算装置）３０，ＲＯＭ４０，ＲＡＭ５０，入力装置６０等を備える。
【００２０】
ディスプレイ１０は、ＣＰＵ３０から受けた映像信号を、ユーザに対して映像として表示する。
入力装置６０は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ３０に出力する。
【００２１】
ＲＡＭ５０は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ４０は読み出し専用の不揮発性メモリであり、ＨＤＤ２０は読み出し、書き込み可能な不揮発性メモリである。ＲＯＭ４０、ＨＤＤ２０には、ＣＰＵ３０が読み出して実行するプログラム等が予め記憶されている。
【００２２】
ＲＡＭ５０は、ＣＰＵ３０がＲＯＭ４０，ＨＤＤ２０に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、及び作業用のデータを一時的に保存するための記憶領域として用いられる。
【００２３】
ＣＰＵ３０は、オペレーティングシステム（ＯＳ）をＨＤＤ２０から読み出して実行し、ＨＤＤ２０に記録されている各種プログラムをＯＳ上のプロセスとして実行する。また、このプロセスにおいて、ＣＰＵ３０は必要に応じて入力装置６０から信号の入力を受け付け、ディスプレイ１０に映像信号を出力し、ＲＡＭ５０，ＨＤＤ２０に対してデータの読み出し／書き込みの制御を行う。
【００２４】
次に、ＰＣ１にインストールされている本実施形態のコード生成ツール１００について、図１（ｂ）に記載のブロック図を用いて説明する。コード生成ツール１００は、ＨＤＤ２０に保存され、ＯＳ上のプロセスとして実行されるアプリケーションの１つであり、ＰＣ１は、コード生成ツール１００を動作させることで、モデルベース開発を行うためのコード生成装置として稼動する。なお、このコード生成装置は、車載装置等といった組み込みシステム向けのプログラム開発に用いられることが考えられるが、これに限定されることは無く、あらゆる用途のプログラム開発に用いることができる。
【００２５】
コード生成ツール１００は、入力装置６０（キーボード６１，マウス６２）の操作によって起動し、その後ユーザの入力装置６０の操作に基づいて作成された制御モデル１５０や、該操作により設定された詳細条件１５１からソースコードを生成する。
【００２６】
ソースコードとは、例えばＣ＋＋等のプログラミング言語の仕様に則ってプログラム開発者が作成するプログラムの一表現形態である。ソースコードはコンパイラ、リンカ等に入力されることで、ＣＰＵ等が直接実行できるオブジェクトコードに変換される。なお、オブジェクトコードもプログラムの一表現形態である。
【００２７】
また、制御モデル１５０とは、ソースコードよりも記述が簡易になり、かつ人による可読性を高くする目的で定められたモデル言語仕様に基づいて作成されるプログラムの一表現形態である。制御モデルとしては、例えばＳｉｍｕｌｉｎｋ（登録商標）によって作成されるＳｉｍｕｌｉｎｋモデルがある。Ｓｉｍｕｌｉｎｋ（登録商標）モデルが、Ｍａｔｌａｂ（登録商標）上で動作するＲｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐ（登録商標：以下ＲＴＷと記す）に入力されることにより、このＲＴＷが当該Ｓｉｍｕｌｉｎｋ（登録商標）モデルに対応するソースコードを生成する。
【００２８】
Ｓｉｍｕｌｉｎｋ（登録商標）モデルは、特定の処理手順を示すブロックと呼ばれる機能単位の組合せとして記述され、モデルを構成するブロックは、ブロック間のデータの入出力、及び、対応する処理手順の順序を示す結線により繋ぎ合わされている。
【００２９】
また、複数のブロックの集合体を、関数ブロックというブロックの一種として定義することもできる。この関数ブロックは、プログラミングにおける関数に相当し、ブロックの中にブロックが含まれるような入れ子構造のブロックの作成も許されており、関数ブロックを有する制御モデルに基づき生成されたソースコードでは、関数ブロックでの処理はサブルーチンとして記述される。
【００３０】
また、Ｓｉｍｕｌｉｎｋ（登録商標）モデル中の各ブロックは、それぞれ属性情報を有することができる。属性情報としては、例えば当該ブロックの名称、入出力するデータの型や値域定義等がある（なお、図２（ｂ）では、属性情報等を詳細条件１５１として表している）。
【００３１】
本実施形態における制御モデル１５０も、Ｓｉｍｕｌｉｎｋ（登録商標）モデルと同様にブロックから成り、関数ブロックの記述やブロックの入れ子構造が許され、各ブロックが属性情報を有することができる。
【００３２】
また、本実施形態のコード生成ツール１００は、制御モデル１５０からソースコードを生成する生成部１０１と、生成されたソースコードのＲＯＭ容量を低減させるべく、該ソースコードの一部を改変する変換部１０２を有している。
【００３３】
具体的には、変換部１０２は、生成されたソースコード（原ソースコード）から、関数内で定義され、該関数により記述された処理の実行中にのみ一時的に使用可能となるテンポラリ変数を用いた処理の記述である原記述を検出する。そして、検出した原記述を、異なる方法でテンポラリ変数を用いて同一の処理を実現可能な変換記述に置換した場合に、原ソースコードのＲＯＭ容量が低減するか否かを判定し、ＲＯＭ容量が低減する場合には、原記述を変換記述に置換した新ソースコードを生成する。
【００３４】
以下では、コード生成ツール１００における、制御モデル１５０から生成された原ソースコードを改変する機能について、詳しく説明する。
［動作の説明］
本実施形態のコード生成ツール１００は、原記述の類型である原記述パターンを示す原記述パターンデータを有しており、原ソースコードから、原記述パターンに従った記述を原記述として検出する。
【００３５】
さらに、コード生成ツール１００は、各原記述パターンに従った原記述を変換記述に変換する変換方法を示す変換方法データを有しており、検出した原記述を、該原記述に係る原記述パターンに対応する変換方法に従い変換記述に変換する。
【００３６】
そして、各原記述パターンについて、対応する原記述を変換記述に置換することで原ソースコードのＲＯＭ容量を低減可能か否かを判定し、原ソースコードから、ＲＯＭ容量を低減可能な原記述パターンに従った原記述を変換記述に置換した新ソースコードを生成する。
【００３７】
なお、原記述パターンデータや変換方法データは、コード生成ツール１００の一部を構成しており、これらのデータは、コード生成ツール１００がインストールされているＰＣ１のＨＤＤ２０に保存されていることは、言うまでも無い。
【００３８】
図２（ａ）〜４（ａ）には、一例として、第１〜３原記述パターン２００，３００，４００と、各原記述パターンに対応する原記述を変換して生成される変換記述の類型である第１〜３変換パターン２１０，３１０，４１０が記載されている。第１〜３変換パターン２１０〜４１０を示す各データは、それぞれ、変換方法データとして第１〜３原記述パターン２００〜４００に対応付けられており、各原記述パターンに従った原記述から、対応する変換パターンに基づき変換記述が生成される。
【００３９】
なお、本実施形態のコード生成ツール１００では、一例として制御モデル１５０からＣ言語のソースコードを生成する構成となっており、原記述パターンや変換パターンは、Ｃ言語で記述されたソースコードの体裁をなしている。また、これらのパターンにおける“ｔｅｍｐ１”，“ｔｅｍｐ２”は、任意のテンポラリ変数を示しており、このテンポラリ変数はどのような型であっても良い。また、“Ｘ”，“Ｙ”は、任意の処理、或いは、任意の型を有する定数，変数のいずれかを示しており、この処理としては、任意の関数を実行して返り値を代入する処理や任意の演算等が考えられる。
【００４０】
図２（ａ）〜４（ａ）に記載されているように、第１〜３原記述パターン２００〜４００では、１種類のテンポラリ変数を用いて処理が記述されている。これに対し、第１〜３変換パターン２１０〜４１０では、２種類のテンポラリ変数を用いて対応する原記述パターンと同様の処理が記述されており、原記述パターンと対応する変換パターンとでは、テンポラリ変数の使用方法が異なっている。
【００４１】
次に、第１〜３原記述パターン２００〜４００に対応する原記述の具体例と、原記述から得られる変換記述の具体例について説明する。
図２（ｂ）に記載の第１制御モデル２２０は、ｆｌｏａｔ型の変数ｖ１，ｖ２を加算すると共に、加算結果とｆｌｏａｔ型の変数ｖ３のうち、値が小さいほうを最終的な出力値とする処理を示している。コード生成ツール１００では、この第１制御モデル２２０から第１記述２３０が生成される。
【００４２】
この第１記述２３０は、第１原記述パターン２００に従った記述であるため、原記述として検出されると共に、第１原記述パターン２００に対応する第１変換パターン２１０により該第１記述２３０を変換した第１変換記述２４０が生成される。
【００４３】
そして、コード生成ツール１００は、第１記述２３０と第１変換記述２４０のどちらのＲＯＭ容量が小さいか判定する。なお、一例として、図２（ｂ）には、所定のコンパイラにより第１記述２３０をコンパイルして得られたアセンブラコード２３１と、第１変換記述２４０をコンパイルして得られたアセンブラコード２４１とが記載されている。これらのアセンブラコードから、第１記述２３０のＲＯＭ容量は２２バイトであり、第１変換記述２４０のＲＯＭ容量は８バイトであることがわかる。
【００４４】
このため、コード生成ツール１００では、上記コンパイラが用いられる場合、第１記述２３０を含む原ソースコードに対して、第１原記述パターン２００に従った原記述を第１変換パターン２１０により得られた変換記述に置換することで、原ソースコードのＲＯＭ容量が低減すると判定される。そして、原ソースコードにおける該原記述を該変換記述に置換した新ソースコードが生成される。
【００４５】
なお、コンパイラの種類によっては、第１変換記述２４０のほうが第１記述２３０よりもＲＯＭ容量が大きくなる場合や、これらの記述のＲＯＭ容量が変わらないという場合もある。このような場合、コード生成ツール１００では、第１原記述パターン２００及び第１変換パターン２１０を用いた置換は行われない。
【００４６】
また、図３（ｂ）に記載の第２制御モデル３２０は、ｆｌｏａｔ型の変数ｖ１，ｖ２を加算すると共に、加算結果とｆｌｏａｔ型の変数ｖ３のうち、値が大きいほうを最終的な出力値とする処理を示している。コード生成ツール１００では、この第２制御モデル３２０から第２記述３３０が生成される。
【００４７】
この第２記述３３０は、第２原記述パターン３００に従った記述であるため、原記述として検出されると共に、第２原記述パターン３００に対応する第２変換パターン３１０により該第２記述３３０を変換した第２変換記述３４０が生成される。
【００４８】
そして、コード生成ツール１００は、第２記述３３０と第２変換記述３４０のどちらのＲＯＭ容量が小さいか判定する。なお、一例として、図３（ｂ）には、上記コンパイラを用いたコンパイルにより第２記述３３０，第２変換記述３４０から得られたアセンブラコード３３１，３４１が記載されており、第２記述３３０のＲＯＭ容量は２２バイト、第２変換記述３４０のＲＯＭ容量は８バイトとなっている。
【００４９】
このため、コード生成ツール１００では、上記コンパイラが用いられる場合、第２記述３３０を含む原ソースコードに対して、第２原記述パターン３００及び第２変換パターン３１０を用いた置換を行うことで、ＲＯＭ容量が低減すると判定される。そして、原ソースコードに対し該置換を行うことで新ソースコードが生成される。
【００５０】
また、図４（ｂ）に記載の第３制御モデル４２０は、ｆｌｏａｔ型の変数ｖ１，ｖ２を加算すると共に、加算結果の絶対値を最終的な出力値とする処理を示している。コード生成ツール１００では、この第３制御モデル４２０から第３記述４３０が生成される。
【００５１】
この第３記述４３０は、第３原記述パターン４００に従った記述であるため、原記述として検出されると共に、第３原記述パターン４００に対応する第３変換パターン４１０により該第３記述４３０を変換した第３変換記述４４０が生成される。
【００５２】
そして、コード生成ツール１００は、第３記述４３０と第３変換記述４４０のどちらのＲＯＭ容量が小さいか判定する。なお、一例として、図４（ｂ）には、上記コンパイラを用いたコンパイルにより第３記述４３０，第３変換記述４４０から得られたアセンブラコード４３１，４４１が記載されており、第３記述４３０のＲＯＭ容量は２６バイト、第３変換記述４４０のＲＯＭ容量は８バイトとなっている。
【００５３】
このため、コード生成ツール１００では、上記コンパイラが用いられる場合、第３記述４３０を含む原ソースコードに対して、第３原記述パターン４００及び第３変換パターン４１０を用いた置換を行うことで、ＲＯＭ容量が低減すると判定される。そして、原ソースコードに対し該置換を行うことで新ソースコードが生成される。
【００５４】
また、原ソースコードには、異なる原記述パターンに対応する各原記述が重複して記載されている場合があり、このような場合には、コード生成ツール１００では、一部が重複している複数の記述が、それぞれ原記述として検出される。
【００５５】
具体例を挙げて説明すると、図５に記載の第４制御モデル５００は、ｆｌｏａｔ型の変数ｖ１，ｖ２を加算すると共に、加算結果とｆｌｏａｔ型の変数ｖ３のうち、値が小さいほうを出力値とし、さらに、該出力値の絶対値を最終的な出力値とする処理を示している。コード生成ツール１００では、この第４制御モデル５００から第４記述５１０が生成される。
【００５６】
この第４記述５１０には、第１原記述パターン２００に従った記述５１１と、第３原記述パターン４００に従った記述５１２が含まれており、第４記述５１０からは、記述５１１，５１２が、一部が重複している二つの原記述として検出される。
【００５７】
このような場合、コード生成ツール１００は、第４記述５１０に対し、第１変換パターン２１０，第３変換パターン４１０を順次適用し、第４変換記述５３０を生成する。すなわち、最初に、第４記述５１０に対し第１変換パターン２１０による置換が行われ、その次に、該置換が行われた第４記述５１０に対し、第３変換パターン４１０による置換が行われ、最終的に第４変換記述５３０が生成される。
【００５８】
なお、一例として、図５には、上記コンパイラにより第４記述５１０，第４変換記述５３０から得られたアセンブラコード５２０，５４０とが記載されており、第４記述５１０のＲＯＭ容量は４２バイト、第４変換記述５３０のＲＯＭ容量は１２バイトとなっている。
【００５９】
次に、コード生成装置として動作するＰＣ１が、制御モデル１５０から生成された原ソースコードから原記述を検出し、該原記述を変換記述に置換した新ソースコードを生成するコード生成処理について、図６に記載のフローチャートを用いて説明する。なお、本処理は、入力装置６０を介して受け付けた操作に応じて実行される。
【００６０】
Ｓ６０５では、ＰＣ１のＣＰＵ３０は、入力装置６０を介して受け付けた操作に応じて、予め登録された複数のコンパイラの中から、制御モデル１５０から生成されたソースコードをコンパイルするコンパイラを指定し、Ｓ６１０に処理を移行する。
【００６１】
Ｓ６１０では、ＣＰＵ３０は、制御モデル１５０から原ソースコードを生成し、指定されたコンパイラにより原ソースコードをコンパイルすると共に、得られたアセンブラコードから原ソースコードのＲＯＭ容量を計測し、Ｓ６１５に処理を移行する。
【００６２】
Ｓ６１５では、ＣＰＵ３０は、原記述パターンデータにアクセスして原記述の検出が行われていないいずれかの原記述パターンを選択すると共に、原ソースコードから選択の中原記述パターンに従った原記述を検出し、Ｓ６２０に処理を移行する。
【００６３】
Ｓ６２０では、ＣＰＵ３０は、選択中の原記述パターンに従った原記述が検出されたか否かを判定し、肯定判定が得られた場合には（Ｓ６２０：Ｙｅｓ）、Ｓ６２５に処理を移行すると共に、否定判定が得られた場合には（Ｓ６２０：Ｎｏ）、Ｓ６３５に処理を移行する。
【００６４】
Ｓ６２５では、ＣＰＵ３０は、変換方法データにアクセスして選択中の原記述パターンに対応する変換パターンを選択し、検出された各原記述を、該変換パターンにより変換記述に変換すると共に、原ソースコードにおける該原記述を変換記述に置換したソースコードを生成する。
【００６５】
続くＳ６３０では、ＣＰＵ３０は、新たに生成したソースコードを指定されたコンパイラによりコンパイルすると共に、該ソースコードのＲＯＭ容量を計測する。そして、該ＲＯＭ容量が原ソースコードのＲＯＭ容量よりも小さい場合には、選択中の原記述パターン、及びこれに対応する変換パターンを用いた置換により、原ソースコードのＲＯＭ容量を低減可能と判定し、Ｓ６３５に処理を移行する。
【００６６】
Ｓ６３５では、ＣＰＵ３０は、原記述パターンデータが示す全ての原記述パターンを用いた原記述の検出が終了したか否かを判定する。そして、肯定判定が得られた場合には（Ｓ６３５：Ｙｅｓ）、Ｓ６４０に処理を移行すると共に、否定判定が得られた場合には（Ｓ６３５：Ｎｏ）、Ｓ６１５に処理を移行する。
【００６７】
Ｓ６４０では、ＣＰＵ３０は、原ソースコードに対し、ＲＯＭ容量を低減可能と判定された原記述パターン及び変換パターンを用いた置換を行い、新ソースコードを生成し、本処理を終了する。
【００６８】
なお、複数の原記述パターン及び変換パターンがＲＯＭ容量を低減可能と判定される場合があるが、このような場合には、まず、これらの原記述パターン等のうちのいずれか一つが選択され、原ソースコードに対し、選択中の原記述パターン等を用いた置換が行われる。
【００６９】
その後、未選択のいずれかの原記述パターン等が選択されると共に、選択済みの原記述パターン等を用いた置換が行われた原ソースコードに対し、新たに選択された原記述パターン等を用いた置換が行われる。そして、ＲＯＭ容量を低減可能な全ての原記述パターン等が選択されるまで該処理を繰り返すことで、新ソースコードが生成される。
【００７０】
このため、原ソースコードから複数の原記述パターンに対応する原記述が検出された場合であっても、これらに対応する複数の変換パターンにより原ソースコードの置換を行うことができる。
【００７１】
また、用いられるコンパイラの種類によっては、どの原記述パターン及び変換パターンを用いた置換を行ったとしても、原ソースコードのＲＯＭ容量を低減できないという場合もある。このような場合には、新ソースコードは生成されず、ＲＯＭ容量の低減ができない旨がディスプレイ１０に表示される。
【００７２】
このようなコード生成処理によれば、制御モデル１５０から生成された原ソースコードにおけるテンポラリ変数の使用方法が、指定されたコンパイラにとってＲＯＭ容量を抑制するうえで好適では無いという場合には、該使用方法をより好適なものに改変することができる。このため、どのような種類のコンパイラが指定された場合であっても、制御モデル１５０に基づきＲＯＭ容量を抑制可能なソースコードを生成することができる。
【００７３】
また、ＲＯＭ容量を抑制するうえで好適なテンポラリ変数の使用方法として、様々なパターンが存在すると考えられるが、本実施形態のコード生成ツール１００によれば、使用方法のパターンに応じて、予め原記述パターン及び変換パターンを設定しておくことができる。そして、各原記述パターンについて、対応する原記述の置換により原ソースコードのＲＯＭ容量を低減可能か否かが個別に判定され、ＲＯＭ容量を低減可能と判定された原記述パターン及び変換方法による置換のみが実施される。
【００７４】
したがって、原ソースコードに対し、様々なパターンでテンポラリ変数の使用方法を改変することができ、原ソースコードのＲＯＭ容量をより一層低減させることができる。
ところで、既に述べたように、各原記述パターン及び変換パターンを用いた置換によりＲＯＭ容量が低減するか否かは、用いられるコンパイラにより異なるものとなる。これに対し、コード生成ツール１００では、複数の異なるコンパイラ毎に、ＲＯＭ容量を低減可能な原記述パターン及び変換パターンによる置換を行った場合の新ソースコードのＲＯＭ容量を計測し、計測結果を開発者に提示する機能を有している。
【００７５】
以下では、コード生成装置として動作するＰＣ１が、コンパイラ毎に新ソースコードを生成し、各新ソースコードのＲＯＭ容量を提示するコンパイラ判定処理について、図７に記載のフローチャートを用いて説明する。なお、本処理は、入力装置６０を介して受け付けた操作に応じて実行される。
【００７６】
Ｓ７０５では、ＰＣ１のＣＰＵ３０は、制御モデル１５０から原ソースコードを生成すると共に、入力装置６０を介して開発者により指定された複数のコンパイラをＲＯＭ容量の比較を行うコンパイラとし、Ｓ７１０に処理を移行する。
【００７７】
Ｓ７１０では、ＣＰＵ３０は、ＲＯＭ容量の比較を行う複数のコンパイラの中から、新ソースコードの生成が行われていないいずれかのコンパイラを選択し、Ｓ７１５に処理を移行する。
【００７８】
Ｓ７１５では、ＣＰＵ３０は、選択中のコンパイラにより原ソースコードをコンパイルすると共に、原ソースコードのＲＯＭ容量を計測する。
続くＳ７２０〜Ｓ７４０では、ＣＰＵ３０は、コード生成処理のＳ６１５〜Ｓ６３５と同様の処理により、選択中のコンパイラが用いられる場合に、原ソースコードのＲＯＭ容量を低減可能な原記述パターン及び変換パターンを判別する。
【００７９】
そして、Ｓ７４５では、ＣＰＵ３０は、原ソースコードに対し、ＲＯＭ容量を低減可能な原記述パターン及び変換パターンを用いた置換を行い、新ソースコードを生成すると共に、選択中のコンパイラにより該新ソースコードをコンパイルし、ＲＯＭ容量を計測する。
【００８０】
続くＳ７５０では、ＣＰＵ３０は、ＲＯＭ容量の比較を行うコンパイラ全てについて、新ソースコードの生成がなされたか否かを判定する。そして、肯定判定が得られた場合には（Ｓ７５０：Ｙｅｓ）、Ｓ７５５に処理を移行すると共に、否定判定が得られた場合には（Ｓ７５０：Ｎｏ）、Ｓ７１０に処理を移行する。
【００８１】
Ｓ７５５では、ＣＰＵ３０は、ディスプレイ１０に、各コンパイラを用いた場合における原ソースコードのＲＯＭ容量と新ソースコードのＲＯＭ容量とを表示し、本処理を終了する。なお、各コンパイラを用いた場合の原ソースコードのＲＯＭ容量と新ソースコードのＲＯＭ容量の比較結果を表示しても良いし、これらのＲＯＭ容量の差分を表示しても良い。
【００８２】
このコンパイラ判定処理により、開発者は、異なる種類のコンパイラが用いられる各場合について、テンポラリ変数の使用方法を改変した新ソースコードのＲＯＭ容量を把握することができ、これに基づきプログラム開発に用いるコンパイラを選定することができる。このため、プログラム開発に用いるコンパイラを、より適切に選定することが可能となる。
【００８３】
［他の実施形態］
（１）本実施形態のコード生成処理のＳ６２５，Ｓ６３０では、選択中の原記述パターンにより検出された原記述を変換記述に置換した原ソースコード全体のコンパイルが行われる。そして、置換により原ソースコード全体のＲＯＭ容量が低下する場合には、選択中の原記述パターン及び対応する変換パターンを用いた置換により、ＲＯＭ容量の低減が可能であると判定される。
【００８４】
しかしながら、これに限らず、例えば、検出された一の原記述から変換記述を生成し、原ソースコード全体ではなく、原記述と変換記述に対するコンパイルを行い、各記述のＲＯＭ容量を計測しても良い。そして、変換記述のＲＯＭ容量が原記述のＲＯＭ容量よりも小さい場合には、選択中の原記述パターン等による置換によりＲＯＭ容量の低減が可能であると判定しても良い。
【００８５】
こうすることにより、処理負荷を抑えつつ、同様の効果を得ることができる。
（２）また、本実施形態では、コード生成ツール１００において予め設定されている原記述パターン及び変換パターンの具体例として、第１〜３原記述パターン２００〜４００及び第１〜３正常パターン２１０〜４１０を例示した。しかしながら、これに限定されること無く、様々な原記述パターン及び変換パターンを用いることができる。
【００８６】
また、コード生成ツール１００を、新たな原記述パターン及び対応する変換パターンの追加を可能な構成としても良い。これにより、原ソースコードに対し、より様々なパターンでテンポラリ変数の使用方法を改変することができ、原ソースコードのＲＯＭ容量をより一層低減させることが可能となる。
【００８７】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【００８８】
本実施形態のコード生成ツール１００がコード生成プログラムに相当する。
また、第１〜３変換パターンが、変換方法に相当する。
また、コード生成処理のＳ６１０が生成手段に、Ｓ６１５が検出手段に、Ｓ６２５が変換手段に、Ｓ６３０が判定手段に、Ｓ６４０が置換手段に相当する。
【００８９】
また、コンパイラ判定処理のＳ７０５が生成手段に、Ｓ７２０が検出手段に、Ｓ７３０が変換手段に、Ｓ７３５が判定手段に、Ｓ７４５が置換手段，計測手段に、Ｓ７５５が報知手段に相当する。
【符号の説明】
【００９０】
１…ＰＣ、１０…ディスプレイ、２０…ＨＤＤ、３０…ＣＰＵ、４０…ＲＯＭ、５０…ＲＡＭ、６０…入力装置、１００…コード生成ツール、１５０…制御モデル、２００…第１原記述パターン、２１０…第１変換パターン、３００…第２原記述パターン、３１０…第２変換パターン、４００…第３原記述パターン、４１０…第３変換パターン。
【図１】
2013161220.tif 000003
【図２】
2013161220.tif 000004
【図３】
2013161220.tif 000005
【図４】
2013161220.tif 000006
【図５】
2013161220.tif 000007
【図６】
2013161220.tif 000008
【図７】
2013161220.tif 000009