- 1 名前:デフォルトの名無しさん mailto:sage [05/01/19 19:06:04 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化, それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 意味論に関する話題も歓迎です。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち) 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ (前スレ) 関連リンクは多分 >>2-10 あたり
- 481 名前:デフォルトの名無しさん mailto:sage [05/02/12 15:28:02 ]
- 適当な言語Xを作る。Xはインタプリタでよい。
↓ XでXのコンパイラX_compを書く。 ↓ X_compをX_compでコンパイルする。 ↓ Xのネイティブコンパイラ完成。
- 482 名前:デフォルトの名無しさん [05/02/12 15:36:36 ]
- >476
字句解析、リスト処理、ファイル入出力などが手軽にできればとりあえずスクリプト言語でもいい。 性能を求めるなら部分的にC/C++で書け。何か問題でもあったのか?
- 483 名前:デフォルトの名無しさん [05/02/12 15:58:40 ]
- ニューラルネットは一定のパターン認識に便利だが、パターンが変わると誤認識だらけのLDのような症状を著しく示すことに留意する。
低次の入力インタフェースから流れる信号からパターンを検出した際に発生した例外処理は低次の処理を中断することなく、結果を高次のインタフェース群に振り分けて渡すことにする。
- 484 名前:デフォルトの名無しさん mailto:sage [05/02/12 16:02:27 ]
- 誤爆?
- 485 名前:デフォルトの名無しさん mailto:sage [05/02/12 17:06:31 ]
- 言語Xのコードをコンパイルする命令"compile"を持つ言語X。
- 486 名前:デフォルトの名無しさん mailto:sage [05/02/12 20:20:21 ]
- ……?
てことは、一番のCコンパイラはアセンブラで書かれてたりしたのか?
- 487 名前:デフォルトの名無しさん mailto:sage [05/02/12 20:22:47 ]
- その前にアセンブラをマシン語直打ちで書かなければなりませんw
- 488 名前:デフォルトの名無しさん mailto:sage [05/02/12 20:32:09 ]
- >>486
ハンドコンパイルだったと思う
- 489 名前:デフォルトの名無しさん mailto:sage [05/02/13 21:00:03 ]
- >>481
実はインタープリタを書くだけでよい。 くわしくは 二村射影(futamura projection)・部分評価(partial evaluation)
- 490 名前:デフォルトの名無しさん mailto:sage [05/02/13 21:13:32 ]
- 詳しそうな人が。
ご存知でしたら教えて欲しいのですが、"offline" partial evaluationの (onlineに対する)画期性はどういうところだったんでしょう?
- 491 名前:デフォルトの名無しさん mailto:sage [05/02/13 21:13:43 ]
- >>489
それは言いすぎじゃね?
- 492 名前:デフォルトの名無しさん mailto:sage [05/02/14 11:37:36 ]
- コンパイラについて深く学びたかったら
どこの大学院がもっとも進んでいるのでしょうか ちなみにコンパイラについては全くの素人(本でかじったぐらい) です
- 493 名前:デフォルトの名無しさん mailto:sage [05/02/14 11:59:37 ]
- >>492
その程度でどうやって研究計画書書くの?
- 494 名前:デフォルトの名無しさん mailto:sage [05/02/14 13:26:27 ]
- 計画書段階じゃ、そんなもんだろ。
本でかじった以上の事は研究しないと無理だよ。 この分野は中間点が無さ過ぎる。
- 495 名前:デフォルトの名無しさん mailto:sage [05/02/14 14:05:43 ]
- インタプリタを作ればいいなんて詭弁を弄してるのがいるが
どの言語でそのインタプリタを作るのかが問題なんだよ
- 496 名前:デフォルトの名無しさん mailto:sage [05/02/14 14:19:46 ]
- いや、これから研究するテーマを書くのに、本読んだだけっていうとほとんど知識が
ないのと一緒。 最近はどんな研究がよくされているのか、とか、注目されているのはどんなことなのか という事も知らなくてはいけない。
- 497 名前:デフォルトの名無しさん mailto:sage [05/02/14 15:11:47 ]
- んなもん適当に論文のabstract読めばいいだけ
- 498 名前:デフォルトの名無しさん mailto:sage [05/02/14 15:42:41 ]
- >>492
学部3年ぐらい? 図書館行って 「情報処理学会論文誌 プログラミング」 という本を探す。 その中から興味をもてそうな研究を選ぶ。 著者のうち、 肩書きが大学の教授とか助手とかになってる人をピックアップ。 その人が著者になってる論文を見て(googleとかで探す)、 興味がもてそうなものが多ければ、 その人の研究室で決まり。 入院試験受ける前に 受かったら研究室に入れてくれるようにネゴっておこうね。
- 499 名前:デフォルトの名無しさん mailto:sage [05/02/14 17:00:49 ]
- >>495
速度重視ならC/C++だろうし、 実装で楽したいなら、 パーサジェネレータから決めるとか。 デザインパターンのインタプリタ・パターンを使うなら、 作りたい言語と同じ制御構造をもったものを選ぶ方がよい。 例外やtry〜finallyとか。
- 500 名前:デフォルトの名無しさん [05/02/14 19:08:25 ]
- LISPの処理系について教えてください。
LISPの文法のBNFを探しているのですが、見つかりません。 LISPのBNF定義が載っている、本またはWebページがありましたら、教えてください。 よろしくお願いします。
- 501 名前:デフォルトの名無しさん mailto:sage [05/02/14 19:35:38 ]
- Aho
- 502 名前:デフォルトの名無しさん mailto:sage [05/02/14 20:00:50 ]
- >>500
ググったら一番上に出てきたけど
- 503 名前:デフォルトの名無しさん [05/02/14 20:10:48 ]
- >500
"common lisp" (syntax OR parser OR source)でGoogle検索。
- 504 名前:500 mailto:sage [05/02/14 21:54:00 ]
- >>502-503
ご教示ありがとうございます。 Googleの結果を開けて回ったところ、日本Lispユーザ会というところに出ました。 このなかにANSIの規格書へのリンクがあったので、こちらを探してみることにします。
- 505 名前:デフォルトの名無しさん mailto:sage [05/02/14 22:13:11 ]
- >>504
"lisp bnf"でウェブ全体から検索にして検索してみ
- 506 名前:500 mailto:sage [05/02/14 22:44:22 ]
- >>505
「The BNF Web」の「BNF Index of LISP」というページが一番に出てきました。 結構簡単な文法なんですね。これなら、すぐBISONに書き込めそうです。 お手数をおかけしました。
- 507 名前:デフォルトの名無しさん mailto:sage [05/02/14 23:14:42 ]
- >>501
アホなのかエイホなのか
- 508 名前:デフォルトの名無しさん mailto:sage [05/02/15 00:17:58 ]
- >>506
lispにbisonはoverkillじゃないだろうか。 要は(read)を書くだけでしょ?
- 509 名前:デフォルトの名無しさん mailto:sage [05/02/15 01:55:44 ]
- >>508
魚雷廷沈めるのに大陸間弾道弾使う見たいなもんじゃねぇの?
- 510 名前:デフォルトの名無しさん mailto:sage [05/02/15 06:00:58 ]
- >>499
やっと>>476に対する適切なレスがw
- 511 名前:デフォルトの名無しさん mailto:sage [05/02/15 10:43:04 ]
- >>798
ドクターはともかく、マスターではネゴっただけで希望の研究室に入れるとは……
- 512 名前:デフォルトの名無しさん mailto:sage [05/02/15 11:59:31 ]
- >やっと>>476に対する適切なレスがw
おぃおぃ・・・・ まっいいか。
- 513 名前:デフォルトの名無しさん mailto:sage [05/02/15 13:15:44 ]
- コンパイラ屋さんとOS屋さんって完全に分業されてるの?
っていうかOS屋さんの存在自体がもう消滅してるか。
- 514 名前:デフォルトの名無しさん mailto:sage [05/02/15 13:35:31 ]
- >>513
OSってまさかWindowsみたいなものを想像しているわけ?
- 515 名前:デフォルトの名無しさん mailto:sage [05/02/15 20:27:58 ]
- >>490
ごめん、PEは専門じゃないので… ここより関数型言語スレの方が詳しい人多いかも。
- 516 名前:デフォルトの名無しさん mailto:sage [05/02/15 22:51:21 ]
- 489 名前:デフォルトの名無しさん[sage] 投稿日:05/02/13 21:00:03
>>481 実はインタープリタを書くだけでよい。 くわしくは 二村射影(futamura projection)・部分評価(partial evaluation) 515 名前:デフォルトの名無しさん[sage] 投稿日:05/02/15 20:27:58 >>490 ごめん、PEは専門じゃないので… PEのことを知らずに書いてたのかよ!
- 517 名前:デフォルトの名無しさん mailto:sage [05/02/16 05:48:52 ]
- >>514
いやもうOSに目新しい技術もないし、実装でもだいたい メジャーどころが決まってるような感じに思ってたけど。 組み込みにLinuxやNetBSDに手を入れて使うようじゃ、 マイナーなOS屋さんのやること、もうないじゃん。
- 518 名前:デフォルトの名無しさん mailto:sage [05/02/16 16:06:41 ]
- >>513はあの比喩で何が言いたかったんだろ。
- 519 名前:デフォルトの名無しさん mailto:sage [05/02/16 16:07:12 ]
- ああ間違えた。>>514だ。
- 520 名前:デフォルトの名無しさん mailto:sage [05/02/16 16:23:51 ]
- このスレのレベルの低さの件について
- 521 名前:デフォルトの名無しさん [05/02/16 23:48:53 ]
- ↑レベルの高いレスの見本
- 522 名前:デフォルトの名無しさん [05/02/19 13:16:42 ]
- 言語屋は、収入も低(ry
- 523 名前:デフォルトの名無しさん mailto:sage [05/02/19 13:27:36 ]
- 高くは無いが低くも無いぞ
- 524 名前:デフォルトの名無しさん [05/02/19 23:26:23 ]
- Perlみたいな複雑怪奇な言語でもLALR(1)文法で解析可能でしょうか?
- 525 名前:デフォルトの名無しさん mailto:sage [05/02/20 00:36:17 ]
- 文法はそこまで複雑じゃないだろ。
- 526 名前:デフォルトの名無しさん mailto:sage [05/02/20 06:01:34 ]
- >>524
Perlはどうか知らんけど、一般に へんてこな言語は字句解析器と構文解析器が 仲良くして構文解析をするんだよ。 そして…フラグの洪水に溺れるんだ…
- 527 名前:デフォルトの名無しさん [05/02/20 19:58:56 ]
- >>526
すんません。最後の1行が分かりません。 どういうことですか?
- 528 名前:デフォルトの名無しさん mailto:sage [05/02/20 20:19:32 ]
- 文脈依存の文法を作るとかそういう話じゃないかな?
- 529 名前:デフォルトの名無しさん mailto:sage [05/02/20 21:03:20 ]
- 字句解析や構文解析ではジェネレータがコードを
自動で生成してくれるからいいけれど、 それ以降の部分は >>526 が手がけなければならないので、 その結果フラグの洪水となる、という話だと思う。
- 530 名前:デフォルトの名無しさん mailto:sage [05/02/20 21:21:03 ]
- >>528 が正しいと思うが。要するにそういう文法を書くためには
レクサとパーサで状態を渡さないといけないのでフラグをさわりまくりになる。
- 531 名前:デフォルトの名無しさん mailto:sage [05/02/20 21:22:36 ]
- >>529
「それ以降」じゃなくて、構文解析中の話じゃない? 構文解析の経過に応じて字句解析の動作を変えないといけなくて、 経過がどうだったかを大量のフラグで管理しとかないといけない、 みたいな。 字句解析で先読みをどんどんやらせて、 それによって構文解析の動作を変えたいなんてのもあるかな。
- 532 名前: デフォルトの名無しさん [05/02/21 22:00:42 ID:3Wu8+w1Z BE:46662645- ]
- 初めまして.皆さんのお力を貸していただけませんか?現在独学で, 「スモールコンパイラの制作で学ぶプログラムのしくみ」を用いて勉強しているのですが, コンパイラの拡張として,
( 1 )関数の引数として 1 次元配列を渡せるように機能拡張する.渡し方は C言語の方法に習い, すなわち, 配列の要素全体のコピーを渡すのではなく, 配列の先頭の番地を渡す. ( 2 )変数の「参照渡し」を実現する.「参照渡し」つまり, 変数を関数の実引数にしたとき, 変数の中身ではなく変数自体の番地を渡すことにより, 呼び出された関数の中から呼び出し元の変数の内容を更新できるようにする. という 2 つの機能を追加させることを考えているのですが記述方法が解らず悩んでいます.解りましたらアドバイスをお願いいたします.
- 533 名前:デフォルトの名無しさん mailto:sage [05/02/21 22:06:37 ]
- せっかくだから著者にラブレ^H^H^Hお手紙を出して聞いてみるのがいいかもw
- 534 名前:デフォルトの名無しさん mailto:ha0115@h3.dion.ne.jp [05/02/21 23:23:25 ID:??? BE:146986079- ]
-
すみません!! > 532 に付け足しで, コンパイラのソースコードは, book.gihyo.co.jp/s-com/ からダウンロードできるようになっております. この本を読んだことがない方でも, 上記 2 問に対する拡張方法のプログラムが解る方からの返信もお待ちしております
- 535 名前:デフォルトの名無しさん [05/02/21 23:45:20 ]
- フラグの洪水の件だが、今の言語は(一部の単純なやつを除き)、
みなそうなる傾向にあるのではないかな? 逆にいうと、(ちょっと飛躍しすぎかも知れんが)レクサとパーサ による解決方法自体が、やや時代遅れになりつつあるのかも。
- 536 名前:デフォルトの名無しさん mailto:sage [05/02/22 00:00:01 ]
- そろそろDCGやgraph grammerの時代になるのか。
ところで今の言語で、パースの難しい構文(の組み合わせ)って例えば何だろう?
- 537 名前:デフォルトの名無しさん mailto:sage [05/02/22 00:18:59 ]
- Ruby!!!!!!!!!!
- 538 名前:デフォルトの名無しさん mailto:sage [05/02/22 01:36:41 ]
- >>537 フラグの洪水でにっちもさっちもいかなくなってる言語の一つだね。
- 539 名前:デフォルトの名無しさん mailto:sage [05/02/22 09:57:08 ]
- >>532
整数型を引数に取る関数と 文字列型を引数に取る関数は実装されてるみたいだから、 そこから類推して配列型を引数に取るものを追加すればいい。 function()とfactor()中の関数呼び出しを実行してる箇所を 取っ掛かりにハック。 (2)は(1)ができてからにしろ。
- 540 名前:デフォルトの名無しさん mailto:sage [05/02/22 10:03:03 ]
- >>535
むしろ最近の言語の方が使用するケースは少ないかと 文脈依存なしでも必要十分な程度の複雑な文法は作れる
- 541 名前:デフォルトの名無しさん mailto:sage [05/02/22 10:07:07 ]
- >>540
C#とJava以外になんかある?
- 542 名前:デフォルトの名無しさん mailto:sage [05/02/22 11:43:57 ]
- >>541
ラベル名に語彙の種別をつける様な文脈依存はあるが、 フラグを引っ掻き回すのは行単位でパースしていた時代の物でもない限りもう無いと思うが……
- 543 名前:デフォルトの名無しさん mailto:sage [05/02/22 12:11:56 ]
- Rubyは行指向言語
- 544 名前:デフォルトの名無しさん mailto:sage [05/02/22 19:04:44 ]
- 現存している言語のなかではfortranのパースが一番難しそうな気がする。
- 545 名前:デフォルトの名無しさん mailto:sage [05/02/22 20:39:50 ]
- ナニ言ってんだ。
一番はる、Ru、る、 C++
- 546 名前:デフォルトの名無しさん mailto:sage [05/02/23 16:12:02 ]
- >>545 んな訳ねぇだよ
- 547 名前:デフォルトの名無しさん mailto:sage [05/02/23 18:15:11 ]
- むしろ現存している実用言語で
教科書的な字句解析・構文解析が通用するような言語ってどのくらいある? Pascal…は簡単なんだっけ。
- 548 名前:デフォルトの名無しさん mailto:sage [05/02/23 18:21:09 ]
- > 教科書的な
関係ないだろ。文法のクラスの問題。
- 549 名前:デフォルトの名無しさん mailto:sage [05/02/23 18:46:44 ]
- >>548
教科書的なクラス(=LR(1)?)で収まる言語を聞いてるんだと思うが。 >>547 とりあえずCはダメだね。 typedefされた識別子は、lexerで識別子じゃなく型名かなんかにしないといけないから。 JavaもLR(1)では無理だった気が。
- 550 名前:デフォルトの名無しさん mailto:sage [05/02/23 18:49:55 ]
- プログラミング言語の専門家が作った言語は大概シンプルな
文法クラスに納まっている希ガス。
- 551 名前:デフォルトの名無しさん mailto:sage [05/02/23 21:27:11 ]
- >>549
>とりあえずCはダメだね。 それをそのクラスに入れるために、スキャナなんてな物を考えるのであって >教科書的な字句解析・構文解析 という点について考えたら、その回答はギャグとしか思えないのだが……
- 552 名前:デフォルトの名無しさん mailto:sage [05/02/23 22:33:05 ]
- Cはtypedef以外にもキャスト式とか、sizeofの中身とか
一意にならない場合があるけど
- 553 名前:デフォルトの名無しさん mailto:sage [05/02/23 22:42:52 ]
- そういや、VCとかに導入されてる__cdeclとか__stdcallって装飾子どこに掛かってるの?
関数のポインタに掛かってる? それとも関数自身? __stdcall f() { } という書き方もできるということは関数に掛かってるんだろうけど、 関数ポインタの場合の装飾子の位置が謎。 (*(int (__stdcall *)())g)() = (int (__stdcall *)())f;
- 554 名前:デフォルトの名無しさん [05/02/23 22:42:58 ]
- >>550
そして、大抵実用的でない言語のような気がするw
- 555 名前:デフォルトの名無しさん mailto:sage [05/02/23 22:47:54 ]
- すまん、こうだった。
int (__stdcall *g)() = (int (__stdcall *)())f; パースする側から見ると凄い変な気がする。 ()からずいぶん離れているのに__stdcallは関数に掛かるという。
- 556 名前:549 mailto:sage [05/02/23 23:16:39 ]
- >>551
ごめん。なに言ってるかマジわかんない。 「C言語は教科書的」って言ってるの? C言語では 「(a)+b」は typedef a されてればキャストだし そうでなければ足し算ってのは知ってる?
- 557 名前:デフォルトの名無しさん mailto:sage [05/02/23 23:28:02 ]
- >>556
Cに単項の+演算子なんてあったっけ? -ならわかるけど。
- 558 名前:デフォルトの名無しさん mailto:sage [05/02/23 23:34:01 ]
- あるだろ。
つうか、-でもいい話じゃないのか?
- 559 名前:デフォルトの名無しさん mailto:sage [05/02/23 23:40:24 ]
- int const extern * p;
「int const*」がひとまとまり。 externはpにかかる。
- 560 名前:デフォルトの名無しさん mailto:sage [05/02/23 23:49:28 ]
- >>556
もちろん知っている bisonの教科書100回よめ、実装なんか簡単だ
- 561 名前:547 mailto:sage [05/02/23 23:57:27 ]
- えと、あまり深く考えずに「教科書的」とか言っちゃったんだけど……。
字句解析と構文解析がなかよくしてフラグの洪水とか、 bisonがどういうオートマトン出力するか気にしながらトリッキーなコード書くとか そういうことしなくてもパースできる、みたいな? LALR(1)の教科書数回読んだだけで解析器作れるようなのを意図してました。 とりあえずCはダメという認識でいいと思います。
- 562 名前:デフォルトの名無しさん mailto:sage [05/02/23 23:59:42 ]
- >>561
机上の空論ばかりやってるからそうなるんだよ、 実践してみろ、どうってことはないし、トリッキーでもないし ましてやオートマトンなんか考える必要もない
- 563 名前:549 mailto:sage [05/02/24 09:24:27 ]
- >>560
bisonの教科書に載ってるって言いたかったのね。 やっと分かったよ。
- 564 名前:デフォルトの名無しさん mailto:sage [05/02/24 10:37:59 ]
- bisonとかそういう物以前に処理系作る人間にとっては初歩中の初歩かと
- 565 名前:デフォルトの名無しさん mailto:sage [05/02/24 14:46:58 ]
- (゚∀゚)ラヴィ!!
- 566 名前:デフォルトの名無しさん mailto:sage [05/02/24 19:54:16 ]
- >>561
lisp。実用言語だ。汎用ではないが。
- 567 名前:デフォルトの名無しさん [05/02/24 21:34:13 ]
- >>566
実用性のない言語の典型例だなw
- 568 名前:デフォルトの名無しさん [05/02/24 21:36:13 ]
- 「なでしこ」のような言語をもし、lex/yacc でやるとしたら、
多量の yacc ルールが必要ですかね?
- 569 名前:デフォルトの名無しさん mailto:sage [05/02/24 21:43:23 ]
- なでしこ知らないけど、
ああいうのはlex(相当)の方が難しいんじゃないかな。 分かち書きを強制とかしない限り。
- 570 名前:デフォルトの名無しさん mailto:sage [05/02/24 23:56:05 ]
- >>567
実用性がある言語の典型だろ。
- 571 名前:デフォルトの名無しさん mailto:sage [05/02/25 00:39:39 ]
- >>567
できない奴の典型だな。
- 572 名前:デフォルトの名無しさん mailto:sage [05/02/25 00:40:04 ]
- 自作じぇん
- 573 名前:デフォルトの名無しさん mailto:sage [05/02/25 00:43:01 ]
- lispに実用性がないってどんだけ世界狭いに住んでるんだろう・・・。
schemeならまだ説得力があったがな。
- 574 名前:デフォルトの名無しさん mailto:sage [05/02/25 00:47:34 ]
- 嫌LISP厨が一人粘着してるだけです
ろくな反論もできない書き込みでわかります
- 575 名前:デフォルトの名無しさん mailto:sage [05/02/25 03:07:15 ]
- Rubyが一番。
- 576 名前:デフォルトの名無しさん mailto:sage [05/02/25 05:21:01 ]
- schemeもライブラリや処理系がないのが実用的に問題なだけで、
言語仕様としては良い。
- 577 名前:デフォルトの名無しさん mailto:sage [05/02/25 05:21:56 ]
- Rubyが新湯ryてんで一番素晴らし魏、
- 578 名前:デフォルトの名無しさん [05/02/25 15:00:25 ]
- >>569
識別子をちょっと凝って切り出すだけでしょ?(lex) 圧倒的に文法規則の方が難しいと思われるが?
- 579 名前:デフォルトの名無しさん mailto:sage [05/02/26 00:22:58 ]
- 字句解析と構文解析の難しさを単純に比べるなんてできないと思われるが?
やることちがうんだし。 しかしなでしこの構文ってそんなに複雑なんかね。 ((式 助詞)* 動詞 句読点)* 程度かと思ってた。
- 580 名前:デフォルトの名無しさん [05/02/26 10:41:59 ]
- XmlShemaの構文解析をしたいのですが、ハードの都合(200kしかメモリ占有不可)
上yaccすら乗せるのがきついため、XMLの字句解析から初めて構文解析を しようと思うのですがyacc等使わない場合皆さんはどのようなスタイルで 書き始めますか?yacc漬けになっていて、スクラッチで字句解析構文解析 どうしようかすげー悩んでます。
- 581 名前:デフォルトの名無しさん mailto:sage [05/02/26 11:00:36 ]
- 昔は32kROM+32kRAMまたはそれ以下でBASICがエディタ付きで動いてたんだ
贅沢いっちゃいかん
|

|