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

147名前は開発中のものです。:2006/04/16(日) 03:25:20 ID:aygEIUBS
> 格ゲーのモーションをCで書いたら相手のモーションと同時実行するために
マルチスレッドが必要だったり、

んなあほなww

も前は、キャラクターごとにスレッドを作るのかw
普通は、ゲームでは非プリエンプティブなマルチスレッドを使う。
つまり、コストの低い、擬似タスクな。
あと、モーションは、デザイナにまかせたりするので、スクリプトで制御することも多いよ。
148146:2006/04/16(日) 09:51:53 ID:NIJWxfjn
まあ自分はスクリプト制御です。上のは反語表現というか、
酔ってたせいで何に煽ってるのか分からない煽り口調になってるしw

>非プリエンティブなマルチスレッド
は一般的なOS+Cでは不可能ですよね。機械語で書く場合でしょうか。
それともsetjmpで無理矢理実装とか?
149名前は開発中のものです。:2006/04/16(日) 14:12:25 ID:P72bJmUy
>>148
コンソールの話だと思われ。
時代遅れの発想なんであまりやって欲しくないけどね。
150名前は開発中のものです。:2006/04/16(日) 16:14:41 ID:F+evVwwX
>>146の疑問はもっともだと思うよ。
今はまだそれ以前の部分で躓いていて
問題を先送りにしているが、いずれ考えなきゃいけない部分だと
俺も思っている。
インタプリタは難しいんで、MIDLコンパイラみたいに
スクリプトからC++ソース生成じゃ駄目かなあ?
151146:2006/04/17(月) 01:06:45 ID:M8YTTZ7z
>C++ソース生成
用途によりますよね。
ギャルゲーやRPGなら大丈夫だけど、アクション系のゲームだと前述のような問題が。
自分はRPGを製作中ですが、複数キャラを同時に歩かせたりメッセージ表示しながらアニメしたりと
「スクリプトのシンクロ実行」を実装する予定なので、頑張ってインタプリタを書いてます。


基本的にCとかは1スレッドにつき1つしかプログラムの「筋」を持てない。
で、ゲームのメインスレッドというのは大抵メッセージループを回す構造になってるわけで、
ループ回しつつ逐次実行のコードを同時に走らせようと思ったら別スレッドにするか
スクリプトとして(もしくはスクリプト風に)実行順序をデータとして持っておいて
ループで実行するしかない、というのが前提条件かと。

最近「生成的プログラミング」とやらが流行ってるお陰で
大抵の言語に出来のよいパーサが開発されたり、
継続やらモナドやらExpressionTemplateやら「言語内言語」に関する技術がたくさん出てきたりしているので、
その辺をゲーム開発に取り込んでいったら面白いんじゃないか、と思う次第であります。
152名前は開発中のものです。:2006/04/17(月) 01:19:59 ID:2X7IXBs2
俺も同じようなことやってます。
某ステフでアクションRPGのスクリプトを作ってますが、シンクロでは悩まされます。
試行錯誤であーでもないこーでもないと何とかやってますが、地味に面白いですよねw
153名前は開発中のものです。:2006/05/10(水) 15:25:54 ID:BR/3osvo
保守age
154名前は開発中のものです。:2006/05/10(水) 15:31:42 ID:5no3yNph
>>151
詳細希望
155名前は開発中のものです。:2006/05/11(木) 23:55:49 ID:OvObgVlQ
詳細もなにも一言で要約できるぞ。

boost::spirit使ってみろ、と。
156名前は開発中のものです。:2006/05/12(金) 01:33:27 ID:sXlqKymr
いや、パーザじゃなくてシンクロ実行のほうじゃないの?
157151:2006/05/14(日) 21:20:12 ID:VGwK5BXt
模式的にコードを書くと、
pTaskをタスクオブジェクト(clock()でアニメ等を一コマ進める)
へのポインタとして、

case WM_TIMER:

if (pTask == NULL)
 pTask = ScriptEngine.EvalNext(); //スクリプトを1ステップ実行
}
if (!pTask->clock()) {
 delete pTask; pTask = NULL;
}

