Maple für Professional
Maple für Akademiker
Maple für Studenten
Maple Personal Edition
Maple Player
Maple Player für iPad
MapleSim für Professional
MapleSim für Akademiker
Maple T.A. - Testen & beurteilen
Maple T.A. MAA Placement Test Suite
Möbius - Online-Courseware
Machine Design / Industrial Automation
Luft- und Raumfahrt
Fahrzeugtechnik
Robotics
Energiebranche
System Simulation and Analysis
Model development for HIL
Anlagenmodelle für den Regelungsentwurf
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematikausbildung
Technik
Allgemein- und berufsbildende Schulen
Testen und beurteilen
Studierende
Finanzmodelle
Betriebsforschung
Hochleistungsrechnen
Physik
Live-Webinare
Aufgezeichnete Webinare
Geplante Veranstaltungen
MaplePrimes
Maplesoft-Blog
Maplesoft-Mitgliedschaft
Maple Ambassador Program
MapleCloud
Technische Whitepapers
E-Mail Newsletters
Maple-Bücher
Math Matters
Anwendungs-Center
MapleSim Modell-Galerie
Anwenderberichte
Exploring Engineering Fundamentals
Lehrkonzepte mit Maple
Maplesoft Welcome-Center
Resource-Center für Lehrer
Help-Center für Studierende
CodeGeneration オプション
このヘルプページでは CodeGeneration パッケージの言語変換コマンドで使用するオプションについて説明します。
オプション
coercetypes=value
型強制を行うかどうかを指定します。値は true か false の何れかで、デフォルトは true。coercetypes=true (または coercetypes のみ)のオプションを与えると、明示的な型強制が適宜生成されます。定数は適切な型に自動的に変換されます。
declare=[declaration(s)]
変数の型を指定します。各宣言は の形式を取り、varname は変数名で、vartype は CodeGeneration が認識できる Maple 型名(TranslationDetails 参照)のひとつ。このオプションを用いて指定された宣言は、入力コード内のどの型宣言にも優先します。declare オプションは、プロシージャや計算シーケンスだけに使用するためのものです。
deducereturn=value
明示的なリターン文の推論を試みるかどうかを指定します。指定可能な値は true または false で、デフォルト値は true。deducereturn=true (または deducereturn のみ)のオプションが与えられたとき、トランスレータは暗黙リターン文を探し、見つかったら明示的なリターン文に変換します。
deducetypes=value
自動的に型推論を行うかどうかを指定します。指定可能な値は true または false で、デフォルト値は true。deducetypes=true (または deducetypes のみ)のオプションが与えられたとき、トランスレータは変数の前後関係からその型の推論を試みます。このとき、推論ができない場合はデフォルトの型を割り当てます。deducetypes=false のオプションが与えられたときは、型宣言のない変数すべにデフォルトの型を割り当てます。
defaulttype=value
デフォルトの型を指定します。デフォルトの型としては Maple のあらゆる型が指定でき、指定値は CodeGeneration が受け付けるより狭い範囲の型にマッピングされます(可能であれば指定された型を包括する最小の型を選択します)。型が CodeGeneration により認識されない場合(TranslationDetails 参照)、デフォルトの型を採択します。例えば、float は numeric、posint は integer、symbol は double となります。
digits=value
既知定数の浮動小数表示の桁数を指定します。値は正の整数で、デフォルトは Digits における設定値。変換先言語によっては浮動小数ではなく文字定数が用いられ、その場合 digits オプションはその文字定数の精度に影響しません。
expandarrays=value
配列の代入文の変換方法を指定します。(ここで、「配列」とは TranslationDetails で記載されている様々な Maple データ構造を指します。)指定可能な値は true と false の何れかで、デフォルト値は true。このオプションは、配列コピーのサポートが内蔵されていない言語に適用されます。オプション expandarrays=true (または expandarrays のみ)が指定されたとき、 という命令文(ただし、 と は両方配列)に対し要素ごとの代入文が生成されます。expandarrays=false のオプションが指定された場合は、y から x への単純な代入文に変換され、それを適宜変換先言語における配列代入文で置き換える必要があります。
functionprecision=value
入力中の関数の引数や戻り値に現れる式の数値精度を指定します。指定可能な値は single または double で、CodeGeneration[Fortran] 関数では generic も指定可能。デフォルト値は Fortran では generic、その他の CodeGeneration 関数では double。このオプションは、関数名の変換のみに影響し、変数の精度には影響しません。
limitvariablelength=value
6 文字を超える変数名を置き換えるかどうかを指定します。指定可能な値は true または false で、デフォルト値は true。 このオプションは CodeGeneration[Fortran] コマンドに対してのみ利用可能です。Fortran 77 標準では、変数名は 6 文字以下でなければなりません。長い名前が自動的に置き換えられるのを防ぐには、limitvariablelength=false のオプションを指定します。
optimize=value
最適化を行うかどうかを指定します。指定可能な値は true、false、tryhard の何れかで、デフォルト値は false。optimize=true (または optimize のみ)が指定された場合、Maple 入力は変換前に `codegen[optimize]` で最適化されます。optimize=tryhard が指定された場合は、Maple 入力はより強力な内部オプティマイザを用いて最適化されます。最適化についての詳細は TranslationDetails をご覧ください。optimize オプションは、プロシージャと計算シーケンスのみに対応しています。
output=value
出力の形式を指定します。値は任意の名前または文字列で、string という名前自体の指定可能です。デフォルト値は terminal という名前で、そのときはフォーマット済み出力がターミナルに印字されます。値として名前または文字列が与えられたときは、結果はその名前のファイルに追加されます。output=string が指定された場合は、結果を文字列に入れて返します。この文字列は、その後割り当てたり変形したりできます。他の出力オプションでは結果は Maple オブジェクトとして返されませんが、二次的な作用として印字されます。
precision=value
浮動小数の変数や定数で使う精度を指定します。指定可能な値は single と double で、デフォルト値は double。
reduceanalysis=value
簡易化された解析を行うかどうかを指定します。指定可能な値は true か false の一方で、デフォルト値は false。このオプションは、変換すべき Maple コードが計算シーケンスを表す方程式のリストのときのみ利用可能で、モジュールやプロシージャには適用できません。reduceanalysis=true (または reduceanalysis のみ)のオプションが指定された場合、計算シーケンスの解析・変換は一行ごとに行われます。デフォルトの動作はこれとは対照的に、ひとつの代入文の解析で取得した型情報をその後の代入文の解析に適用するという、計算シーケンスを総合的に解析するものです。このようなフル解析を行えば変換後のコードで型の不整合が起きる可能性は低下しますが、reduceanalysis=true オプションを使えば変換に必要な時間とメモリは大幅に削減されます。
resultname=value
入力に名前がついていないときの結果の名前(生成されたプロシージャ、または生成された代入文の左辺の変数)を指定します。値は任意の文字列で、指定の無い場合や推論できない場合は自動的に生成された名前が使用されます。
returnvariablename=value
変換後のプロシージャの戻り値の変数名を指定します。これは、戻り値を格納するために新しい変数を作成する必要がある場合のみ使用されます。値は任意の文字列で、指定の無い場合は自動的に生成された名前が使用されます。
互換性
optimize オプションは Maple 15 で更新されました。
例
以下の例のほとんどは CodeGeneration[C] 関数を使用していますが、これらのオプションは上記の Options セクションで別途記載のあるものを除いて CodeGeneration の他の関数すべてで利用可能なものです。
with(CodeGeneration):
coercetypes オプション
下記の呼び出しでは、変数 y が浮動小数型に型強制されます。2 番目の呼び出しではこの型強制は行われません。
C([z=x+y], declare=[x::numeric, y::integer]);
z = x + (double) y;
C([z=x+y], declare=[x::numeric, y::integer], coercetypes=false);
z = x + y;
declare オプション
次の例では、 が浮動小数型として宣言されているため浮動小数値が代入されます。宣言が無ければトランスレータにより整数型であると推論され整数値 1 の代入文となります。
C([x=1], declare=[x::float]);
x = 0.1e1;
deducereturn オプション
次の Maple プロシージャは呼び出されたときに値 10 を返しますが、オプション deducereturn=false を指定して変換すると戻り値が void 型の C 関数を生成します。
f := proc(x::Vector(4), n::integer) local i; for i to 4 do x[i] := 10 end do; end proc:
C(f, deducereturn=false);
void f (int x[4], int n) { int i; for (i = 1; i <= 4; i++) x[i - 1] = 10; }
deducetypes オプション
次の例では、 にデフォルトの numeric 型が与えられ、浮動小数値が代入されます。オプションの指定がなければ、整数型と推論され整数値 1 の代入文が生成されます。
C([x=1], deducetypes=false);
defaulttype オプション
次の例では、型指定の無い変数は numeric ではなく整数型を与えられます。従って、変換は double の代わりに int の C 言語宣言を生成します。
f := proc(x) return x; end proc:
C(f, defaulttype=integer);
int f (int x) { return(x); }
digits オプション
次の呼び出しは、digits オプションが既知定数の変換に及ぼす影響を示します。
C(Pi, digits=20);
cg = 0.31415926535897932385e1;
expandarrays オプション
次の例では、戻り値を格納するため変数 が自動的に生成されます。最初の呼び出しでは、要素ごとにコピーを行う命令文が生成され、2 番目の呼び出しでは配列の名前だけの代入文となります。後者の場合、出力の代入文 および を適当な C 命令文(例えば、ユーザ定義の C 関数)で置き換える必要があります。
f := proc(x::Vector(2), y::Vector(2), z) if z > 0 then x else y end if; end proc:
C(f);
void f ( double x[2], double y[2], int z, double cgret[2]) { if (0 < z) { cgret[0] = x[0]; cgret[1] = x[1]; } else { cgret[0] = y[0]; cgret[1] = y[1]; } }
C(f, expandarrays=false);
void f ( double x[2], double y[2], int z, double cgret[2]) { if (0 < z) cgret = x; else cgret = y; }
functionprecision オプション
次の例では、Fortran で普通関数の代わりに倍精度関数の使用を指定します
Fortran(sin(x), functionprecision=double, resultname=w);
w = dsin(x)
optimize オプション
次の例では、計算シーケンスを最適化してから変換します。
C([x=y*z, w=5.0*y*z], optimize);
x = y * z; w = 0.50e1 * x;
output オプション
次の例では結果を文字列に入れて返します。
s := C([y=sin(x)], output=string);
precision オプション
次の例では、単精度の変数・定数の生成を指定します。
f := proc(x) return x+2.0; end proc:
C(f, precision=single);
float f (float x) { return(x + 0.20e1f); }
reduceanalysis オプション
次の例の最初の呼び出しではフル解析を行います。トランスレータは、2 番目の代入の解析中に変数 が整数型を与えられている事が分かるので必要な型強制を加えます。2 番目のコールでは、各代入文の解析・変換は以前の代入文の解析からの情報を利用することなく個別に行われます。
s := [x=1,y=x+2.0]:
CodeGeneration[C](s);
x = 1; y = (double) x + 0.20e1;
CodeGeneration[C](s, reduceanalysis);
x = 1; y = x + 0.20e1;
resultname オプション
次の例では、自動生成された名前ではなく指定された名前の変数に結果を代入します。
C(x^y, resultname="myresult");
myresult = pow(x, y);
returnvariablename オプション
次の例では、自動生成された名前の代わりに指定された名前を戻り値の変数に与えます。
f := proc(n) local i; for i to n do i*n end do end proc:
C(f, returnvariablename="myreturn");
int f (int n) { int i; int myreturn; for (i = 1; i <= n; i++) myreturn = i * n; return(myreturn); }
参照
CodeGeneration, Digits, TranslationDetails
Download Help Document