はじめに
Mathematica の中核となり,木を中心とする記号言語は,Cコードの階層ビューを Mathematica 式として使うのに大変適したものである.この記号言語は,Cコードの作成,操作,最適化に Mathematica 言語を使用することをサポートする.
Mathematica のコード生成ツールでは,この言語のみが使用される.また,自分のコードを操作する場合にSymbolicCを使うことができる.
SymbolicCを使うには,まずパッケージをロードする必要がある.
| In[1]:= |
これでCプログラムの要素を構築し始めることができるようになった.以下は変数の宣言を表す.
| In[2]:= |
| Out[2]= |
SymbolicC式の重要な機能に,これらの式は不活性であるということがある.つまり,これらの式は未評価の形式のままで自らを評価して返す.
| In[3]:= |
関数を式として保持することも,関数を変換してCコードを示す文字列にすることもできる.
| In[5]:= |
| Out[5]= | ![]() |
Cプログラムからインポートする
現在のところCプログラムからインポートする機能は,Mathematica に含まれていない.このため,Cプリプロセッサを使ったり,文脈依存の構文解析を扱ったりする際にさまざまな問題に遭遇する.このような問題にもかかわらず,SymbolicCはCプログラムを作成するのに大変便利なものである.
CのプリプロセッサはSymbolicCで表すことができる点で便利であるが,厳密な木の形で表示するのが難しいプログラムもあるので,新たな問題を引き起すことにもなる.その例を下に示す.
#ifdef __cplusplus
extern "C" {
#endif
int function( int arg);
#ifdef __cplusplus
}
#endif
C言語を構文解析するには,入力の意味と文脈を理解する必要がある.例えば次の例は,型aに対するポインタであるbの宣言であるのか,それとも2つの変数aおよびbの掛け算であるのかどうかがはっきりしない.
a * b

