- 1 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 20:49:02 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 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/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 12 pc11.2ch.net/test/read.cgi/tech/1188688416/ 関連リンクは多分 >>2-10 あたり
- 376 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 03:05:22 ]
- javascriptはBOTとかのチートツールで使われてる
- 377 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 03:08:01 ]
- >>375
でもあそこでpとかrとか言ったら荒れるんだよね
- 378 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 08:17:18 ]
- >>355
> 参照カウントってのはちょっとダサいが、質実剛健だしその点では好感。 mark & sweepと併用するやり方は、 どっちをメインにするとしても、極めて有効なやり方だよ。
- 379 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 09:46:27 ]
- Rubyは実装として美しくない
最近の高スペックPC当て込んだ バブル言語だろ
- 380 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 10:16:03 ]
- Forthは基本的にはライブラリ(辞書)管理もFILOだから、
GCという概念がない。動的なデータ構造も(スタック以外)ないし。 PostScriptは確かスナップショットのようなものを取って、 明示的に指定してそのスナップショット以降に確保されたものを 解放するとかそういう機能がある、と思った。
- 381 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 11:29:43 ]
- おれ科学計算系で、3回くらいPythonが組み込まれてるソフトを
触ったことがあるよ。個人的な感想だが、pythonの微妙に面倒臭いところが、 組み込みだと逆にぴったり使いやすいんだわ。説明しづらいけど。 Rubyの自由さは組み込み向けだと正直いらない。
- 382 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:30:14 ]
- >>363-366
おおむね同意だが、>>349に対するレスはやや違うと思う。 漠然とスクリプトエンジンと題した場合、真っ先に求められるのは 書いたスクリプトをその場で実行できる手軽さであり、 必然的にインタプリタの要件を満たすことになる。 これに現在主流がバイトコンパイル式であることを勘案すると 言語まるごと(パーサ+VM)を組み込むことがほぼ確定になる。 まあオレがオレオレ処理系を作るときはスクリプトのコンパイラは 事実上のジェネレータとして実装して、 生成物は汎用のスクリプトの処理系に渡してしまうから 自作部分は純粋なコンパイラになるわけだが。 開発用にはそれとは別にスクリプトのタイムスタンプを見て 自動的にコンパイル作業を行う機能を追加することになるだろう。
- 383 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:32:25 ]
- ruby のライセンスは GPL よりは緩いけど
他の組み込み向け言語に比べると だいぶめんどくさい方だと思うけどな まぁライセンス云々はスレ違いだけど
- 384 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:58:23 ]
- >>382
パーサーの要不要は用途次第かと ゲーム用とかだと開発時は素早く試行錯誤したいが リリース後は基本的にはスクリプトをいじる必要がないので そういう場合パーサーは無駄なので最終的には外せる方が良い 実行環境がプアなものは特に
- 385 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:58:43 ]
- これが噂の「すり合わせ」というやつか
- 386 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:01:08 ]
- 生インタプリタも、中間形式分離型も両方ある奴がほしい、という
要望ってこれからも大きいかな? 今のところメジャーなもので、実現したものってないような気がするけど。
- 387 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:41:29 ]
- Ruby, Python等のダイナミック言語でパーサを分離するのは無理じゃないか?
例えばPerlだと、実行せずに静的にパースすることは不可能なわけだし。 ttp://perlmonks.org/?node_id=663393&
- 388 名前:345 mailto:sage [2009/08/15(土) 18:25:09 ]
- >>387
Pythonであれば、以下のようなカキコがあるから、 パーザとVMは分離できるように見えるけど、違うの? Pytonにはevalは存在しないみたいだし(>>349参照) >>371 >(用途によるが)配布の際にバイトコード化可能かいう点もある。
- 389 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:16:11 ]
- >>380
> Forthは基本的にはライブラリ(辞書)管理もFILOだから、 > GCという概念がない。動的なデータ構造も(スタック以外)ないし。 それは嘘。 FORTHを採用する場合、 後置記法を採用するくらいだから、 非常に小さいインタプリタが必要とされている局面。 だからプアな処理系が多いと言うだけで、 GCをバッチリ実装した処理系はあってもいい。 データがFILOで済むというのも嘘。 辞書に登録したら不必要になる順序はプログラム次第。
- 390 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:56:55 ]
- まあ誰もスクリプトでFORTHなんか使いたくないからどうでもいいけどなw
- 391 名前:387 mailto:sage [2009/08/15(土) 20:03:53 ]
- >>388
実際にPythonやRubyでパースが曖昧になるようなケースは知らないが、 evalがあると分離しにくいのは確かだろうね。ちなみにPythonにもevalはある。
- 392 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:33:03 ]
- そこれりすぷれすよ
- 393 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:35:35 ]
- Rubyが使われないのは単に実績がないからなんでしょ
どんどん使えばいいと思うよ
- 394 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:45:11 ]
- 組み込みスクリプト用のLispってあるの?
- 395 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:50:20 ]
- emacs lisp
- 396 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:02:09 ]
- Ypsilon
- 397 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:35:53 ]
- elisp
- 398 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:43:00 ]
- ruby
- 399 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:05:29 ]
- >>394
小さな独自Lisp系ならいくらでもあるよ(CLとかSchemeとかの規格準拠じゃなければ8ビット機でだって動くんだもの)
- 400 名前:345 mailto:sage [2009/08/16(日) 01:27:27 ]
- >>391
え、Pythonにもevalあるんですか?!うーむ どちらが真実かは、結局は自分で調べなさいということですな。
- 401 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 01:36:23 ]
- python -c 'print eval("1+1")'
- 402 名前:345 mailto:sage [2009/08/16(日) 01:52:09 ]
- >>401
再現しますた。わざわざありがトン。
- 403 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 02:37:35 ]
- >>394
LISPerは自分用のがあるから 他人の糞LISPなんて使わない
- 404 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 02:50:00 ]
- >>403
というか、そんな結論ありきな考え方をするやつなら そもそもこんなスレに来る必要がないわけだが。
- 405 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 08:26:25 ]
- > データがFILOで済むというのも嘘。
> 辞書に登録したら不必要になる順序はプログラム次第。 少なくとも伝統的なFORTHなら辞書は一方向リンクトリストで最後に 登録されたものから順につながってるし、最後に登録されたワードを グローバルなワークエリアが指している。 FORGETワードは、特定のワード以降に登録されたワードを全部捨てて しまう。 そういう構造だから、基本的にGCはない。
- 406 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 10:10:39 ]
- >>394
ISLISP
- 407 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:10:05 ]
- ABAPのEBNFください
- 408 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 11:13:52 ]
- ANTLRで苦戦していて質問したいのですが、このスレでいいでしょうか?
もしくは専用スレを立てる?
- 409 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 11:40:06 ]
- このスレでいい。
- 410 名前:408 mailto:sage [2009/08/31(月) 11:58:13 ]
- お言葉に甘えて。
ng : n=TOKEN (v=INT|v=FLOAT) -> ^(PARAM $n $v) ; ok : n=TOKEN v=(INT|FLOAT) -> ^(PARAM $n $v) ; ngルールみたいな書き方はダメでしょうか? antlrは通るのですが、C言語からそれを呼び出すと セグメンテーションフォールトします。
- 411 名前:408 mailto:sage [2009/08/31(月) 11:59:43 ]
- ごめん。ngルールとokルールが逆だった。
v=(INT|FLOAT)がNGで(v=INT|V=FLOAT)がOK. ANTLR的にv=(INT|FLOAT)という書き方はNGなのでしょうか?
- 412 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:10:45 ]
- 出来ればツール頼らずに
手続き型言語作りたいんだけど どのくらい大変なん
- 413 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:16:35 ]
- コンパイラもアセンブラもリンカもエディタもツールですよ・・・
- 414 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:40:42 ]
- Brainfuckならパンチカード手打ちしてもできるんだろうな
- 415 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:42:28 ]
- TinyBASICくらいの規模なら机上でいけるんじゃないかな
- 416 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:49:12 ]
- ツールってyaccとかlexのことか?
なくても大差ないと思うよ
- 417 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:57:54 ]
- >>412
LLで混乱しない文法なら問題ないんじゃないの? このスレだったと思うけどμplanとかpascalの構文なら自己記述できるし
- 418 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:00:52 ]
- >>412
どういうコードに落とし込むかってあたりが問題になる位で落としやすいVMを設計すれば32Kワードもありゃ言語コンパイラは書ける UCSD p-systemとかが実際そんなものだ 案ずるより産むが易しってあたりの言語なら悩む前に書き始めてみればいい コード公開してもいいのなら行き詰まってから助けを求めに此処に戻ってこい
- 419 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:09:00 ]
- いまどきこだわることはないと思うが、
たいがいの言語ならちょいと工夫すればだいたいトップダウンパーザで書ける。
- 420 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:10:26 ]
- >>412
PerlやRubyで書けば、素で描いてもまあ2週間くらいで。
- 421 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 23:56:56 ]
- LISPだと数分〜数時間
- 422 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:03:58 ]
- yane lispおすすぬ
- 423 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:42:09 ]
- Lisperあっち行け
- 424 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 12:57:23 ]
- おおっ
わからない単語がいっぱいでてきた たくさんレスありがとう >>416 そういうことです >>418 Lispなら作れたからアルゴリズムで行き詰る事は多分無いんだけど Lispに比べると全然ソース量が桁違いになりそうでヘタレてる・・・ >>420 2週間!! 以外と速い 頑張ってみます
- 425 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:43:59 ]
- Lispすげー
- 426 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:46:38 ]
- Lisp作れたならその上でマクロ書けば数日で手続き型言語作れないか?
- 427 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 10:19:06 ]
- LISPのインタプリタの作り方ならLISPの入門書の最後に例題で出ているレベル
JavaとかのGC機能が前提の言語ならそんなに難しくないはず コンパイラなら知らん LISPのインタプリタと手続き型言語のインタプリタはつくりがまったく違うと思うけどなあ
- 428 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 11:44:23 ]
- ↓このスレの住民なら1レス以内に作れるレベル
- 429 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 11:57:33 ]
- LISPで全部できると思うならそうすればいい。
ただ、なぜいつまで経ってもLISP系が主要プログラミング言語にならないかの理由についても考慮すべき。 >>424 パーサー、構文木構築、構文木消化・変換、出力を順番に作って中間出力を目で確認する。 中間出力はPerlならData::Dumper、RubyならYAMLで。 この辺がC/C++ではしち面倒くさすぎてスクリプト言語でコンパイラを実装する理由。 よほど大規模なマイ言語のスクリプトを構築しない限りは速度面の不満も出ないしね。
- 430 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:03:55 ]
- >>429
C++はSTLとかを使えば面倒な部分がなくなってスプリクト言語で実装するレベルにならない?
- 431 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:20:47 ]
- >>424
Lispの処理系を書いたことがあるってことは、コンパイラ理論は知っているんだよな? インタプリタ、中間コード吐いてVM上で動かす、ネイティブバイナリ吐く、 と色々パターンがあるが、基本はまず、再起下降パーサー書いて抽象構文木に 落として、実行するインタプリタを書く。それが出来たら(中間表現に落として 最適化して)コード生成。
- 432 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:33:59 ]
- >>430
C++のSTLでYAML並みの読み書き柔軟性得るのにどれだけコストが必要か考えてみて。
- 433 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:11:55 ]
- boost:serialization ってものも
- 434 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:19:38 ]
- ruby信者は痛いので気づいたらそれ以降触らないようにしてる
- 435 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:33:52 ]
- 大体IRを一々ファイルに書き出す必要もねーだろw
Pretty-printerを書いとけば十分
- 436 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 16:19:41 ]
- >>432
シリアライゼイションを覚えたての子供ですね?
- 437 名前:デフォルトの名無しさん [2009/09/08(火) 16:33:32 ]
- ANTLR3でトークンとしてヒットするけど出力しないトークンはどうやって定義すれば良いのでしょうか。
このTOKENでDQを無視してSTRINGだけツリーパーサーで欲しいのですが… SKIP()はセグメンテーションフォールトで落ちました. TOKEN : DQ STRING DQ ; fragment DQ : '"' ; fragment STRING : ( ES | ~('\\'|'"') )* ; fragment ES : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\');
- 438 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:46:52 ]
- ADD 3 TO 4
という文があった場合 BNFするとしたら、どうするのがカッコいいですか?
- 439 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:52:46 ]
- <文> ::= "ADD" "3" "TO" "4"
- 440 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:57:39 ]
- >>439
ATSにする場合どうすればいいの?
- 441 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 22:39:18 ]
- キンコンキンコンキンコンキンコンキンコンキンコン
- 442 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 19:04:29 ]
- AST? ATS?
- 443 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:50:35 ]
- >>442
AST AST AST たすけてください
- 444 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:53:29 ]
- >>439みたいな文法だったらツリーにする必要なくね
- 445 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:01:21 ]
- だね。
リスト(線形)でじゅうぶん。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:02:35 ]
- 自然言語を再現したいのか
本当に "ADD" <NUM> "TO" <NUM> なのかでずいぶん違うよな
- 447 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:17:13 ]
- "ADD" <NUM> "TO" <NUM>
なのです その跡にFROMとかつくかもしれないのです お願いします
- 448 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:23:58 ]
- それでも再帰構造さえなければツリーはいらん
- 449 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:30:25 ]
- でも、その後学のために
作ってみたいのです お願いします
- 450 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:31:10 ]
- だから構文そのものがツリー構造じゃないからツリーにならないんだって
- 451 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:38:38 ]
- >>450
COBOLみたいな構文もツリー構造じゃないから無理?
- 452 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 23:39:27 ]
- COBOLに式あったっけかな。
要するに、 <式> :== <式> + <式> とか <文> :== <IF文> | ... <IF文> :== "IF" <式> "THEN" <文> ("ELSIF" <文>)* ("ELSE" <文>)? "FI" みたいな再帰的な構文があると、再帰的なデータ構造でないと いけないわけで、木が必要になる。 アセンブラみたいなのだったらリスト(線形)で十分。 SQLってどうなの? 識者求む。
- 453 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 02:07:23 ]
- 副問合せ句とかが在るから、再帰じゃないと表現できないんじゃないかな。
ところで、ORACLEのマニュアルにある図ってなんって言ったっけ? BNFが図になってる奴。
- 454 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 03:14:36 ]
- 構文図
- 455 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 10:36:28 ]
- Expression ::= "ADD" Factor "TO" Factor
Factor ::= Num | "(" Expression ")" Num ::= "0".."9"+ かもしれん。 これならツリーになる?
- 456 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 10:49:33 ]
- AND, OR, UNION等は再帰で定義するから木で表す。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 11:25:21 ]
- >>455
その構文のインスタンスはツリーに出来る。 その構文そのものは再帰があってDAGになる。
- 458 名前:デフォルトの名無しさん [2009/09/17(木) 02:22:52 ]
- デザインパターンを駆使してコンパイラを自作しています。
・字句解析=Chain Of Responsibility ・構文解析=Interpreter のように作っていてうまくいっているのですが、 意味解析はどのパターンを使えばいいでしょうか? どこかのサイトでVisitorを使うとか見たような気がするのですが。
- 459 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 08:28:50 ]
- >>458
先に仕様があってそれから設計を施していくわけで、 手段と目的を混同しちゃいかん。 誰も君のコンパイラの設計がどうなってるのかなんて知らんだろ。
- 460 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 09:34:27 ]
- つか, 関数型言語なら別の選択あるだろうけど,
手続き型言語の場合, パーサジェネレータ使った方が 早い処理系ができるだろうに………
- 461 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 10:02:39 ]
- >>460
それは文法によるだろう。 言語処理系の書きやすさを第一に考えて言語を設計した場合、 手書きの再帰下降パーサでも十二分な速度が出ることはD言語などで実証されている。
- 462 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 10:08:28 ]
- Interpreterで構文解析っておかしいだろ
どういう設計なのか知らんがVisitorとInterpreterは相互変換できるからどっちかに統一するべき
- 463 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 12:13:30 ]
- 性能はむしろ手書きのパーサのほうが出る。
手書きパーサが不利で、パーサジェネレータが有利なのは以下のような点。 ・構文規則とアクションがすっきり分離させて記述できる ・LL(1) に収まらない文法を記述するためのテクニックに煩わされない ・規則をあれこれ変更するのが簡単 あと現代的なテクニックをかじりたいならパーサコンビネータライブラリとか使ってみたら?
- 464 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:32:14 ]
- Scalaの勉強していてパーサコンビネータを触っていたんだけど、
電卓の次に思い浮かぶ使い道がコンパイラとかインタプリタになってしまう。 その間ぐらいで、手ごろな練習のネタって無いものかなぁ?
- 465 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 18:49:33 ]
- >>464
発想の出発点を見直せば、その人なりのネタは見つけられると思うけどね。 自分だと、最近はRubyでツール作りする機会が多いから、そのコマンド引数 (サブコマンドやオプション指定の組み合わせ)を解釈するのにRaccを使うことがある。 他にも差分記述のある知識表現にPrologのDCGで簡単なDSL(ドメイン固有言語)を作ってみたり、 同じ発想で差分記述のできるテストデータ記述言語をRaccで記述したり。 極端な例だと、Webアプリのプロトタイプ開発で、画面遷移を制御するためにyaccを使い、 画面(フォーム)定義言語もyaccで実装するというマニアックな設計をしたことも。 要は「パーサ」イコール「言語処理系」という思い込みを捨て、単なる再帰的な データ構造の処理に適した「道具」にすぎないと考えれるのがいいのではないかと思う。
- 466 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 18:52:17 ]
- >>465
オレだったらそういう用途の処理用データはXMLやらYAMLやらで定義ちゃうだろうな。
- 467 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:15:33 ]
- >>465
おまえUNIX板のyacc&lexスレの>>120だろ
- 468 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:08:43 ]
- >>464
・ ラムダ式の使える関数電卓 ・ 文字列がメールアドレスとして正しいかチェックするプログラム(コメントのネストにも対応) ・ 装飾をネストできる独自Wiki ・ テンプレートエンジン
- 469 名前:465 mailto:sage [2009/09/17(木) 20:21:28 ]
- >>466
最初は同じ事を考えていたんだ。でも、自分一人で作る/使うぶんにはいいんだけど、 他のメンバが使う/使わせることを考えると、エラー処理(構文検査)も考えなけりゃならない。 XMLならDTDやRELAX-NG、YAMLならKawflyみたいなスキーマ定義が必要になる。 そこまでするくらいなら、汎用パーザを使うのがいいんじゃないかと、最終的に判断した。 パーザで適切な構文木さえ構築してしまえば、あとはVisitorパターンを駆使することで、 XMLでもYAMLでも(Latexでも....)出力形式の切り替えは簡単な処理で実現できるからね。 >>467 あたり
- 470 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:00:25 ]
- >>465
なるほど、使い道としては面白いですね。ちょうど今、コマンドライン解析のあたりやってるし。 でも、勉強としてやってるんで、これが正解ってのがあるほうがいいです。 仕様も自分で考えるんだと、パースしやすいような仕様にしてしまうんで。 >>468 メールアドレスって、foo@examples.comだけじゃなく、"foo" <foo@examples.com>, …のほうですよね。 それはやりがいがありそうなネタですね。
- 471 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:10:01 ]
- >>470
・PCRE(Perl 5 Compatible Regular Expression Library)の正規表現のパーズ。 ・POSIX shellの文法のパーズ。
- 472 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 23:33:28 ]
- >>462
Interpreterパターンって構文解析の為のパターンじゃないの?
- 473 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 23:39:58 ]
- InterpreterはASTのノードに自分自身と子の評価を行う処理を直接埋め込むことで
ASTをそのまま実行するパターンだよ あらかじめ構文解析を行ってASTを作っておく必要がある
- 474 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 03:37:23 ]
- ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29
ウィキペディアには Interpreter パターン = 構文解析のために、文法規則を反映するクラス構造を作る。 って書いてあるんだけど。
- 475 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 04:51:05 ]
- デザインパターンとか大層なもんじゃないでしょ
- 476 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 05:27:58 ]
- Interpreterパターンが構文解析のために利用されるのは正しい表現だと思われ。
あらかじめ構文規則に沿ってオブジェクトを配置する必要があるのは事実だけど、 それは構文解析とは別の話しだし、(yaccみたいな)パーザジェネレータも同じだから。(>>473) 最近はデザインパターンから入る若者が多いから、ごっちゃにして考えやすいけどね。 まあ、デーザインパターンなんて大層なもんじゃないという意見に同意するよ。(>>775)
|

|