- 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 あたり
- 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がエディタ付きで動いてたんだ
贅沢いっちゃいかん
- 582 名前:デフォルトの名無しさん mailto:sage [05/02/26 13:25:44 ]
- XMLにyaccか、
なんとも不思議な使い方だね…… 俺だったらスキャナは使ってもパーサは使わないな ま、それはともかくフルスクラッチすればいいんじゃない、 速度さえ気にしなければXMLのパースは簡単だし、考える事なんか無いし。
- 583 名前:Rubyist! mailto:sage [05/02/26 18:04:39 ]
- フルスクラッチって何ですかpu
- 584 名前:デフォルトの名無しさん mailto:sage [05/02/26 18:10:13 ]
- フルチンみたいなものです
- 585 名前:デフォルトの名無しさん mailto:sage [05/02/26 19:26:01 ]
- 無の状態から全てを作り上げるフルスクラッチビルド
ttp://www5f.biglobe.ne.jp/~rebro/DSCF0042kuri].JPG
- 586 名前:デフォルトの名無しさん [05/02/27 00:34:22 ]
- りんご農園でも、日本語の変数名が扱えるYO。
- 587 名前:デフォルトの名無しさん mailto:sage [05/02/27 19:49:20 ]
- 実際の所、最適化のほうがはるかに難しいと思われ。
- 588 名前:デフォルトの名無しさん mailto:sage [05/02/27 20:11:02 ]
- >>587
その通り。
- 589 名前:デフォルトの名無しさん mailto:sage [05/02/27 21:21:34 ]
- perlでさえインライン展開ぐらいやるよ
- 590 名前:デフォルトの名無しさん mailto:sage [05/02/28 00:22:39 ]
- どのレスがどのレスに対する反応なのか、さっぱりわからんのは俺だけか?
- 591 名前:デフォルトの名無しさん mailto:sage [05/02/28 01:03:32 ]
- 藻前だけ
- 592 名前:デフォルトの名無しさん [05/02/28 23:08:34 ]
- >>588
同意
- 593 名前:デフォルトの名無しさん mailto:sage [05/03/01 10:29:26 ]
- >>590
今に始まったことじゃない。
- 594 名前:デフォルトの名無しさん mailto:sage [05/03/01 13:55:33 ]
- 中田センセイ (´・ω・`)
- 595 名前:デフォルトの名無しさん [05/03/01 22:31:34 ]
- りんこのねーちゃんの本には、ケータイ画面の写真みたいたのがあったけど
(ry
- 596 名前:デフォルトの名無しさん mailto:sage [05/03/01 23:06:22 ]
- >>595
いくらなんでもそれは略しすぎだろう
- 597 名前:デフォルトの名無しさん mailto:sage [05/03/02 02:53:21 ]
- りn(ry
- 598 名前:595 mailto:sage [05/03/02 22:15:54 ]
- …あれって、ねーちゃんの携帯かなぁ?
- 599 名前:デフォルトの名無しさん mailto:sage [05/03/02 22:29:04 ]
- あほきたー
- 600 名前:デフォルトの名無しさん mailto:sage [05/03/03 12:24:26 ]
- モレモナー
- 601 名前:デフォルトの名無しさん mailto:sage [05/03/03 14:45:44 ]
- >>600
おまえもかよ!
- 602 名前:598 [05/03/03 21:35:10 ]
- >>599
お前が一番の(ry
- 603 名前:デフォルトの名無しさん mailto:sage [05/03/03 21:44:13 ]
- >>583->>602
この辺あぼーんしました。
- 604 名前:デフォルトの名無しさん mailto:sage [05/03/03 21:50:40 ]
- >>583->>603
この辺あぼーんしました。
- 605 名前:デフォルトの名無しさん [05/03/04 18:57:57 ]
- 今日、電車乗ってたら、前にキモオタが二人乗ってきた。
なんか一人がデカイ声で「貴様は〜〜〜!!だから2ちゃんねるで馬鹿に されるというのだ〜〜〜!!この〜〜〜!」 ともう片方の首を絞めました。 絞められた方は「ぐええぇーー!悪霊退散悪霊退散!!」と十字を切っていた。 割と絞められているらしく、顔がドンドンピンクになっていった。 渋谷でもう一人、仲間らしい奴が乗り込んできてその二人に声をかけた。 「お!忍者キッドさんとレオンさん!奇遇ですね!」 「おお!そういう君は****(聞き取れず。何かキュンポぽい名前)ではないか! 敬礼!」 「敬礼!出た!敬礼出た!得意技!敬礼出た!敬礼!これ!敬礼出たよ〜〜!」 俺は限界だと思った。
- 606 名前:マイク ◆yrBrqfF1Ew mailto:sage [05/03/04 19:19:52 ]
- 限界も何も君の友達じゃないのか。
- 607 名前:デフォルトの名無しさん mailto:sage [05/03/04 21:19:26 ]
- おまいら、しっかりしろ!スレ違いも甚だしいぞ!
もう一度>>1のテンプレ貼っておくぞ! プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化, それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 意味論に関する話題も歓迎です。
- 608 名前:デフォルトの名無しさん mailto:sage [05/03/05 13:50:23 ]
- やこしい内容にするからかえってチョッカイ出しただけの困ったちゃんが湧いてくるような気がする。
次スレはシンプルに初代の1の内容 「yaccやlexの使い方やら言語仕様やらの話題。 」 に戻すかね、周辺の話題はスレの流れで勝手に入ってくるに任せる感じで。
- 609 名前:デフォルトの名無しさん mailto:sage [05/03/05 14:21:35 ]
- サンデープログラマが初めて勉強するべきコンパイラコンパイラは何かについて
英語とOOP はアリ
- 610 名前:デフォルトの名無しさん mailto:sage [05/03/05 14:25:38 ]
- ↑日本語でおながいします
- 611 名前:デフォルトの名無しさん mailto:sage [05/03/05 19:26:03 ]
- オブジェクト指向プログラミング(OOP: Object Oriented Programming)
- 612 名前:デフォルトの名無しさん mailto:sage [05/03/05 19:29:45 ]
- >>610
諦めろ。>>609は日本語を理解してないぞ。
- 613 名前:デフォルトの名無しさん [05/03/05 23:28:51 ]
- LISP と OOP 程、やくにたたんものはない。
- 614 名前:デフォルトの名無しさん mailto:sage [05/03/05 23:37:14 ]
- と、世間で役立たずの613は語った。
- 615 名前:デフォルトの名無しさん mailto:sage [05/03/07 10:04:09 ]
- >>608
構文解析およびyacc,lexx のスレ と >>1の内容みたいなスレを分けた方がいいんじゃないの?
- 616 名前:デフォルトの名無しさん mailto:sage [05/03/07 10:09:19 ]
- わけるほどのモノじゃねえよ
- 617 名前:デフォルトの名無しさん mailto:sage [05/03/07 10:36:04 ]
- >>616
最適化の話は一つ一つが長くなるとは思うが今まで一度も出てきてない気がするの俺だけ?
- 618 名前:デフォルトの名無しさん mailto:sage [05/03/07 11:05:53 ]
- 出てきてから考えれば?
- 619 名前:デフォルトの名無しさん mailto:sage [05/03/07 12:43:32 ]
- >>615
被りまくりの上に、それほどの話題は存在しない、そんな必要はない ただでさえ人口が少ない上、部外者だらけのこのスレをこれ以上薄めてどうする。
- 620 名前:デフォルトの名無しさん mailto:sage [05/03/07 13:48:33 ]
- インライン展開の話がしたい
- 621 名前:デフォルトの名無しさん mailto:sage [05/03/07 22:53:01 ]
- >>620
インライン展開の話をすることを許可する。 さぁ、存分にやりたまえ。
- 622 名前:デフォルトの名無しさん mailto:sage [05/03/07 23:17:52 ]
- >>620
インライン展開ってさ、キャッシュの容量が小さすぎるCPUで泣いたことない? 組み込み系やってないとわからないかもしれん(つかイマドキのPCってすごすぎ)
- 623 名前:デフォルトの名無しさん mailto:sage [05/03/08 11:06:18 ]
- >>620
どうぞどうぞ、ガンガン書いちゃって下さい
- 624 名前:デフォルトの名無しさん mailto:sage [05/03/08 15:14:38 ]
- 俺は彼女の陰ラインを展開し
その淫乱な姿に欲情した こんなに濡れてるよ体は正直だね(ry
- 625 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:06:10 ]
- ロバート・A・はインライン展開した幼年期の終夏への扉
・A・ イクナイ
- 626 名前:デフォルトの名無しさん [05/03/09 23:48:53 ]
- りんご展開
- 627 名前:デフォルトの名無しさん mailto:sage [05/03/10 00:22:07 ]
- インライン展開の話に戻しますが、
単純に展開しただけでは、 inline f(int x) { return x; } g(int y) { return f(y) + f(y); } ↓展開 g(y) { int x1 = y; // f(y) int x1r = x1; // return x int x2 = y; // f(y) int x2r = x2; // return x return x1r + x2r; } こんな感じになって変数がいくつも必要になる気がします。 上の展開結果から g(y) { return y + y; } を導き出すには、フロー解析しないとダメでしょうか? または別に何か簡単な方法があるでしょうか。
- 628 名前:デフォルトの名無しさん mailto:sage [05/03/10 02:32:35 ]
- 不要コード除去くらいするもんだと思うが。
|

|