トップページgamedev
196コメント86KB

スクリプトコンパイラについて ( yac と lex も可 )

■ このスレッドは過去ログ倉庫に格納されています
000143901/11/07 15:31ID:GpFz7V+v
みなさんのスクリプトって、どんな感じですか?
(エロ)ゲームプログラマーには一番難しい所かもしれません。
yac と lex も可です。
000243901/11/07 15:32ID:GpFz7V+v
まず、話題フリ。
みなさんが作ったスクリプトコンパイラの仕様を教えてください。

1デファイン機能
 a 文字列中の中を実行部で置換可能
 b 文字列中の中をコンパイラで置換可能
 c 変数をコンパイラで置換可能
 d 全てのトークンを置換可能
 e C言語並みに全てのトークンを完全置換可能
 f その他、それ以上のことが出来る

2マクロ機能
 a 命令をまとめることが可能
 b MASMクラスのマクロが可能
 c ローカルラベルも使えて、色々なことをマクロ化できる
 d その他、それ以上のことが出来る

3計算式
 a 計算専用命令を持つ(addとかsubとか)
 b C言語並みの計算が出来る
 c 条件式でもC言語並みの計算が出来る
 d 式の最中に関数の返値を入れられる
 e その他、それ以上のことが出来る
000343901/11/07 15:33ID:GpFz7V+v
4関数
 a 単なるサブルーチンコール
 b ローカル変数を関数側で実装している
 c 関数で型の概念がある 変数、即値、文字列など
 d 返値が返せる(3−dタイプでは無くても良い)
 e その他、それ以上のことが出来る

5書式
 a 全角文字から始まる場合はメッセージ
 b 計算式から始まる場合は計算式
 c 書式は、BASIC形式 mes "メッセージ"
 d 書式は、ASM形式 mes メッセージ
 e 書式は、C言語形式 mes("メッセージ")
 f その他、それ以上のことが出来る

6構造化
 a if-else-endif が実装されている
 b if-elseif-else-endif が実装されている
 c if-else if-else-endif が実装されている
   ( else if を分けて書ける )
 d while-endwhile が実装されている
 e do-while が実装されている
 f for-endfor が実装されている
 g switch-case が実装されている
 h break が実装されている
 i endif,endwhile,endfor などが }記号や end でまとめられる
 j C言語形式の記号でブロック化が出来る
 k push等を駆使して、スクリプト側でどうにかブロック毎に
   ローカルレジスタを作れる
 l ブロック毎にローカルレジスタを簡単に作れる
 m その他、それ以上のことが出来る

7セーブ機能
 a 実行時にスクリプト自身を書き換えない
 b 単なるポインターセーブ
 c メッセージをカウントしてセーブ
 d サムネイルを表示可能
 e 極力、CGデーターなどはセーブデーター中に持たないで、
   (サムネイルは除く)ファイルネームなどしか保持しない。
000443901/11/07 15:33ID:GpFz7V+v
うちはへぼへぼなので、こんな感じです。

1デファイン機能
 a 文字列中の中を実行部で置換可能
2マクロ機能
 無し
3計算式
 a 計算専用命令を持つ(addとかsubとか)
4関数
 a 単なるサブルーチンコール
5書式
 d 書式は、ASM形式 mes メッセージ
6構造化
 該当無し
 BASICの if then が実装されている。行番号で飛ぶ
7セーブ機能
 a 実行時にスクリプト自身を書き換えない
 ゲームの頭でセーブされる
000543901/11/07 15:37ID:GpFz7V+v
>445
>もし出来ましたら、サンプルを出してもらえると嬉しいです。
>うちはこんな感じです。
>
>サンプル
>1
>2 set r1,0
>3
>4 add r1,10
>5 sub r1,30
>6 mes メッセージ
>7 goto 4
>8
>9 gosub 20
>10
>11 select r20,1,2,3
>12
>
>うちのはこんな感じなので、ラベル名が使えません。
>手でやり直しになるのでキツイです。

>>445
>あのー、いくらなんでも行番号ジャンプはヘボ過ぎです。
>ラベル機能ぐらいすぐ追加できるでしょうに。
>これだったらMASMのマクロ使ってスクリプト書いた方がよっぽどマシでっせ。
>(昔実際やったことある)