シンクロ処理は
class Sync : Task {
 Task*[] _tasks;
public:
 bool clock() { for (...) { _tasks[i]->clock(); }
};
みたいな感じで行けます。

158151:2006/05/14(日) 21:21:52 ID:VGwK5BXt
スクリプトは以下のような感じで、

えっと…(sleep 10)どうしようか。wait

これを
・全角文字を""で囲む
・全体を'()で囲む
と処理すると

'("えっと…" (sleep 10) "どうしようか。" wait)

というschemeコードになります。リストの要素要素がEvalNextで返されるTaskです。
現在エンジンにはvismというschemeライブラリを使っていますが、
公開停止しているのと微妙に仕様が合わないのとで、現在手書きを検討しています。
159名前は開発中のものです。:2006/05/19(金) 13:39:30 ID:Gqm6Z0J6
なるほど
そのやり方覚えておこう
160名前は開発中のものです。:2006/07/15(土) 03:22:31 ID:+R4TsQjQ
ほぼスクリプト部完成しますた。
と、チラシの裏
161名前は開発中のものです。:2006/09/01(金) 23:48:53 ID:/m07WVDn
良スレあげ
162名前は開発中のものです。:2006/09/02(土) 13:11:40 ID:VymI6uhU
ギコBASICのまとめWikiが落ちたんだが
ttp://onigiri.s3.xrea.com:8080/delphi/index.php?cmd=read&page=gikobasic

だれか所在を知らないか?
163名前は開発中のものです。:2006/09/29(金) 12:41:28 ID:SBqDXED0
残念ながら・・・
164名前は開発中のものです。:2006/09/29(金) 12:43:17 ID:DcIeecDs
そうでげしたか…
165名前は開発中のものです。:2006/10/02(月) 16:55:37 ID:3LC0p1Pp
ギコベなくなったのかー!
使わせて貰ったことあるからちと悲しい
166名前は開発中のものです。:2006/10/02(月) 17:06:00 ID:yaGw0AJA
wikiが落ちて
そして誰も作らないだけだぜ
167名前は開発中のものです。:2006/10/06(金) 01:32:30 ID:lE7We31z
今になって思えば、スクリプト部の文法は
中途半端にHSP互換じゃなくて、完全互換の方がよかったのかなと

チラシの裏
168名前は開発中のものです。:2007/04/14(土) 14:31:45 ID:sT9fQnfw
インタプリタ作成は難しいですね。
最近、言語自体に興味を持って作り始めましたが
数字と演算子の数を出力するぐらいしか出来ません。
169名前は開発中のものです。:2007/07/12(木) 20:51:47 ID:JmSceXMO
シナリオ用スクリプトを構造化することってできるだろうか。
グローバルスコープなフラグとラベルジャンプでできたスクリプトでは、
フラグの一貫性やループに陥っていないか等の解析が手動でも自動でも
著しく困難になる。
凝り性のシナリオライターが作ったスパゲッティフローチャートを
if, for, while & 関数・サブルーチンだけで書き下せると思う?
170名前は開発中のものです。:2007/07/15(日) 01:32:20 ID:X6VsKP49
思う
171名前は開発中のものです。:2007/07/23(月) 04:01:14 ID:zHMsQNv9
>>169
色んな問題をスクリプトだけで解決しようとしすぎじゃね?
172名前は開発中のものです。:2007/07/30(月) 23:04:20 ID:mh1RLDn7
>>169
俺がxmlの研究目的で作ってるxmlベースの言語が
narrative documentをプログラマブルに扱えるものでPLの制御構造と組み込みライブラリと例外処理と文章に対するメタデータ記述能力を持ってるが
こいつはメモリ上に中間コード吐いてインタープリタで直に実行するかほかの言語のソースコード吐くようになってて要するにEiffelなんだが

>シナリオ用スクリプトを構造化 は出来てるぞ。
ただし、ライブラリは組み込みのみでそのライブラリを作るのはプログラマって割り切ってる。
あと要素の評価結果が文字列なら標準出力へ出力するんだけどその標準出力を定義するのもプログラマ。
つまり組み込みライブラリと出力先をADVエンジン用に実装すればADVエンジンへの応用が利く。

こういうもんを作れば
>シナリオ用スクリプトを構造化すること
スパゲッティフローチャートをif, for, while & 関数・サブルーチンだけで書き下す
は実際に出来てる。

あと言語そのものがxmlなんでXSLTやXSL-FOでhtmlやPDFへ"スパゲッティフローチャート"を変換できる。
そのためにメタデータ記述能力を持たせた。
あとxmlそのものが機械的に管理されることを前提に
設計されてるのでIDEなんかが作りやすいメリットもある。

欠点は専門的すぎてちょっとしたhypertext systemを実装できるくらいの学術知識が必要かな。情報系の卒論向きだな。
ラベルによるgotoは全部xlinkだったりするし。
173名前は開発中のものです。:2007/07/30(月) 23:06:52 ID:mh1RLDn7
結局、出来たとしても>>171の言うように問題の切り分けとそれを解決する人間を別々に用意する必要があるよ。
そういう前提で作ってるし。
174名前は開発中のものです。:2007/08/02(木) 18:38:56 ID:IqLuhQEt
>ラベルによるgoto
結局スパゲティかよ('A`)
175名前は開発中のものです。:2009/01/02(金) 22:08:59 ID:qteump49
スクリプトエンジン制作中
目的に合わせた複数の言語を作り、共通の中間コードにコンパイルして、共通のVMで動作させる予定なのだが、VMの仕様で悩み中
最初はCOMET互換のものを作ってたんだが、スタックマシンの方がシンプルになりそうな気がする
フラグレジスタとか考えなくていいし、そもそもソフトウェアで動作させるんだからレジスタとかいらなくね?みたいな
他のスクリプトのVMの実装を知らないんだが参考までに、おまいらの意見をいただけないでしょうか
176名前は開発中のものです。:2009/01/03(土) 19:42:11 ID:LhDhqbiv
俺のスクリプトにVMなど存在しない
ただ内部データ(登場時刻、位置、画像、移動パターン)に変換するのみ
177名前は開発中のものです。:2009/01/04(日) 23:05:16 ID:ZWLW/6f7
JVMとか.NETのCLR(つかmono)参考にしたらどうだろうか
前にゲーム製作技術板でゲーム用DSLにJVMのサブセット実装してた人がいたよ。
(しかもコンパイラはJavaを使うらしいw)

まあ、再発明になると面白みがないだろうがポータブルな実装つくるのもいいんでないのかな?
178名前は開発中のものです。:2009/01/04(日) 23:06:00 ID:ZWLW/6f7
ごめん、ム板と勘違いしてたわ
179名前は開発中のものです。:2009/02/03(火) 21:19:13 ID:AbbFosQL
速度の面でどう頑張ってもYpsilonに勝てないので自作やる気がなくなった
180名前は開発中のものです。:2009/02/06(金) 12:39:51 ID:sIJNyM9N
>>179
What is "Ypsilon"?
181名前は開発中のものです。:2009/02/06(金) 20:54:52 ID:MuHkM83C
>>179
もしかして、リトルウイングのScheme処理系?
http://www.littlewingpinball.com/contents/ja/ypsilon.html
182名前は開発中のものです。:2009/10/16(金) 20:40:03 ID:ZrBg9mxX
183名前は開発中のものです。:2010/07/27(火) 16:50:26 ID:Wuh12NAU
ゲーム屋就職用にGauche忍びこませたexe作ろうと思ったけど、どうあがいても相手のマシンにGaucheが入ってないとダメみたいだからあきらめた
ニートで何が悪い
Scheme処理系作ったら本気出す
184名前は開発中のものです。:2010/08/08(日) 21:17:40 ID:JbWPlsYy
185名前は開発中のものです。:2010/09/30(木) 20:19:23 ID:RMd6Ohi3
>>176
なんという定義ファイル
186名前は開発中のものです。:2011/07/07(木) 04:18:10.46 ID:zE+DGvJm
過疎ってるけど、ここが一番あってる気がするからageるね。

できるだけ単純に書けて、単純な出力をするスクリプト言語を作った。
定義ファイル代わり+シーケンスも多少は書けるってとこ。
興味があったらどうぞ。
ttp://kushi.lv9.org/teco/index.html
187名前は開発中のものです。:2011/07/07(木) 12:17:50.82 ID:kgWPk38H
【Lua】組み込み系言語総合 その4【Squirrel】
http://hibari.2ch.net/test/read.cgi/tech/1301414458/

こっちの方が近いと思う。
188186:2011/07/07(木) 13:21:45.30 ID:zE+DGvJm
誘導ありがとう。
ゲーム用途を考えてたからここに書き込んだんだけど、あんまり関係ないのかな?
このスレの最初の方の人達に見てもらいたくって。
向こうにも書き込んでみようかな。
189名前は開発中のものです。:2012/02/01(水) 23:20:06.94 ID:2Eijr2Ns
保守
190 忍法帖【Lv=32,xxxPT】 :2012/02/04(土) 12:03:45.82 ID:YBcddhiB
落葉
191名前は開発中のものです。:2012/03/04(日) 23:48:04.51 ID:IYAv19lc
書き込みテスト
192 【28.4m】 電脳プリオン ◆GDSZsj1GHk :2012/03/10(土) 20:57:35.48 ID:KQUwO9Nk BE:152028735-PLT(12078)

両方使ったことない
193名前は開発中のものです。:2012/04/24(火) 10:34:48.93 ID:wzzo7GXM
194名前は開発中のものです。:2012/06/03(日) 18:46:09.62 ID:tMZzvBuc
保守
19567-1-22-200.tcso.qwest.net:2012/08/07(火) 11:49:11.20 ID:c5hb27GU
hoshu
196名前は開発中のものです。
保守