ソラマメ ブログ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 4人
オーナーへメッセージ
QRコード
QRCODE

気ままな一言

ご質問等、ページへのリンクはご自由に。気軽にコメントでもどうそ~
詳しいことは角川SIMのサポートセンターまでいらっしゃいませっ

世間知らずなので逆にいろいろ教えてください♪

2008年05月18日

LSLでプリプロセッサ

LSLでCやC++はでお馴染みのプリプロセッサを使ってみました。

プリプロセッサでは主に次のようなことができます。
・文字置換/マクロ展開
・外部ファイルの読み込み
・ソースの条件選択

詳しいことは検索すればたくさん出てきますので調べてもらえればと思います。

プリプロセッサを使うことでの一番の恩恵と言えば、
複数ファイルで定数を共有化することができるということでしょうか。
変数の値は共有化できませんが、関数なども簡単に使い回せるようになります。


使うプリプロセッサは何でもいいのですが、
今回はBorland C++ Compilerに含まれているものを使用します。
5.5であればユーザー登録すれば無料で利用できます。(以前は登録なしでダウンロードできた気がします)
ダウンロードしたらその中からcpp32.exeを取り出します。
これがプリプロセッサです。

あとは構文チェック用にlslintもダウンロードしておきましょう。

プリプロセッサの使い方ですが、
コマンドラインからの利用となりますので次のようなバッチファイルを用意しました。
これをコピペして適当なファイル名を付けて保存し、
そのバッチファイルにLSLファイルを投げ込めばプリプロセスと構文チェックを行ってくれます。
cpp32とlslintとバッチファイルは同じディレクトリに置いて下さい。

このまま使用すると
バッチファイルのあるフォルダにdstフォルダを作成し、
その下に変換後のファイルを出力します。
変換されたファイル名は<元ファイル名>.iになっています。
スクリプトにはこのファイルの中身を使用します。


但しこの方法にはデメリットもあります。
・エラー行がずれる。
・スクリプトが別ファイルになるので面倒。

cpp32の制限事項として以下のものもあります。
(オプションの指定方法が悪いのかも知れません)
・jumpを使用すると@でプリプロセスエラーが出る。
・コメントが消えたり、ソースレイアウトが崩れる。

変換後のソースを直接変更することはないと思いますのでコメント等は入らないと思いますが、
エラーの場所が探しにくくなるのは致命的です。


プリプロセッサにgccを使えばjump使用時のエラーはでません。
ですが、gccを使用するためにはcygwinなどをインストールする必要があるので
かなり手間になってしまいます。

ちなみにバッチファイルは後半をこんな感じにすれば動くと思います。

FOR /F %%I IN ("%1") DO (
	SET BASE_NAME=%%~nI
	SET BASE_PATH=%%~dpI
)
COPY %1 "%OUTPUT_DIR%\%BASE_NAME%.h">nul
PATH=%PATH%;C:\cygwin\bin\
gcc -P -E -C -I%BASE_PATH% "%OUTPUT_DIR%\%BASE_NAME%.h">"%OUTPUT_DIR%\%BASE_NAME%.lsl"
"%LSLINT_PATH%\lslint.exe" "%OUTPUT_DIR%\%BASE_NAME%.lsl"


正直、普通にスクリプトを書く分にはデメリットの方が大きいとは思います。
プリプロセッサの副作用についても注意が必要になりますしね。


なお、バッチファイルの動作等は保証致しませんのでご了承下さい。
また使い易いように編集してもらえればと思います。


同じカテゴリー(スクリプト)の記事画像
オセロみたいな物を作ってみた
パーティクルが出たり、出なかったり、らじばんだり
実行中のチェック勝手に外れる
スタックオーバー?
同じカテゴリー(スクリプト)の記事
 オセロみたいな物を作ってみた (2009-02-18 23:38)
 パーティクルが出たり、出なかったり、らじばんだり (2008-08-11 22:33)
 実行中のチェック勝手に外れる (2008-06-12 14:00)
 rezに失敗する~; ; (2008-06-06 02:18)
 Tips修正。。 (2008-05-26 23:50)
 llMessageLinkedの速度 (2008-05-15 03:14)
Posted by れむ at 14:18 │スクリプト
コメントありがとう♪
マクロの引数に,(カンマ)を使用すると、展開に失敗します。
リストを指定する場合には注意が必要です。
Posted by れむれむ at 2008年06月10日 13:44