>451
>す、すみません。
>タイトルが多すぎて、コンパイラまで時間が回せないっす。
>昔はMASMを使っていたのですが、シナリオに渡すために自家製に変えました。
>今でもMASMの方が使いやすいです。

>452
>>>451
>lex yacc 勉強すれば一日でできると思います。

>>>439
>多分ですが、
>命令とデーターが一緒になっているアーキティクチャーで、
>命令長が固定ではないと思われます。
>その際にはラベルは前方参照の解決のために
>バックパッチの仕方がキーポイントなのではないでしょうか。
000643901/11/07 15:38ID:GpFz7V+v
>446 :にゃ ◆G4ogTrNQ :01/11/01 19:34 ID:mAxjGqQI
>グラフィカルなエディターです
>スクリプトは、中間コードに変換してゲームに組み込みます。
>ゲームごとに共通な部分はエディター上でもある程度実行できます。
>画面でみながらやっていくので、スクリプトをテキストとして入力するぶぶんは
>あまりないです。
>スクリプトっぽいところは
>演算とか、条件式の中身ぐらいでしょうか。
>
>とりあえず、参考までに
>
>1デファイン機能
> a 文字列中の中を実行部で置換可能
>(名前とか、色とかに)
>
>
>2マクロ機能
> 無し
>
>3計算式
> c 条件式でもC言語並みの計算が出来る
>変数はすべてグローバル。漢字のみ
>条件式のなかでのみ=は==として扱う。このほうがプログラマーでない人にはいいみたいです
>
>
>4関数
> a 単なるサブルーチンコール
>変数がすべてグローバルなので・・・
>ゲームごとのシステムは呼べるので十分かも
>
>書式
> f その他、
>メッセージ、計算式はそれぞれ、専用のエリアに入力
>
>
>6構造化
> b if-elseif-else-endif が実装されている
> g switch-case が実装されている
>(選択肢として)
>
>7.セーブはシステム側でおこなう。
>実行スクリプトの名前、実行ポインター、コールスタック、
>スクリプト修正時のための補助データ、
>あと変数そのた必要なもの
>
>みなさん
>画像エフェクトは何種類ぐらいつくっているんでしょうか
>さっきかぞえたら70ぐらいでした
000743901/11/07 15:39ID:GpFz7V+v
>447 :名無しさんNetBurst :01/11/01 19:59 ID:Q4tBwu9l
>1デファイン機能
> a 文字列中の中を実行部で置換可能
> b 文字列中の中をコンパイラで置換可能
> c 変数をコンパイラで置換可能
> その他。変数名に日本語使用可。即値も置換可。
>
>2マクロ機能
> その他。コマンド名定義リストを書き換えることによって比較的容易にコマンドの
> 追加修正ができる。コマンドは最大4つの即値/変数/式/文字列をパラメータと
> して持つことが出来る。ベースコマンドから派生コマンドを作ることが出来、
> 派生コマンド毎に各パラメータの即値の上限下限を設定できる。
> 派生コマンド名に日本語使用可。
>
>3計算式
> b C言語並みの計算が出来る (),+,-,*,/,%,!,!=,==が使用可能
> c 条件式でもC言語並みの計算が出来る
>
>4関数
> a 単なるサブルーチンコール
>
>5書式
> d 書式は、ASM形式 mes メッセージ
> その他。行頭の"@"をデリミタとして記述し、会話文は複数行に書くことが出来る。
>こんな感じ↓
>
>@会話 ゆかり VOICE00001
>   1行目。
>   2行目。
>@IF #和也と喧嘩した
>@表情変更 ゆかり・怒り
>@ELSEIF
>@表情変更 ゆかり・笑顔
>@ENDIF
>
>6構造化
> その他。制御文はIFY,IFN,IF〜ELSEIF〜ENDIF,GOTO,GOSUB〜RETURN,
> ONGOTO,ONGOSUB〜RETURNのみ。
>
>7セーブ機能
> a 実行時にスクリプト自身を書き換えない
> b 単なるポインターセーブ
>
■ このスレッドは過去ログ倉庫に格納されています