- 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 あたり
- 24 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:34:36 ]
- Xtalの作者ってバンダイナムコゲームスで活動してるんだな…
- 25 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 02:01:57 ]
- 保守
- 26 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:16:19 ]
- jp.ne.cappuccino.keisuken.lex
が字句解析してくれるみたいです。 cappuccino.jp/keisuken/java/lex/docs/specification.html
- 27 名前:16 mailto:sage [2009/03/25(水) 05:11:37 ]
- >>17
>>21 >>22 >>26 何気なく書いただけなのに、暖かいレスさんくす。 他にもJavaの場合には、標準ライブラリのStreamTokenizerを使っても 字句解析らしきことができるようです。 www5b.biglobe.ne.jp/~psoft/lesson/StreamTokenizer.html
- 28 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 20:03:50 ]
- XtalのPEG採用って、言語仕様側じゃなくて、アプリ側だったのか。
言語仕様側だったらセミナーにはぜひ行ったところだったんだが。
- 29 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 20:31:43 ]
- Xtalスクリプトのコンパイラ自体はC++でがりがり書いてるからな。
PEGパーサを組み込みライブラリとして持つとのことようだが(詳しくはソースコード参照)
- 30 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:05:00 ]
- コンパイラつーか、パーサね。
パーサジェネレータ使わずにがりがり書いてるね。腕力のある人はうらやましいわ。
- 31 名前:転載 mailto:sage [2009/04/05(日) 09:38:58 ]
- IGDA Japan chapter - ニュース
www.igda.jp/modules/news/article.php?storyid=1622 13:10 - 14:00 「ごく簡単な並列処理スクリプトシステムの設計と実装」 □講師 小久保啓三(HAL東京) (株)スクウェアでの代表作「ロマンシング・サガ」「FF5」「クロノトリガー」「FF7」。クロノトリガーとFF7では、スクリプトシステムの設計と実装に携わる。 14:00 - 14:50 「『サクラ大戦X』でのスクリプト運用事例」 □講師 秋葉晴樹(セガ) 株式会社セガ 第三CS研究開発部 リードプログラマ。 代表作は、サクラ大戦シリーズ、のび太の新魔界大冒険、ブレイザードライブ。 サクラ大戦シリーズは3から参加、主にADVパートのプログラムを担当。 15:20 - 16:10 「汎用スクリプト言語Xtal 設計と実装」 □講師 石橋立宣(バンダイナムコゲームス) NBGI プログラマ。 PSP塊魂のエンディングミニゲームやシステム周り担当。 PSP太鼓のADV部分やシステム周り担当。 趣味で、C++組み込み用スクリプト「Xtal」を開発。 16:10 - 17:00 「Squirrelスクリプトを使った実装と活用」 □講師 神尾隆司(スクウェア・エニックス) Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル の開発に関わる。 北出智(スクウェア・エニックス) PS2 聖剣伝説4、Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル 等の開発に関わる。
- 32 名前:デフォルトの名無しさん [2009/04/07(火) 12:55:27 ]
- 誘導されてきました。よろしくお願いします。
自作ソフトで使うマクロの文法を、拡張しようと思い、 lexやらyaccやらbisonやら調べ始めたのですが・・・難しい・・・ 例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが 出来るようにするサンプルを探しているのですが、見つかりません。 ・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名 を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力 では限界なので・・・プラグイン名を追加トークンにして、ライブラリお 任せ一発という形に出来ればと思っています。 (プラグイン辞書の関数ポインタ呼び出しみたいな形) ・マクロの中で関数マクロの定義が出来るようにといいのですが、 function hoge(a, b, c) = { age; sage(a, b); uge(c); } hoge(1, 2, 3); こういうのを実現しているサンプルなどありましたら教えてください。
- 33 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:20:14 ]
- 現状、どういう風に構文解析とかしていて、どういう風にマクロを実行したり
プラグインを呼び出したりしてるわけ?
- 34 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:32:15 ]
- 今の時点の文法はシンプルです。プラグイン名と引数、セミコロンのみ。
hoge[(...)]; [...] プラグイン名を配列に積み上げて、一括でマクロ構文を読み込み、 セミコロンで分割して、参照の配列に積み直し。 動かすときに、それぞれのインターフェースを順に呼び出す形です。 これだと代入操作ひとつ出来ないので、何か良い方法を探しています。
- 35 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:06:31 ]
- 関数名だろうが変数名だろうが,言語組み込みじゃないトークンは
トークン化の時点では何も考えず全部「識別子」一括りでおk
- 36 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:21:59 ]
- そもそも、「変数」といったものをどうやって実現したらいいのか、とか、
スクリプトを読み込んで、関数定義があったら何をして、関数の呼び出しが あったら何をするのか、とか、そういうことがそもそも全くわかってないのでは? なんか配列って言ってるけど、リストとか木とかをポインタで操るコードは 書ける? それができないと本格的な処理系は無理。
- 37 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:35:53 ]
- 目先にとらわれて本質が見えてない感じがする
高レベルな言語を触ったりしてみてもいいんじゃない
- 38 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 16:24:26 ]
- >>35
なるほど。最後にまとめてチェックすればいいという考え方ですね。 >>36 その通りです。yaccやbisonのサンプルを探してみても、文書を 解析するところまでで、その先を実際にどうやっているかの例が なかなか・・・。 唯一良さそうな例を見つけました。 >ttp://www.ibm.com/developerworks/jp/linux/library/l-pirates4/index.html 生のソースもとれるようですし、これで勉強してみます。 ホントはもう少しシンプルな例があればいいのですが・・・
- 39 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 16:53:02 ]
- yacc 電卓、で検索すれば簡単な電卓の例がいくつも出てくると思うが...
- 40 名前:デフォルトの名無しさん [2009/04/07(火) 17:02:05 ]
- yacc/lexを自作するところから始めるのがお勧め。
- 41 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 07:11:35 ]
- LLVMの簡単な使い方ってどこ見ればいいのですかね?
- 42 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:21:46 ]
- >>41
llvm.org/
- 43 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 13:17:44 ]
- これはワクテカじゃないか?
InfoQ: LLVMおよびRubyの総まとめ:llvmruby、yarv2llvmおよびregexpllvm、Rubinius www.infoq.com/jp/news/2008/10/llvmruby-roundup-yarv2llvm InfoQ: MacRuby 0.5にLLVMをベースにした高速VMが搭載される www.infoq.com/jp/news/2009/04/macruby-llvm-speed
- 44 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 03:35:20 ]
- おー、世の中にはこんな便利なものがあるのか。
たとえ苦労してでも勉強して使いこなしたいところだな。
- 45 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 18:14:29 ]
- >>38
コンドーさんの「yaccによるCコンパイラ」がおすすめ ・・・なんだけど、プレミアがついちゃって高いんだよなあ
- 46 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 12:04:35 ]
- >>38
yaccやbisonでないと駄目なのかい? 古くさくて使いにくいから、今からパーサを書くなら 他にいいジェネレータがありそうだけど。 C++、C#、Javaならばcaperがお薦め。 (Javaジェネレータはまだレポジトリから落としてビルドする必要がある) ttp://naoyuki.hirayama.googlepages.com/caper.html ttp://code.google.com/p/caper/updates/list どうしてもyaccやbisonがいいなら、以下を読めばいいよ。 ttp://guppy.eng.kagawa-u.ac.jp/2006/ProgLang/bison-1.2.8/bison-ja_toc.html
- 47 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 14:37:19 ]
- >>46
日本語の文書!! いや実は挫折してました。ごめんなさい。がんばります。
- 48 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 18:29:20 ]
- 紙メディアで出てるGNUのBison解説とかどうかな?
- 49 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 22:46:38 ]
- >>48
以下のことですな。 www.amazon.co.jp/Bison入門-チャールズ-ドネリー/dp/4756130658 内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。 紙媒体だと電車の中などで読めるのがいいんだけどね。
- 50 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 23:31:19 ]
- そういえばこんなのが出るとか
Flex & Bison - by J Levine (2009/8/31) www.amazon.co.jp/dp/0596155972
- 51 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 08:10:34 ]
- > 内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。
うわわわ。絶版してたのか。
- 52 名前:46=49 mailto:sage [2009/04/29(水) 10:37:05 ]
- >>47
> yaccやbisonのサンプルを探してみても、 > 文書を解析するところまでで、 > その先を実際にどうやっているかの例がなかなか・・・。 > > 日本語の文書!! 日本語で書かれていて意味解析以降も 全部載っているドキュメントを探してきた。 ecs.kuis.kyoto-u.ac.jp/isle/le3b/siryo.ps Flexの解説 (GNU公式ドキュメントの日本語訳) もあった。 Flex入門 ascii.asciimw.jp/pb/bookmart/pdf/47561/4756130976.pdf
- 53 名前:52の続き mailto:sage [2009/04/29(水) 10:41:59 ]
- 読みやすいように、要点だけ説明しておこう。
まずは字句解析から。 まずはソースファイルを読み込み、字句解析にかける。 字句解析では文字列を切って、種類を表すタグを付ける。 (タグはenumなどの定数) 例えば、 int main(void) {return 0;} ならば、字句解析の結果は elem(INT, "int"); elem(ID, "main"); elem(PAREN_L, "("); elem(VOID, "void"); elem(PAREN_R, ")"); elem(BRACE_L, "{"); elem(RETURN, "return"); elem(INTLITERAL, "0"); elem(SEMICOLON, ";"); elem(BRACE_R, "}"); のようになる。 (elemはC++のクラスのつもり) 引数は左がenum定数で右は文字列ね。 一行を1つの構造体 (またはクラスやタプル) に入れると便利。 (Flexだと種類と文字列を別々に取得するんだったかな?)
- 54 名前:52の続き mailto:sage [2009/04/29(水) 10:55:29 ]
- 字句解析の結果を構文解析にかける。
上の例だと、ベタに書くと以下のようになる。 Program : INT ID PAREN_L VOID PAREN_R BRACE_L RETURN INTLITERAL SEMICOLON BRACE_R ; 「=」の右側には、どういう種類の文字列がどういう順で並んでいるかを書く。 これだと本当に上の例しか読めなくなるので、 例えばVOID型で中身の無い関数も定義できるようにすると、以下のようになる。 (「|」は「または」という意味, 複数のパターンのどれでもいい場合に使う) Program : INT ID PAREN_L VOID PAREN_R BRACE_L RETURN INTLITERAL SEMICOLON BRACE_R | VOID ID PAREN_L VOID PAREN_R BRACE_L BRACE_R ; これで、以下のコードも読めるようになった。 void main(void) {}
- 55 名前:52の続き mailto:sage [2009/04/29(水) 10:58:05 ]
- しかし、こうやって全部のパターンを網羅していくときりが無いよね。
だから、部分的に抜きだして共通化する。 上の例だと、 Program : ReturnType ID PAREN_L VOID PAREN_R BRACE_L Body BRACE_R ; ReturnType : INT | VOID ; Body : // 空の場合は何も書かない | RETURN INTLITERAL SEMICOLON ; こんな具合に、共通でない部分を追い出してやるわけだ。 # void型なのにreturnしている関数や # int型なのにreturnしていない関数も読めるようになったことに注意。 構文解析では、一度に完璧な定義を書こうとせずに、 少しずつ解析できるパターンを増やしていくとやりやすいと思う。
- 56 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 17:46:16 ]
- >>30
LLVMもbisonパーサから手書きのパーサにかえたんだっけ。 案外、手書きの方が開発しやすいのかな?
- 57 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 15:51:13 ]
- 構文の規模や性質や、頻繁に規則をいじるかどうか、などなどによる。
- 58 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 01:30:41 ]
- FlashのActionScriptで自作言語を作ろうとして
ttp://www.hakkaku.net/articles/20080226-154 ttp://www.hakkaku.net/articles/20080307-158 を先日から見ているんだが、字句解析の部分がさっぱりわからん。 構文解析のkmyaccの部分は良く分かるんだが、lexにあたる部分を 手書きしているらしく、なんか自力でトークンを探して分割したり クラスをゴリゴリ作ったりしている。正直ムリポ。 その辺に落ちてるlex/flexで代用したいんだが、どうやればいいんだろう? もしそれがムチャなことなら、「kmlex」的なものはないだろうか?
- 59 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 04:26:19 ]
- このレベルがわからないんじゃ
言語なんて作るの無理
- 60 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 07:28:20 ]
- AS3.0以降はRegExpあるから、自作してもすぐ出来るだろ
- 61 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 07:50:10 ]
- RegExpで字句解析するの?
- 62 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 08:10:18 ]
- RegExpで字句解析しないの?
- 63 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 08:23:56 ]
- な・・・RegExpで字句解析しただと!?
- 64 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 09:11:48 ]
- パース、構文木生成、式解釈、ニーモニック生成、コード出力をやるだけだ。
慣れたらゼロからでも数日で実装できる。
- 65 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 01:25:57 ]
- LLVMを勉強したいです
書籍ってありますか?
- 66 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 02:14:25 ]
- 本家のドキュメントがよい。
- 67 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 09:20:42 ]
- 本家にkaleidoscopeっていう処理系を作りながらllvmを憶えるチュートリアルがあるよ。
- 68 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 23:32:34 ]
- >>61
「文字列の先頭からアルファベットに引き続く、空白までの連続部分のマッチ」に 該当すれば、それを予約語として認識し、文字列からその部分を取り除いて 再度先頭から…を繰り返しているんだろう。 >>62 getChr()で一文字づつ文字を読み込んで、「空白の次にアルファベットだから このトークンは予約語」というアタリの付けかたをしているんだろう。
- 69 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 17:16:46 ]
- ドラゴンブック二版の邦訳買ってきたよ。すごい紙薄い。
- 70 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 18:16:41 ]
- いい紙なのかな。TAOCPみたいな?
- 71 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:45:48 ]
- バラシテスキャンしないと
- 72 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:22:08 ]
- up2.viploader.net/pic2/src/viploaderf159403.jpg
バーコード邪魔
- 73 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:49:06 ]
- [これはひどい]
絵本とかでバーコードがシールになってて、買ったらはがせるのあるけど、 そうしてほしいところだな。技術書だから無理に決まってるけど。
- 74 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:53:56 ]
- なんか本当に剣と魔法の挿絵になってね?
- 75 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:01:57 ]
- 楯が Syntax Directed Translation
剣が LALR Parser Generation 鎧が……読めにゃい 竜が Complexity of Compiler Design かな?
- 76 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:24:16 ]
- 拡大
up2.viploader.net/pic2/src/viploaderf159408.jpg
- 77 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:32:24 ]
- Data Flow Analysis か
- 78 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:32:32 ]
- コンパイラ第2版ってどこ改訂されたの?
- 79 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 02:55:37 ]
- 全面的に
- 80 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 03:02:46 ]
- 読みやすくなってる?
- 81 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:40:02 ]
- >>75
もう画像流れてるわ 第一版と同じで鎧は syntax directed translation じゃなかろうか default を「省略時解釈」とか、そういうのが無くなってるといいんだが
- 82 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:24:48 ]
- > 第一版と同じで鎧は syntax directed translation じゃなかろうか
それは盾だって>>75に > default を「省略時解釈」とか、そういうのが無くなってるといいんだが 往年の教科書では定番だったよねそういう訳
- 83 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:28:33 ]
- 最近の本は「既定の…」になるの?w
- 84 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:09:37 ]
- ごめん、data flow analysis だな
- 85 名前:デフォルトの名無しさん [2009/06/06(土) 01:03:33 ]
- 検索でここまで辿り着きました。
宜しくお願いします。 現在、オブジェクト指向のクラスの実装などが、 コンパイラでどのように実現されているのかに興味を持ち、勉強中です。 コンパイラの本も何冊か買い、簡単に目を通しましたが、 殆どが手続き型言語のコンパイラの解説で終わっており、資料の少なさに困っています。 自分で探した範囲で、オブジェクト指向型言語のクラスの実装等に触れられている本は、 『コンパイラの構成と最適化』(朝倉出版)しか見つけることが出来ませんでした。 『コンパイラ―原理・技法・ツール』の第2版版が最近出版されたようなので、 書店で立ち読みをして見ましたが、オブジェクト指向言語に関しては、 余り記述がされていないようです(短時間立ち読みをした程度なので、見落としてるだけなのかもしれませんが…)。 上で記述した以外に、オブジェクト指向言語の具体的な実装について書かれたコンパイラ等の書籍などがご存知の方がいらっしゃいましたら、本の題名等をご教示頂けると幸いです。
- 86 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:21:19 ]
- なぜそんなにオブジェクト指向にこだわるのか理由がよく分からないな。
まあ、単純にオブジェクト指向を特徴としている言語の実装が知りたいなら、 ソースコードを入手して眺めるのが一番早いだろう。 RubyやPythonなんかでどうだ?
- 87 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:24:05 ]
- >>85
gcc読んでここでその成果全部書けよ そしたら教えてやるから
- 88 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:40:21 ]
- >>85
"Rubyソースコード完全解説"
- 89 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:43:11 ]
- 『いまどきのプログラミング言語の作り方』に、ちょっとだけ載ってたかなあ
- 90 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:16:32 ]
- >>86
OOPにこだわる切欠は、自分で作ったCのプログラムを逆アセンブルして、アセンブリ言語の勉強をしていた時、JavaなどのOOP言語では、どのようにソースコードがバイトコードなどに置き換えられ、クラス等がどの様に実装されているのかに興味を惹かれたためです。 PythonやRudyに関しては、恥ずかしながら名前しか知りませんでした。 ソースコードもダウンロードしてみました。 再度の質問になり恐縮ですが、これはコンパイラのソースコードではないかと考えていますが、その様な理解で良いのでしょうか? どちらにせよ、自分の勉強不足は明らかなので御指摘を元に、勉強してみます。 アドバイスをありがとう御座います。 >>87 まだ勉強を始めたばかりで、恥ずかしながらgccについては、知りませんでした。 gccについて、これから勉強してみたいと思います。 >>88 検索して見つけることが出来ました。 Amazonで買おうかとも思いましたが、プレミアが付いているようで、とても高いですね。 Webで本文が見られるみたいなので、それを見させていただきます。 ご教示ありがとうございます。 >>89 Amazonでも今は取り扱っていないようですね。 評判の良い本のようなので、購入を検討してみます。 ありがとうございました
- 91 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:31:26 ]
- >>90
RubyやPythonは、オブジェクト指向のスクリプト言語だ。 現代のスクリプト言語はいったんバイトコードにコンパイルされてから実行される形式が一般的で、 従ってコンパイラと呼びうるすべての要素がソースコード内に含まれている。 そしてそこから先(バイトコードをどのように動かすかの仮想マシンの実装)もあるわけだ。 いい教材になるわけで。
- 92 名前:90 mailto:sage [2009/06/06(土) 10:21:50 ]
- >>91
そうなんですか。 その事については、知りませんでした。 コンパイラの動作をソースコードを読むことで確認出来るというのは、 私のように学習を目的としている者にはありがたい話です。 Rudyは書籍やWebでの資料が充実しているようなので、これから調べてみます。 ご教示、ありがとう御座いました。
- 93 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 11:25:22 ]
- >>92
Rubyソースコード完全解説という神書籍があってだな、絶版だが、初版が無料公開されているのでオススメ Rubyソースコード完全解説 i.loveruby.net/ja/rhg/book/
- 94 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:53:04 ]
- >>90
参考までに、Javaのバイトコード仕様はSunのサイトで閲覧できる (英語)。 SunのJDKに付属しているjavapとかで逆アセンブルできるよ。 他にEclipse用のプラグイン「Bytecode Outline plugin for Eclipse」とかでも。 Eclipse用だと「Classfile Inspector」(有料 99Euro)ってのもあったけど、いまググったら サイトが消滅したようだ。
- 95 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 07:45:39 ]
- 速攻MinCamlコンパイラ概説
ttp://min-caml.sourceforge.net/
- 96 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:54:28 ]
- >>85
英語は読めますか?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:07:20 ]
- あんまり道を示しすぎてもパンクすると思うんだが。
85とは関係なしに紹介したいサイトがあるなら、俺が消化するから構わず続けてくれ。
- 98 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:54:40 ]
- www.amazon.com/Advanced-Compiler-Design-Implementation-Muchnick/dp/1558603204/
www.amazon.com/Modern-Compiler-Design-D-Grune/dp/0471976970 この辺りの概説書にはOOの実装のこと"も"解説してる。 www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ はOO関連のコンセプトの整理がうまい。実装についても書いてある。 全般的な概説書はやはり記述がプアになるので、C++に限れば一番詳しいのは、訳書の www.amazon.co.jp/dp/4810181014 これだけど、今は絶版なので、 www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545 原書を読めばいい。 ARM(注解 C++リファレンスマニュアル)も詳しく説明している。これも絶版なので、 www.amazon.com/Annotated-C-Reference-Manual/dp/0201514591 Objectのslot accessでC++と全く異なるアプローチで有名なのが、 code.google.com/intl/ja-JP/apis/v8/design.html#prop_access Selfの元の論文が、 research.sun.com/self/papers/implementation.html にある。JITと相性がよい。 もちろんaccessが遅くていいなら他にも幾らでもやりかたはある。 Objective-Cなんかはhash引いている。
- 99 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:07:35 ]
- 普段はレキサ・パーサレベルの話しか出ないのに、堰を切ったようにいろいろ出てくるな
実はみんな、教えることに飢えてたのか?
- 100 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:40:03 ]
- lexerかparserより先に進んだ質問者がなかなかいないからじゃないかな
- 101 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:19:24 ]
- じゃあ俺がお前らの意見を聞いて
万人が理解できるlexerとparserの サンプル書いてやる ということでまず何をすればいいぉ?
- 102 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:00:12 ]
- 文法決めれ
- 103 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:09:06 ]
- >>101
かっこに対応した四則演算とかどうだ
- 104 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:58:23 ]
- 四則演算はネット上にゴロゴロしてるからイラネ
- 105 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:18:37 ]
- forループとif-else-endifの構文サンプル
- 106 名前:90 mailto:sage [2009/06/09(火) 22:05:49 ]
- >>93
教えて頂いて、ありがとう御座います。 絶版の資料が無料で公開されているのは、ありがたいですね。 >>94 Javaのバイトコードにも、興味があります。 Java仮想マシン仕様は、日本語の書籍でも出版されているので、今度読むつもりでした。 仮想マシンの概念は、コンピュータのアーキテクチャとも密接に関わってくる事項なので、興味深いですね。 >>96 正直、英語はまともには読めません。 日本語の資料で勉強するのに限界を感じているので、 英語の勉強をやり直そうと思ってます。 >>98 今まで知らなかった資料が多いので、参考になります。 英語の資料が多いですね。 コンパイラの勉強の前に、英語をやり直して、 資料をまともに読めるようになってから、勉強をし直すべきかもしれません。 コンパイラの勉強は、思っていたよりもしんどそうですが、 今まで知らなかった資料を紹介していただいたので、今後の勉強の指針が見えた気がします。 教えていただいた資料を参考に、頑張ってみます。
- 107 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:28:05 ]
- >>105
それだッッッ ブロックの扱いがどうやればいいのか 悩みまくっている俺にはおいしいです ^q^ ^
- 108 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:57:09 ]
- >>101 lexer parser 何てどうとでもなるから
cps とか ssa あたりの内部表現の評価手法を, 最適化方法に合わせた一覧として提示してくれ
- 109 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:05:45 ]
- >>108
どうとでもならない人のための相談室スレだと思うんだ。 だから、出来る人は我慢して、ここはレベルを下げて欲しいんだ。
- 110 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:11:32 ]
- 平行すりゃいいじゃん
誰か一人のためのスレってわけでもないんだし。
- 111 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:32:56 ]
- >>108
オレは専門家じゃないのでCPSもSSAもどちらの用語も知らなかったが、 これってLLVMで全部実装されてるんじゃね? やはりLLVMの包括的な解説記事が欲しいところだな。
- 112 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:43:18 ]
- >>107
Pascalのone pass compiler読め。 homepages.cwi.nl/~steven/pascal/book/7statements.html
- 113 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:19:43 ]
- >>111
LLVMは既に提出されているものをうまくつなぎ合わせてるだけ つなぎ合わせ方法はいくらでもある 各要素項目を網羅的に解説したものがほしい つか、現場にいるとそっち系をゆっくり、みてる暇がない
- 114 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:43:17 ]
- >>113
実務者としては、実装されてない方法より 既に実装されているものの解説のほうが遥かに役に立つ。 >各要素項目を網羅的に解説したものがほしい この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね?
- 115 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:45:38 ]
- >>108
Tiger Bookや"Practical Improvements to the Construction and Destruction of Static Single Assignment Form."は読んだの?
- 116 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:48:23 ]
- >>114
> 実務者としては、実装されてない方法より > 既に実装されているものの解説のほうが遥かに役に立つ。 ぶっちゃけここで質問している人が、 現実に使われているコンパイラのソースを参考にして、 自分のコードに反映させるのは難しいと思う。 そのくらいコンパイラは複雑化している。 さらに学習用のコンパイラは関数型言語で書かれているものが多く、 実務指向の人とは相容れないものがあるだろう。 謙虚な気持ちで学習するのが一番。
- 117 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 02:21:44 ]
- >>114
> 実務者としては、実装されてない方法より > 既に実装されているものの解説のほうが遥かに役に立つ。 要素手法が見えにくいんだよね。まとまってしまうと。 ましてや、cps とか ssa 使った状態での複合リダクションとなると。 > この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね? そりゃたくさん持ってるさ ただ、現場をかかえてるとそっちばっかやってるわけに行かなくなるんだよな >>116 > さらに学習用のコンパイラは関数型言語で書かれているものが多く、 > 実務指向の人とは相容れないものがあるだろう。 それは気にならないんだけど、細切れの論文掻き集めて整理やり直す時間はとれねぇよ
- 118 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:16:43 ]
- 実務指向でコンパイラを今時つくりたい、なんて人はいないと思う
スクリプトでDSLをさっくり組むならともかく
- 119 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 19:19:12 ]
- >>90
www.amazon.co.jp/コンパイラとバーチャルマシン-Text-今城-哲二/dp/4274133087 ↑この本に、オブジェクト指向も例外処理も分かりやすく載ってるよ。 薄くてすぐに読めるし、お薦め。 ただ、日本語で概要が載っているだけなので、 実装するには自分で知恵を絞らないとだけど。 現代的なコンパイラは、内部で何度も変換を繰り返して、 最終的に実行可能なコードをはく。 オブジェクト指向の場合は、最初の方で非オブジェクト指向の Cみたいなコード (AST) に変換してしまうと、 後はよく書籍に載っているような方法が使えていいと思う。 コンパイラを全部 (シンタックスシュガーの除去から アセンブラの出力まで) 自作するのは、大規模過ぎて現実的じゃない。 だから、自分が関心を持っている部分以外は なるべく既存のものを利用するといいと思う。 例えばCのコードを書きだすコンパイラを書けば、 アセンブラごとにジェネレータを自分で書かなくても 多くの環境で動くし、最適化もCコンパイラに頼める。 例外処理などはCでは実装しにくいので、 必要ならLLVM IRを出力するという方法もあるよ。
- 120 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 19:25:19 ]
- >>118
「実務」の中身によるんじゃないかな?
- 121 名前:119 mailto:sage [2009/06/13(土) 19:32:59 ]
- 以前、Javaバイトコードに変換するコンパイラも書いたことがあるけど、
Javaだと「.class」ファイルはクラス単位でオブジェクト指向になっていて、 オブジェクト指向「からの」変換はJVMが担当している。 だから、バイトコードの仕様を読んでも、あまり参考にはならないと思う。 同じ理由で、JVMをターゲットにした (「.class」ファイルを生成する) コンパイラも皆、参考にならないと思う。
- 122 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 20:10:29 ]
- リンゴの本見ればコンパイラなんて3日で書けるだろ
- 123 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 10:39:22 ]
- >>121
最近はclassファイルを扱うためのライブラリがたくさんあるよ。
- 124 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 11:15:34 ]
- >>121 が言ってるのは、Java のオブジェクト指向的な面
(動的バインディングとか)が実現されてるのは、Java VM自体 なので(invokevirtual命令とか)、オブジェクト指向言語を ふつうのCPU上で実現するコンパイラの参考にはならん、と いうこと。
|

|