- 1 名前:デフォルトの名無しさん mailto:sage [2005/05/06(金) 08:28:29 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化, それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 意味論に関する話題も歓迎です。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ (前スレ) 関連リンクは多分 >>2-10 あたり
- 655 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 21:55:27 ]
- …………… き ち が い ね ん ち ぁ く ち う 。 よ う ち ゅ う い ……………
- 656 名前:デフォルトの名無しさん [2005/07/05(火) 00:54:08 ]
- >>655
お前が一番の粘着だw
- 657 名前:デフォルトの名無しさん [2005/07/06(水) 21:55:12 ]
- VC++でlexファイル(lex.yy.c)をコンパイルすることはできますか?
Windows版のflexとbisonは見つけたんですが、よく考えたら gccで-ll(flexなら-lfl)オプションを付けないとコンパイルすることができない・・・ そもそも、gccがlflで何を取り込んでいるのかがわからず。 windowsでflex&bisonを使っているひとがいれば、教えていただけないでしょうか。
- 658 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 21:58:34 ]
- >>657
lfl は付けなくても平気。中に入っているのは確か main 関数だけだった筈だから
- 659 名前:デフォルトの名無しさん [2005/07/07(木) 12:19:19 ]
- >>657 >>658
yywrap()も入ってるよ。 以下の関数定義をどっかに入れれば大丈夫。 int yywrap(void) { return 1; }
- 660 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 18:00:12 ]
- PHPやPerlでは、変数を $var のように表します。
「$」と「var」のあいだにはスペースを入れることができません。 ということは、字句解析でトークンに分解するときに、「$」と「var」の2つに分解するのではなく、 「$var」というひとつのトークンとして認識しているのでしょうか。 (字句解析が「$」と「var」の2つに分解すると、間にスペースを入れられると思うから。) 「$var」を認識するのに、字句解析で1つのトークンとして認識するのがいいのか、それとも 2つに分解して構文解析時に「$var」であると認識するのがいいのか、迷ってます。
- 661 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 18:26:38 ]
- >>660
1トークンでいいと思うが。2トークンにするメリットが特に見当たらんし。
- 662 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:03:51 ]
- 1トークンと考える方が不自然。
2トークンでしょう。(Perl/PHPのソース確認してないけど) 理由: 1. Perlの場合、変数名の前に異なるプリフィクスを使う場合がある。 例)配列宣言 @array、 配列参照 $array[index] 連想配列宣言 %assoc、連想配列参照 $assoc{key} 左側(配列コンテキスト)と、右側(スカラーコンテキスト)を、異なるトークンと認識したら、 変数名管理上、トークンからプリフィクス(@, %, $)を外した名前を切り出す必要があり、 トークンの扱いとして不自然。 2.プリフィクス(@, %, $)と、識別子(var, array, assoc)の間に空白を許すか否かは、 単なる構文定義上の問題であり、2トークンで空白を許さない定義が可能。 いじょ
- 663 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:23:45 ]
- PHPに@や%ないじゃん
- 664 名前:660 mailto:sage [2005/07/09(土) 20:27:10 ]
- >>661
ありがとうございます。そんな気はするんですが、いまいち確信がなくて。 >>662 1.の場合でも、プリフィックスと変数名は別々に渡しませんか? 今はトークンを取得する関数gettoken()と、文字列を取得する関数getvalue()を用意していて、次のようにしています。 入力 gettoken() getvalue() ------------------------------ 'foo' STRING "foo" 100 INTEGER "100" 3.14 DOUBLE "3.14" x NAME "x" $var VAR_SCALAR "var" @var VAR_ARRAY "var" %var VAR_ASSOC "var" (最後の2つはつけくわえてみました。) 特に不自然ではないと思うのですが、どうでしょう。自信もないですが。 2. について、「2トークンで空白を許さない」ためのうまい方法がよくわかりません。 よろしければ教えてください。
- 665 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:34:41 ]
- 空白もトークンとして切り出せ
- 666 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 21:59:11 ]
- >>665
空白をトークンにするぐらいなら、プリフィクス込みでトークン切り出して、 プリフィクスを取り除いたシンボル名でシンボルテーブル検索した方が 楽だと思うけどなぁ。 まぁ、どっちでも動けば構わんので、あとは趣味の問題だが。
- 667 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 22:27:32 ]
- >>663
PHPにも $hoge = 1; $varname = "hoge"; echo $$varname; // => 1 とかあるけどな!
- 668 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 23:13:32 ]
- Perlで$$は、ポインターの値参照だったっけ
- 669 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 23:38:16 ]
- ああ、そうか。
Perl5 だと参照使えるから ${$foo->{'a'}} なんてのもアリなんだな。それだと 確かに字句解析レベルではプリフィクスとシンボル名を分けた方が無難だ。
- 670 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 00:40:01 ]
- >>665
ええっー、空白をトークンとするんですか。 構文解析がかなり面倒になるんですけど。 >>669 「$」のあとに英数字が続けば変数名、それ以外なら「$」であるというのじゃだめでしょうか。
- 671 名前:デフォルトの名無しさん [2005/07/10(日) 00:44:50 ]
- >>664
了解。1トークンで充分だと思う。 Perlの
- 672 名前:671 mailto:sage [2005/07/10(日) 00:46:02 ]
- >>664
了解。1トークンで充分だと思う。 Perlの $って、Cのポインタ演算子みたいな扱いするから、誤解した。
- 673 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 00:47:00 ]
- >>670
そもそも「Perl5 のようなスカラー・配列・ハッシュ、さらにその参照を任意に 組み合わせてデータ構造を作れるような言語にするのか?」ってトコロから 考える必要があるかと。 単に $foo, @foo, %foo, $$foo ぐらいで済む程度の文法なら 670 の案や 1トークン方式で良し。Perl5 フルコンパチにしたければ変数関係だけで {}, [] の のネストが発生するので、ネストは正規言語では処理できない ことを考えると、ある程度は構文解析に逃がした方が楽そう。
- 674 名前:デフォルトの名無しさん [2005/07/10(日) 21:13:41 ]
- いずれにせよ、スレ違い
Li(ry)
- 675 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:17:02 ]
- LISPなら字句解析も構文解析も要らないのに。
- 676 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:24:23 ]
- すまん。素でわかんないんだが、「LISP は字句解析が要らない」ってのは
1.0 ってのが出てきたとき、それがシンボルか数値かリストかどうかを判断しなくても良いってことなのか? あと、「LISP は構文解析が要らない」ってのは、カッコの対応が取れて無くても気にしないってことなのか?
- 677 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:27:15 ]
- >>675-676 ネタ決定
- 678 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:56:58 ]
- 字句解析がいらない
→入力をreadするとS式が出てくる 構文解析がいらない →S式をevalすると結果が出てくる
- 679 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:00:33 ]
- それは要らないんじゃなくて、組み込みになってるだけじゃないの
自分で一から作るなら、どっちも必要でしょ
- 680 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:15:01 ]
- 自分で一から作るつもりならLISP必要ないよ
- 681 名前:676 mailto:sage [2005/07/10(日) 22:25:03 ]
- なんかよく分かった。そりゃ必要ないよな LISP 側で全部用意してもらえてるんだし
- 682 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:32:57 ]
- あえてLISPを使う意味は中間形式としてS式で処理できるからじゃないかと
S式に優位性を感じないなら必要ない
- 683 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:34:15 ]
- 昔prologスレで見た流れだ。
prologインタプリタをprologで書ける人とCで書ける人ではどちらが優れているか?
- 684 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:44:38 ]
- >>678
つまんねぇネタ。
- 685 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 01:56:10 ]
- ネタに見えるのか。
- 686 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 03:28:22 ]
- >>685
お前が言わんと欲する所が、あまりに陳腐過ぎて、 細かい説明するのが面倒つうこと。
- 687 名前:デフォルトの名無しさん [2005/07/11(月) 06:30:49 ]
- Lisper は他でやってくれ
- 688 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 11:37:21 ]
- そのLIPSぐらいしか話題ないってことなんじゃないの。
- 689 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 16:37:20 ]
- >>688
燃料投下(>>674)までの流れを見た上で言ってるのか?
- 690 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 18:35:40 ]
- 燃料に見えるのか。
- 691 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 18:55:26 ]
- 688はキヤノン社員
- 692 名前:デフォルトの名無しさん [2005/07/11(月) 19:22:03 ]
- ここはLisp擦れ
- 693 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 19:49:05 ]
- 内部イテレータのある言語を設計してみたいと思ってるんですが、
Ruby以外に内部イテレータを持ってる言語って何がありますか? Rubyの内部イテレータではなく、一般に内部イテレータとは 匿名関数と本質的にどの点で違うものなんでしょうか。
- 694 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 20:15:01 ]
- 「Rubyの内部イテレータ」について説明してくれたら答えられるかも。
- 695 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 21:29:03 ]
- >>693
>Ruby以外に内部イテレータを持ってる言語って何がありますか? このスレでさんざん出てきてるLISPというやヴぁい言語のインライン関数が元ネタ。 Rubyで内部イテレータとわざわざ限定してるのは対象データの コンテナを抽象化して取り出すことを目的にしてるからじゃないかと。 >一般に内部イテレータとは匿名関数と本質的にどの点で違うものなんでしょうか。 質問の意図が不明だけど、まず役割が違うでしょ。 内部イテレータに匿名関数(ブロック)を渡してぶん回すんだし。 匿名関数側は取り出す要素の構造以外知らなくていいし、 内部イテレータはぶん回すコンテナの構造以外知らなくていい。 外部イテレータとの違いはここにある。
- 696 名前:デフォルトの名無しさん [2005/07/11(月) 22:43:27 ]
- つまり、Ruby>Lisp ってことですか?
- 697 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 22:54:58 ]
- mapとどう違うんだ?
- 698 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 23:07:43 ]
- mapが何か関係あるのか?
- 699 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 00:25:21 ]
- ここはLispとRubyの話は禁止
どうしてもやりたいのなら別スレ立ててそっちでやってください
- 700 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 00:25:38 ]
- >>693
Smalltalkにはブロックという概念があり、これがちょうどRubyの内部イテレータ(ブロック)に相当します。 Lispのmapとも似ていますが、どちらかというとSmalltalkのほうに似ているんじゃないでしょうか。 Smalltalkとの違いは、Rubyでは基本的にメソッド1つにつき1つのブロックしか渡せませんが、Smalltalkは複数のブロックを渡すことができることです。 なおRubyでは、昔は本当にイテレータとしてのみ使われていましたが、今は他の用途にもよく使われるため、現在ではブロックと呼ばれることが多いようです。 また「内部イテレータ」というのは使われ方の名称であって、機能としては「クロージャ」というのがプログラミング言語一般の用語です。 (「クロージャ」という機能を「内部イテレータ」として使うということ)
- 701 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 01:06:35 ]
- 実装的にはイテレータとしてのみブロックを渡す場合は、
真面目にクロージャを作る場合よりも省略できる部分が、 結構あるんだよね。 あと、内部イテレータと外部イテレータにはそれぞれ、 長所と短所がある。簡便なのは内部イテレータだが、 複雑なイテレーションの場合は外部イテレータのほう が良い場合もある。 個人的なオススメはクロージャが扱えるオブジェクト 指向言語なら外部イテレータを基本に設計して、内部 イテレータはライブラリで用意する、というやり方。
- 702 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 02:56:11 ]
- >実装的にはイテレータとしてのみブロックを渡す場合は、
>真面目にクロージャを作る場合よりも省略できる部分が、 >結構あるんだよね。 詳細きぼんぬ
- 703 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 03:01:01 ]
- >>702
環境をスタックからヒープに移すタイミングの問題。
- 704 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 04:07:52 ]
- 特殊用途向けに制限掛かったクロージャ?
- 705 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 07:33:41 ]
- >>693
構文に関して言えば、 内部イテレータに特化した構文(だったものも含む)を持ってる言語は 俺の知ってる限りでRubyとSmalltalkだけかな。 他になんかあったっけ?
- 706 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 09:26:54 ]
- >>705
SmalltalkのCollection関係の aCollection do:[each: 一件ごとの処理]. とかは言語組込みの構文じゃなくてクラスライブラリの命名ルールだよ。
- 707 名前:デフォルトの名無しさん [2005/07/12(火) 21:43:33 ]
- つまり Ruby が最高言語ということでファイナルアンサ?
- 708 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 21:54:55 ]
- ここの連中はRubyとLISPの名前を出せばほいほい釣れるよ。
- 709 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 08:56:12 ]
- あたしのために喧嘩なんてしないでッ
- 710 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 20:44:00 ]
- .,Å
.r-‐i'''''''''''i''''‐-、 o| o! .o i o !o .|\__|`‐´`‐/|__/| |_, ─''''''''''''─ ,、 / 、-' u -、 / U 0 \ / / i | ● ,,. .,, ● | __ . ! (_人__) ノ /´ ̄ `!. 丶_ u U ノ | `にこ匸'_ノ . '-、、,,,,,,_______,,,,,,、、-' ノ u { _.. -―| :{ ,/ / \ . / l | __ / ̄ ̄`>'´ ノ' ´ {、 \ / |/ {'´ `ヽ. " ̄\ U `ヽ. __,,.. -‐丶 u ヽ | / ヾ、.. } u' 〉、 } `ー''´ /´ ̄ `ヽ '" ̄\ ! :} )「` ノ、 ノ l\"´_,,ニ=-― <´ ヽ{ ノ( `、 | l 、_,/j `ー一''" }, ノ , '''''"" \ ヽ ⌒ヾ v | ヽ _ / } {. { l ┌n‐く ヽ/ ``\ ノ `¨´ `¨¨¨¨´ ̄`{ 0 `'^┴'ー┘|ヾ }、 u' ` --‐r'′ キングヤッタス!!
- 711 名前:デフォルトの名無しさん [2005/07/14(木) 22:08:03 ]
- >>709
リンゴタン?
- 712 名前:デフォルトの名無しさん [2005/07/15(金) 22:18:25 ]
-
LALR age
- 713 名前:デフォルトの名無しさん [2005/07/16(土) 18:07:28 ]
- 現在確認されている厨
・RUBY厨 ・LISP厨 ・りんご厨 ・LALR厨
- 714 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 18:13:11 ]
- 上から3番目のは、昔かたぎのFlash職人(元Macromedia Director職人)か?
- 715 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 18:22:18 ]
- >>713
LALRもダメでつか
- 716 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 19:13:12 ]
- りんごってVIPのことだろ
- 717 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 21:10:41 ]
- ここで暴れてる荒らしは、荒らしな上にアンチLISPにアンチRubyに
アンチLALRか。 救いようがねぇなw
- 718 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 21:13:59 ]
- 志村坂上
- 719 名前:デフォルトの名無しさん [2005/07/18(月) 15:40:14 ]
- すいません超初心者なんで的外れなことを覚悟で質問します。
bison/flexではいたコードってVCでコンパイルできますか??
- 720 名前:デフォルトの名無しさん mailto:sage [2005/07/18(月) 15:50:45 ]
- >>719
やってみればいいじゃん
- 721 名前:デフォルトの名無しさん mailto:sage [2005/07/18(月) 16:57:29 ]
- ってゆーかRUBY最強
- 722 名前:デフォルトの名無しさん mailto:sage [2005/07/18(月) 17:30:55 ]
- >>708
- 723 名前:659 [2005/07/22(金) 02:50:23 ]
- >>719
>>657-659 読め。 bison/flexで吐いたコードをVC++でコンパイルした経験は、俺はある。
- 724 名前:723 [2005/07/23(土) 23:01:08 ]
- >>723
ありがとうございます。よく読んでいませんでした。 とりあえず原田賢一著 コンパイラ構成法という本を購入しました。 これから勉強します。
- 725 名前:719 mailto:sage [2005/07/23(土) 23:01:49 ]
- すいません719です
- 726 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 02:13:48 ]
- LexやYACC等のツールを使わないとコンパイラ作れない奴なんざ
雑魚だろマジで。
- 727 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 02:15:53 ]
- >>726
字句解析とか構文解析とか、単純なんだから別に自動生成でいいやん。 ていうか、こういうツールだって、どういうことやってるのか理解できない人には使えないと思うよ。
- 728 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 14:06:30 ]
- >>726
rubyの作者を雑魚あつかいですか?
- 729 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 15:05:00 ]
- >>726のようなことを言う奴はコンパイラのバックエンドをろくに書けない奴に多い。
たぶんフロントエンドだけがやっとで挫折したんだろう。
- 730 名前:デフォルトの名無しさん mailto:sage [2005/07/26(火) 10:08:34 ]
- LexやYACC等のツールを使わないとコンパイラ作れない奴が雑魚なら、
LexやYACC等のツールを使わずにコンパイラを作る奴はフジツボ。 LexやYACC等のツールを使えない奴はプランクトン。
- 731 名前:デフォルトの名無しさん mailto:sage [2005/07/26(火) 12:20:11 ]
- ここは酸っぱい葡萄が多いインターネットですね。
- 732 名前:デフォルトの名無しさん mailto:sage [2005/07/26(火) 20:48:40 ]
- イソップ童話キタ━━━━━(゚∀゚)━━━━━ !!!!
- 733 名前:デフォルトの名無しさん mailto:sage [2005/07/26(火) 21:15:44 ]
- 言語鍛冶が覆面で議論するスレはここですか?
- 734 名前:デフォルトの名無しさん [2005/07/29(金) 11:04:33 ]
- JavaScriptのコンパイラコンパイラが欲しいんだけれど、調べた限りではないみたいなので、
これを機会に時間のあるときに作ってみようと思ったのだけれど、 コンパイラコンパイラ実装の参考文献で良書はありますか?英文和文問いません。
- 735 名前:デフォルトの名無しさん mailto:sage [2005/07/29(金) 22:56:38 ]
- ネタとしてスルー。
- 736 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 01:54:03 ]
- JavaScriptでかかれたコンパイラコンパイラ?(まさか〜)
でも文脈からだとJavaScriptの構文を理解するbisonコードくさいんだけどさ。
- 737 名前:デフォルトの名無しさん [2005/07/30(土) 02:03:01 ]
- コンパイラコンパイラが生成するコードがJavaScriptのものなんじゃないの?
- 738 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 02:04:06 ]
- Mozillaのソースとか・・・・・・・・
- 739 名前:734 mailto:sage [2005/07/30(土) 02:13:44 ]
- >>737
そう、そういう意味です。 JavaScriptで出来たコンパイラコンパイラなんてあれば面白いけれど…
- 740 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 06:12:34 ]
- >>734>>734
- 741 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 06:52:32 ]
- ドライバだけJavaScriptなら簡単なんじゃん?
- 742 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 07:54:28 ]
- CからJavaScriptに変換するトランスレーター作れよ
- 743 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 17:52:12 ]
- >>734
LALRパーサージェネレータでよければ、kmyaccでサポートしてます。 www005.upp.so-net.ne.jp/kmori/kmyacc/index.html こうした方がいいという意見も歓迎。 JavaScriptで書いたデモの例 www005.upp.so-net.ne.jp/kmori/kmyacc/calcdemo.html
- 744 名前:734 mailto:sage [2005/07/30(土) 19:50:44 ]
- >>742
それは良いアイデアですね。 JavaScriptの言語的機能は制限されるのが残念ですが、 とにかく使いたいだけならそれは良さそうです。 >>743 おお、これはそのまま使えますね!ありがとうございます。 早速使ってみます。助かりました。
- 745 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 21:10:39 ]
- >>744
使うにあたってはプロトタイプを手直しした方がいいでしょうね。 ところで、JavaScriptでは入力を得る手段が限られていると思うのですが、 どんな対象をパースするのか、さしつかえなければ教えてもらえませんか?
- 746 名前:734 mailto:sage [2005/07/30(土) 23:40:21 ]
- >>745
助言ありがとうございます。 JavaScript ObfuscatorをJavaScriptで書こうかと思っていました。
- 747 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 23:57:26 ]
- >>746
ようするにスクリプトを読まれたく無いと。 ただそれだけ?
- 748 名前:734 mailto:sage [2005/07/31(日) 00:11:31 ]
- >>747
そういうわけじゃないですよ。どちらかといえば趣味です。 その時は手動で構文解析を作りましたけれど、 チェスの掲示板に棋譜を読み込むためにPGNファイルのフォーマットをパースするなど、 JavaScriptでコンパイラコンパイラが作れればいいなーと思うことは稀にありました。
- 749 名前:デフォルトの名無しさん [2005/08/03(水) 12:01:25 ]
- ちょっと趣旨が変わってしまいますが…
状態遷移を扱うのに適するエンジンってありませんか? やりたいことは、入力を受け付けて、新しい状態を出力するモジュールです。 その状態遷移ルールは何らかの自作エディタでペトリネットやUMLの アクティビティ図のように記述しておきます。 単にゴリ押しで、定義データに各遷移ルールを記述しておき、制御モジュールで パターンマッチングで次の状態を探すだけでも可能ですが、トークンのJoinとか 考えると、いろいろ内部情報を保持する必要があります。 普通のスクリプトやゲームのシナリオなんか参考になる気もしますが、今回の場合、 有限状態機械に特化したもので十分です。 また、状態遷移図の定義の変更は頻繁に行われます。 もし、美しいアーキテクチャがあるなら、ゴリ押しのエンジンを作り直したいと 思っているのですが、オブジェクト指向で機械の内部状態とか定義方式を美しく 表現している設計って、どこかにないでしょうか?
- 750 名前:デフォルトの名無しさん mailto:sage [2005/08/03(水) 13:04:20 ]
- >>749
>オブジェクト指向で 限定しない方が良いよ。OO に限定するとステートパターンしか出てこないから
- 751 名前:デフォルトの名無しさん mailto:sage [2005/08/03(水) 13:10:40 ]
- 状態遷移を美しく表現する設計は興味があるな。
世の中ではどんな形なんだろう
- 752 名前:デフォルトの名無しさん [2005/08/03(水) 21:01:28 ]
- オブジェクト1つが、1つの有限状態機械だと思ってる。
UMLでもステートチャート図あるし 状態遷移をオブジェクト指向で表そうとするのは適切でないような気がするけど
- 753 名前:デフォルトの名無しさん [2005/08/03(水) 22:18:27 ]
- う〜ん、でも、オブジェクトを入出力とするエンジンって有り得ないですかねぇ。
事前の状態遷移定義に従って、オブジェクトAがエンジンによってBに変えられるような。 別にオブジェクト指向に拘る訳じゃないですが、オブジェクト指向を例にとると、 1つのオブジェクトが、エンジンに渡されると、2つのオブジェクトに分岐したり、 その逆に2つのオブジェクトが揃ったら、1つのオブジェクトに合流したり… さらに、その合流待ちの状態が無限って訳にはいかないだろうから、生存時間が決まってたり。 こういうのって、昔から学術的には扱われてると思うのですが、 実際に実装するとなると、どういう定義記述方法にして、どんな内部状態を持たせるのかなぁと。 もしかして、何か美しい設計が、すでにあるのかと思った次第です。 今なら、定義はXMLになるのかなぁ…
- 754 名前:デフォルトの名無しさん mailto:sage [2005/08/03(水) 22:40:13 ]
- >>753
まさか…oさん?
- 755 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 00:07:42 ]
- CodeProject に XML を利用したステート・マシンのサンプルがあったような気が・・・
気のせいだったかも
|

|