「コンパイラ・スクリプトエンジン」相談室13
at TECH
1:デフォルトの名無しさん
09/01/28 20:49:02
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。
過去スレ
1 URLリンク(pc.2ch.net)
2 スレリンク(tech板)
3 スレリンク(tech板)
4 スレリンク(tech板)
5 スレリンク(tech板)
6 スレリンク(tech板)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
関連リンクは多分 >>2-10 あたり
2:デフォルトの名無しさん
09/01/28 20:49:29
Wikiのまとめページ
URLリンク(www6.atwiki.jp)
★コンパイラ一般
・色々なツールの紹介
URLリンク(catalog.compilertools.net)
・コンパイラ関連のリンク集
URLリンク(www.ulis.ac.jp)
・スクリプティング言語資料室(仮) (リンク集)
URLリンク(www.kt.rim.or.jp)
・Compiler Construction
URLリンク(www.ie.u-ryukyu.ac.jp)
・情報システム工学実験 III コンパイラ・コンパイラ
URLリンク(math.cs.kitami-it.ac.jp)
・OS/Programming 簡単な C コンパイラ
URLリンク(www.csg.is.titech.ac.jp)
・正規表現
URLリンク(hp.vector.co.jp)
・コンパイラ研究・開発情報の一集積所
URLリンク(compilers.cs.uec.ac.jp)
・Links and Selected Readings
URLリンク(www.gnu.org)
・国産のコンパイラ共通インフラストラクチャCOINS
URLリンク(www.coins-project.org)
3:デフォルトの名無しさん
09/01/28 20:49:56
★字句・構文解析
・Lex and YACC primer/HOWTO (邦訳)
URLリンク(www.linux.or.jp)
・Turbo Pascal Lex/Yacc
URLリンク(www.musikwissenschaft.uni-mainz.de)
・Jim Roskind's LALR(1) C++ Grammar
URLリンク(www.empathy.com)
・Flexと Bisonを同時に使う
URLリンク(guppy.eng.kagawa-u.ac.jp)
・KITE_ASM (yacc,lex)
URLリンク(www.arch.cs.kumamoto-u.ac.jp)
・bison用のC++ LALR skeleton
URLリンク(www.bj-ig.de)
・ANTLR(非yaccのパーサジェネレータ)
URLリンク(www.antlr.org)
・JavaCC(Java Compiler Compiler)
URLリンク(javacc.dev.java.net)
URLリンク(village.infoweb.ne.jp)
URLリンク(www.asahi-net.or.jp)
・CUP, JLex, JFlex
URLリンク(www.cs.princeton.edu) (JLex, CUP)
URLリンク(www.jflex.de)
・SableCC
URLリンク(www.sablecc.org)
・¬<><∪∪ (notavacc)LALR(1)
URLリンク(ne.cs.uec.ac.jp)
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
URLリンク(spirit.sourceforge.net)
URLリンク(boost.cppll.jp)(マニュアル日本語化プロジェクト)
URLリンク(www.fides.dti.ne.jp)
4:デフォルトの名無しさん
09/01/28 20:50:53
★ごみ集め
・GC FAQ -- draft
URLリンク(www.iecc.com)
・A garbage collector for C and C++
URLリンク(www.hpl.hp.com)
・一般教養としての Garbage Collection
URLリンク(www.is.s.u-tokyo.ac.jp)
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
URLリンク(www.amazon.com)
★処理系,スクリプト
・kikyou.info (吉里吉里というゲームのスクリプト)
URLリンク(kikyou.info)
・tiny C コンパイラ (C)
URLリンク(www.watalab.cs.uec.ac.jp)
・6809用 Micro C コンパイラ
URLリンク(www.axe-inc.co.jp)
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
URLリンク(users.pandora.be)
・自作コンパイラの部屋(PL/1, Pascal等)
URLリンク(www.tokumaru.org)
・『Rubyソースコード完全解説』サポートページ
URLリンク(i.loveruby.net)
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
URLリンク(www.okisoft.co.jp)
・MSによるPEフォーマット仕様書(日本語)
URLリンク(www.interq.or.jp)
5:デフォルトの名無しさん
09/01/28 20:51:26
★学会
・PLDI
URLリンク(research.microsoft.com)
コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL
URLリンク(www.cs.princeton.edu)
PLDIよりは理論寄りだが大いに参考になる。
・ICFP
URLリンク(icfp06.cs.uchicago.edu)
関数型言語に関する学会。とても難しい。
・OOPSLA
URLリンク(www.oopsla.org)
オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC
URLリンク(www.st.cs.uni-sb.de)
ヨーロッパ系。派手さはないが堅実。
6:デフォルトの名無しさん
09/01/28 20:53:35
★参考書籍
・コンパイラ 原理・技法・ツール 1&2
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
通称ドラゴンブック。バイブル。
・コンパイラ構成法 原田 賢一
URLリンク(www.amazon.co.jp)
URLリンク(www.hara.cs.keio.ac.jp) (ソース、正誤表のダウンロード)
・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
URLリンク(www.amazon.co.jp)
一冊で済ませたい人へ。
・コンパイラの構成と最適化 中田 育男
URLリンク(www.amazon.co.jp)
最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。
・コンパイラの仕組み 渡邊 坦
URLリンク(www.amazon.co.jp)
薄い奴(185p)を読みたい人に。
・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
URLリンク(www.amazon.co.jp)
まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
URLリンク(www.cbook24.com)
初心者向けの優しい解説本。
以上
7:デフォルトの名無しさん
09/01/28 21:07:26
>>1乙
8:デフォルトの名無しさん
09/01/29 12:12:16
>>1 乙これはポニーテールだからなんとかかんとか
テンプレ追加
PEG(解析表現文法),Packrat Parser
Wikipedia項目リンク
9:デフォルトの名無しさん
09/01/29 20:21:44
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
10:デフォルトの名無しさん
09/01/30 22:49:04
スクリプトエンジン作ってみたい。
お勧めのサイト教えて
11:デフォルトの名無しさん
09/01/30 23:13:10
>>10
数レス前も読めないのか…
12:デフォルトの名無しさん
09/01/30 23:35:19
やっぱいいや
13:デフォルトの名無しさん
09/01/31 12:13:29
@wiki 更新しときました。
14:デフォルトの名無しさん
09/02/02 23:15:27
「★字句・構文解析」に追加。
caper
URLリンク(naoyuki.hirayama.googlepages.com)
15:デフォルトの名無しさん
09/02/03 04:46:47
>>10
サイトでないけど
URLリンク(www.amazon.co.jp)スクリプトエンジン-プログラミング-坂本-千尋/dp/4797347627/ref=sr_1_1?ie=UTF8&s=books&qid=1233603981&sr=8-1
これで最低限の知識は得られると思う
16:デフォルトの名無しさん
09/02/06 17:32:19
パーサジェネレータは検索すれば山ほどひっかかるけど、
スキャナージェネレータは少ないね。
すぐに見つかるのはLex, Flex, JLex, JFlexくらいか。
UINTVAL = "[0-9]+";
のように書けばスキャナークラスを生成してくれる、
お手軽スキャナージェネレータは無いのかな?
17:デフォルトの名無しさん
09/02/07 01:05:33
>>16
つ「正規表現」
18:デフォルトの名無しさん
09/02/07 15:58:49
各コードジェネレーターが生成したコードの処理速度を比較結果を掲載しているサイトってないの?
19:デフォルトの名無しさん
09/02/07 16:22:18
ここで聞いていいのかわからんけど、ActionScriptのDSL処理系ってない?
ActionScriptっていちいちコンパイルせなあかんやん?
面倒なんよね
オンザフライで処理してくれるDSLあると便利何やけど、emebedded向けなライブラリないかな?
検索してるんだけど、全然でてこないんだ
20:デフォルトの名無しさん
09/02/07 21:19:58
>19
むかしActionScriptで書かれたJavaScript実装で、fiberみたいなこともできるのがあったけど、
ググッたら出てこなかったorz...
21:デフォルトの名無しさん
09/02/07 21:21:40
>>16
マイ・オートマトンブームを起こすしかない。
22:デフォルトの名無しさん
09/02/07 22:54:30
>>16
PEGでいいじゃん
23:19
09/02/08 01:06:23
みなさん、ありがとう。
wonderfl関係あさってたらいろいろ発見しますた。
wonderflでポケコンでシューティング | wonderfl build flash online
URLリンク(wonderfl.kayac.com)
2009-01-08 - Simple Inspiration
URLリンク(d.hatena.ne.jp)
Cannon macro language
URLリンク(www.yomogi.sakura.ne.jp)
ゲーム用のちっこいDSLがあればなーと思ってたので調度よかった・・・
wonderflのはまあコンパイルはしないといけないけど、文字列を外部にだせばどんだけでもいけるよね
24:デフォルトの名無しさん
09/02/10 22:34:36
Xtalの作者ってバンダイナムコゲームスで活動してるんだな…
25:デフォルトの名無しさん
09/02/24 02:01:57
保守
26:デフォルトの名無しさん
09/03/07 14:16:19
jp.ne.cappuccino.keisuken.lex
が字句解析してくれるみたいです。
URLリンク(cappuccino.jp)
27:16
09/03/25 05:11:37
>>17
>>21
>>22
>>26
何気なく書いただけなのに、暖かいレスさんくす。
他にもJavaの場合には、標準ライブラリのStreamTokenizerを使っても
字句解析らしきことができるようです。
URLリンク(www5b.biglobe.ne.jp)
28:デフォルトの名無しさん
09/04/03 20:03:50
XtalのPEG採用って、言語仕様側じゃなくて、アプリ側だったのか。
言語仕様側だったらセミナーにはぜひ行ったところだったんだが。
29:デフォルトの名無しさん
09/04/03 20:31:43
Xtalスクリプトのコンパイラ自体はC++でがりがり書いてるからな。
PEGパーサを組み込みライブラリとして持つとのことようだが(詳しくはソースコード参照)
30:デフォルトの名無しさん
09/04/03 22:05:00
コンパイラつーか、パーサね。
パーサジェネレータ使わずにがりがり書いてるね。腕力のある人はうらやましいわ。
31:転載
09/04/05 09:38:58
IGDA Japan chapter - ニュース
URLリンク(www.igda.jp)
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:デフォルトの名無しさん
09/04/07 12:55:27
誘導されてきました。よろしくお願いします。
自作ソフトで使うマクロの文法を、拡張しようと思い、
lexやらyaccやらbisonやら調べ始めたのですが・・・難しい・・・
例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。
・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
任せ一発という形に出来ればと思っています。
(プラグイン辞書の関数ポインタ呼び出しみたいな形)
・マクロの中で関数マクロの定義が出来るようにといいのですが、
function hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
こういうのを実現しているサンプルなどありましたら教えてください。
33:デフォルトの名無しさん
09/04/07 13:20:14
現状、どういう風に構文解析とかしていて、どういう風にマクロを実行したり
プラグインを呼び出したりしてるわけ?
34:デフォルトの名無しさん
09/04/07 14:32:15
今の時点の文法はシンプルです。プラグイン名と引数、セミコロンのみ。
hoge[(...)]; [...]
プラグイン名を配列に積み上げて、一括でマクロ構文を読み込み、
セミコロンで分割して、参照の配列に積み直し。
動かすときに、それぞれのインターフェースを順に呼び出す形です。
これだと代入操作ひとつ出来ないので、何か良い方法を探しています。
35:デフォルトの名無しさん
09/04/07 15:06:31
関数名だろうが変数名だろうが,言語組み込みじゃないトークンは
トークン化の時点では何も考えず全部「識別子」一括りでおk
36:デフォルトの名無しさん
09/04/07 15:21:59
そもそも、「変数」といったものをどうやって実現したらいいのか、とか、
スクリプトを読み込んで、関数定義があったら何をして、関数の呼び出しが
あったら何をするのか、とか、そういうことがそもそも全くわかってないのでは?
なんか配列って言ってるけど、リストとか木とかをポインタで操るコードは
書ける? それができないと本格的な処理系は無理。
37:デフォルトの名無しさん
09/04/07 15:35:53
目先にとらわれて本質が見えてない感じがする
高レベルな言語を触ったりしてみてもいいんじゃない
38:デフォルトの名無しさん
09/04/07 16:24:26
>>35
なるほど。最後にまとめてチェックすればいいという考え方ですね。
>>36
その通りです。yaccやbisonのサンプルを探してみても、文書を
解析するところまでで、その先を実際にどうやっているかの例が
なかなか・・・。
唯一良さそうな例を見つけました。
>URLリンク(www.ibm.com)
生のソースもとれるようですし、これで勉強してみます。
ホントはもう少しシンプルな例があればいいのですが・・・
39:デフォルトの名無しさん
09/04/07 16:53:02
yacc 電卓、で検索すれば簡単な電卓の例がいくつも出てくると思うが...
40:デフォルトの名無しさん
09/04/07 17:02:05
yacc/lexを自作するところから始めるのがお勧め。
41:デフォルトの名無しさん
09/04/09 07:11:35
LLVMの簡単な使い方ってどこ見ればいいのですかね?
42:デフォルトの名無しさん
09/04/09 08:21:46
>>41
URLリンク(llvm.org)
43:デフォルトの名無しさん
09/04/09 13:17:44
これはワクテカじゃないか?
InfoQ: LLVMおよびRubyの総まとめ:llvmruby、yarv2llvmおよびregexpllvm、Rubinius
URLリンク(www.infoq.com)
InfoQ: MacRuby 0.5にLLVMをベースにした高速VMが搭載される
URLリンク(www.infoq.com)
44:デフォルトの名無しさん
09/04/12 03:35:20
おー、世の中にはこんな便利なものがあるのか。
たとえ苦労してでも勉強して使いこなしたいところだな。
45:デフォルトの名無しさん
09/04/13 18:14:29
>>38
コンドーさんの「yaccによるCコンパイラ」がおすすめ
・・・なんだけど、プレミアがついちゃって高いんだよなあ
46:デフォルトの名無しさん
09/04/25 12:04:35
>>38
yaccやbisonでないと駄目なのかい?
古くさくて使いにくいから、今からパーサを書くなら
他にいいジェネレータがありそうだけど。
C++、C#、Javaならばcaperがお薦め。
(Javaジェネレータはまだレポジトリから落としてビルドする必要がある)
URLリンク(naoyuki.hirayama.googlepages.com)
URLリンク(code.google.com)
どうしてもyaccやbisonがいいなら、以下を読めばいいよ。
URLリンク(guppy.eng.kagawa-u.ac.jp)
47:デフォルトの名無しさん
09/04/25 14:37:19
>>46
日本語の文書!!
いや実は挫折してました。ごめんなさい。がんばります。
48:デフォルトの名無しさん
09/04/26 18:29:20
紙メディアで出てるGNUのBison解説とかどうかな?
49:デフォルトの名無しさん
09/04/28 22:46:38
>>48
以下のことですな。
URLリンク(www.amazon.co.jp)入門-チャールズ-ドネリー/dp/4756130658
内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。
紙媒体だと電車の中などで読めるのがいいんだけどね。
50:デフォルトの名無しさん
09/04/28 23:31:19
そういえばこんなのが出るとか
Flex & Bison - by J Levine (2009/8/31)
URLリンク(www.amazon.co.jp)
51:デフォルトの名無しさん
09/04/29 08:10:34
> 内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。
うわわわ。絶版してたのか。
52:46=49
09/04/29 10:37:05
>>47
> yaccやbisonのサンプルを探してみても、
> 文書を解析するところまでで、
> その先を実際にどうやっているかの例がなかなか・・・。
>
> 日本語の文書!!
日本語で書かれていて意味解析以降も
全部載っているドキュメントを探してきた。
URLリンク(ecs.kuis.kyoto-u.ac.jp)
Flexの解説 (GNU公式ドキュメントの日本語訳) もあった。
Flex入門
URLリンク(ascii.asciimw.jp)
53:52の続き
09/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の続き
09/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の続き
09/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:デフォルトの名無しさん
09/05/02 17:46:16
>>30
LLVMもbisonパーサから手書きのパーサにかえたんだっけ。
案外、手書きの方が開発しやすいのかな?
57:デフォルトの名無しさん
09/05/05 15:51:13
構文の規模や性質や、頻繁に規則をいじるかどうか、などなどによる。
58:デフォルトの名無しさん
09/05/19 01:30:41
FlashのActionScriptで自作言語を作ろうとして
URLリンク(www.hakkaku.net)
URLリンク(www.hakkaku.net)
を先日から見ているんだが、字句解析の部分がさっぱりわからん。
構文解析のkmyaccの部分は良く分かるんだが、lexにあたる部分を
手書きしているらしく、なんか自力でトークンを探して分割したり
クラスをゴリゴリ作ったりしている。正直ムリポ。
その辺に落ちてるlex/flexで代用したいんだが、どうやればいいんだろう?
もしそれがムチャなことなら、「kmlex」的なものはないだろうか?
59:デフォルトの名無しさん
09/05/19 04:26:19
このレベルがわからないんじゃ
言語なんて作るの無理
60:デフォルトの名無しさん
09/05/19 07:28:20
AS3.0以降はRegExpあるから、自作してもすぐ出来るだろ
61:デフォルトの名無しさん
09/05/19 07:50:10
RegExpで字句解析するの?
62:デフォルトの名無しさん
09/05/19 08:10:18
RegExpで字句解析しないの?
63:デフォルトの名無しさん
09/05/19 08:23:56
な・・・RegExpで字句解析しただと!?
64:デフォルトの名無しさん
09/05/19 09:11:48
パース、構文木生成、式解釈、ニーモニック生成、コード出力をやるだけだ。
慣れたらゼロからでも数日で実装できる。
65:デフォルトの名無しさん
09/05/26 01:25:57
LLVMを勉強したいです
書籍ってありますか?
66:デフォルトの名無しさん
09/05/26 02:14:25
本家のドキュメントがよい。
67:デフォルトの名無しさん
09/05/26 09:20:42
本家にkaleidoscopeっていう処理系を作りながらllvmを憶えるチュートリアルがあるよ。
68:デフォルトの名無しさん
09/05/26 23:32:34
>>61
「文字列の先頭からアルファベットに引き続く、空白までの連続部分のマッチ」に
該当すれば、それを予約語として認識し、文字列からその部分を取り除いて
再度先頭から…を繰り返しているんだろう。
>>62
getChr()で一文字づつ文字を読み込んで、「空白の次にアルファベットだから
このトークンは予約語」というアタリの付けかたをしているんだろう。
69:デフォルトの名無しさん
09/05/28 17:16:46
ドラゴンブック二版の邦訳買ってきたよ。すごい紙薄い。
70:デフォルトの名無しさん
09/05/28 18:16:41
いい紙なのかな。TAOCPみたいな?
71:デフォルトの名無しさん
09/05/29 00:45:48
バラシテスキャンしないと
72:デフォルトの名無しさん
09/05/29 22:22:08
URLリンク(up2.viploader.net)
バーコード邪魔
73:デフォルトの名無しさん
09/05/29 22:49:06
[これはひどい]
絵本とかでバーコードがシールになってて、買ったらはがせるのあるけど、
そうしてほしいところだな。技術書だから無理に決まってるけど。
74:デフォルトの名無しさん
09/05/29 22:53:56
なんか本当に剣と魔法の挿絵になってね?
75:デフォルトの名無しさん
09/05/29 23:01:57
楯が Syntax Directed Translation
剣が LALR Parser Generation
鎧が……読めにゃい
竜が Complexity of Compiler Design かな?
76:デフォルトの名無しさん
09/05/29 23:24:16
拡大
URLリンク(up2.viploader.net)
77:デフォルトの名無しさん
09/05/29 23:32:24
Data Flow Analysis か
78:デフォルトの名無しさん
09/05/30 00:32:32
コンパイラ第2版ってどこ改訂されたの?
79:デフォルトの名無しさん
09/05/30 02:55:37
全面的に
80:デフォルトの名無しさん
09/05/30 03:02:46
読みやすくなってる?
81:デフォルトの名無しさん
09/05/30 16:40:02
>>75
もう画像流れてるわ
第一版と同じで鎧は syntax directed translation じゃなかろうか
default を「省略時解釈」とか、そういうのが無くなってるといいんだが
82:デフォルトの名無しさん
09/05/30 18:24:48
> 第一版と同じで鎧は syntax directed translation じゃなかろうか
それは盾だって>>75に
> default を「省略時解釈」とか、そういうのが無くなってるといいんだが
往年の教科書では定番だったよねそういう訳
83:デフォルトの名無しさん
09/05/30 19:28:33
最近の本は「既定の…」になるの?w
84:デフォルトの名無しさん
09/05/30 21:09:37
ごめん、data flow analysis だな
85:デフォルトの名無しさん
09/06/06 01:03:33
検索でここまで辿り着きました。
宜しくお願いします。
現在、オブジェクト指向のクラスの実装などが、
コンパイラでどのように実現されているのかに興味を持ち、勉強中です。
コンパイラの本も何冊か買い、簡単に目を通しましたが、
殆どが手続き型言語のコンパイラの解説で終わっており、資料の少なさに困っています。
自分で探した範囲で、オブジェクト指向型言語のクラスの実装等に触れられている本は、
『コンパイラの構成と最適化』(朝倉出版)しか見つけることが出来ませんでした。
『コンパイラ―原理・技法・ツール』の第2版版が最近出版されたようなので、
書店で立ち読みをして見ましたが、オブジェクト指向言語に関しては、
余り記述がされていないようです(短時間立ち読みをした程度なので、見落としてるだけなのかもしれませんが…)。
上で記述した以外に、オブジェクト指向言語の具体的な実装について書かれたコンパイラ等の書籍などがご存知の方がいらっしゃいましたら、本の題名等をご教示頂けると幸いです。
86:デフォルトの名無しさん
09/06/06 01:21:19
なぜそんなにオブジェクト指向にこだわるのか理由がよく分からないな。
まあ、単純にオブジェクト指向を特徴としている言語の実装が知りたいなら、
ソースコードを入手して眺めるのが一番早いだろう。
RubyやPythonなんかでどうだ?
87:デフォルトの名無しさん
09/06/06 01:24:05
>>85
gcc読んでここでその成果全部書けよ
そしたら教えてやるから
88:デフォルトの名無しさん
09/06/06 01:40:21
>>85
"Rubyソースコード完全解説"
89:デフォルトの名無しさん
09/06/06 01:43:11
『いまどきのプログラミング言語の作り方』に、ちょっとだけ載ってたかなあ
90:デフォルトの名無しさん
09/06/06 03:16:32
>>86
OOPにこだわる切欠は、自分で作ったCのプログラムを逆アセンブルして、アセンブリ言語の勉強をしていた時、JavaなどのOOP言語では、どのようにソースコードがバイトコードなどに置き換えられ、クラス等がどの様に実装されているのかに興味を惹かれたためです。
PythonやRudyに関しては、恥ずかしながら名前しか知りませんでした。
ソースコードもダウンロードしてみました。
再度の質問になり恐縮ですが、これはコンパイラのソースコードではないかと考えていますが、その様な理解で良いのでしょうか?
どちらにせよ、自分の勉強不足は明らかなので御指摘を元に、勉強してみます。
アドバイスをありがとう御座います。
>>87
まだ勉強を始めたばかりで、恥ずかしながらgccについては、知りませんでした。
gccについて、これから勉強してみたいと思います。
>>88
検索して見つけることが出来ました。
Amazonで買おうかとも思いましたが、プレミアが付いているようで、とても高いですね。
Webで本文が見られるみたいなので、それを見させていただきます。
ご教示ありがとうございます。
>>89
Amazonでも今は取り扱っていないようですね。
評判の良い本のようなので、購入を検討してみます。
ありがとうございました
91:デフォルトの名無しさん
09/06/06 03:31:26
>>90
RubyやPythonは、オブジェクト指向のスクリプト言語だ。
現代のスクリプト言語はいったんバイトコードにコンパイルされてから実行される形式が一般的で、
従ってコンパイラと呼びうるすべての要素がソースコード内に含まれている。
そしてそこから先(バイトコードをどのように動かすかの仮想マシンの実装)もあるわけだ。
いい教材になるわけで。
92:90
09/06/06 10:21:50
>>91
そうなんですか。
その事については、知りませんでした。
コンパイラの動作をソースコードを読むことで確認出来るというのは、
私のように学習を目的としている者にはありがたい話です。
Rudyは書籍やWebでの資料が充実しているようなので、これから調べてみます。
ご教示、ありがとう御座いました。
93:デフォルトの名無しさん
09/06/06 11:25:22
>>92
Rubyソースコード完全解説という神書籍があってだな、絶版だが、初版が無料公開されているのでオススメ
Rubyソースコード完全解説
URLリンク(i.loveruby.net)
94:デフォルトの名無しさん
09/06/07 19:53:04
>>90
参考までに、Javaのバイトコード仕様はSunのサイトで閲覧できる (英語)。
SunのJDKに付属しているjavapとかで逆アセンブルできるよ。
他にEclipse用のプラグイン「Bytecode Outline plugin for Eclipse」とかでも。
Eclipse用だと「Classfile Inspector」(有料 99Euro)ってのもあったけど、いまググったら
サイトが消滅したようだ。
95:デフォルトの名無しさん
09/06/08 07:45:39
速攻MinCamlコンパイラ概説
URLリンク(min-caml.sourceforge.net)
96:デフォルトの名無しさん
09/06/08 10:54:28
>>85
英語は読めますか?
97:デフォルトの名無しさん
09/06/08 11:07:20
あんまり道を示しすぎてもパンクすると思うんだが。
85とは関係なしに紹介したいサイトがあるなら、俺が消化するから構わず続けてくれ。
98:デフォルトの名無しさん
09/06/08 11:54:40
URLリンク(www.amazon.com)
URLリンク(www.amazon.com)
この辺りの概説書にはOOの実装のこと"も"解説してる。
URLリンク(www.amazon.com)
はOO関連のコンセプトの整理がうまい。実装についても書いてある。
全般的な概説書はやはり記述がプアになるので、C++に限れば一番詳しいのは、訳書の
URLリンク(www.amazon.co.jp)
これだけど、今は絶版なので、
URLリンク(www.amazon.com)
原書を読めばいい。
ARM(注解 C++リファレンスマニュアル)も詳しく説明している。これも絶版なので、
URLリンク(www.amazon.com)
Objectのslot accessでC++と全く異なるアプローチで有名なのが、
URLリンク(code.google.com)
Selfの元の論文が、
URLリンク(research.sun.com)
にある。JITと相性がよい。
もちろんaccessが遅くていいなら他にも幾らでもやりかたはある。
Objective-Cなんかはhash引いている。
99:デフォルトの名無しさん
09/06/08 13:07:35
普段はレキサ・パーサレベルの話しか出ないのに、堰を切ったようにいろいろ出てくるな
実はみんな、教えることに飢えてたのか?
100:デフォルトの名無しさん
09/06/08 19:40:03
lexerかparserより先に進んだ質問者がなかなかいないからじゃないかな
101:デフォルトの名無しさん
09/06/08 23:19:24
じゃあ俺がお前らの意見を聞いて
万人が理解できるlexerとparserの
サンプル書いてやる
ということでまず何をすればいいぉ?
102:デフォルトの名無しさん
09/06/09 00:00:12
文法決めれ
103:デフォルトの名無しさん
09/06/09 00:09:06
>>101
かっこに対応した四則演算とかどうだ
104:デフォルトの名無しさん
09/06/09 19:58:23
四則演算はネット上にゴロゴロしてるからイラネ
105:デフォルトの名無しさん
09/06/09 20:18:37
forループとif-else-endifの構文サンプル
106:90
09/06/09 22:05:49
>>93
教えて頂いて、ありがとう御座います。
絶版の資料が無料で公開されているのは、ありがたいですね。
>>94
Javaのバイトコードにも、興味があります。
Java仮想マシン仕様は、日本語の書籍でも出版されているので、今度読むつもりでした。
仮想マシンの概念は、コンピュータのアーキテクチャとも密接に関わってくる事項なので、興味深いですね。
>>96
正直、英語はまともには読めません。
日本語の資料で勉強するのに限界を感じているので、
英語の勉強をやり直そうと思ってます。
>>98
今まで知らなかった資料が多いので、参考になります。
英語の資料が多いですね。
コンパイラの勉強の前に、英語をやり直して、
資料をまともに読めるようになってから、勉強をし直すべきかもしれません。
コンパイラの勉強は、思っていたよりもしんどそうですが、
今まで知らなかった資料を紹介していただいたので、今後の勉強の指針が見えた気がします。
教えていただいた資料を参考に、頑張ってみます。
107:デフォルトの名無しさん
09/06/09 22:28:05
>>105
それだッッッ
ブロックの扱いがどうやればいいのか
悩みまくっている俺にはおいしいです ^q^
^
108:デフォルトの名無しさん
09/06/09 22:57:09
>>101 lexer parser 何てどうとでもなるから
cps とか ssa あたりの内部表現の評価手法を,
最適化方法に合わせた一覧として提示してくれ
109:デフォルトの名無しさん
09/06/10 00:05:45
>>108
どうとでもならない人のための相談室スレだと思うんだ。
だから、出来る人は我慢して、ここはレベルを下げて欲しいんだ。
110:デフォルトの名無しさん
09/06/10 00:11:32
平行すりゃいいじゃん
誰か一人のためのスレってわけでもないんだし。
111:デフォルトの名無しさん
09/06/10 00:32:56
>>108
オレは専門家じゃないのでCPSもSSAもどちらの用語も知らなかったが、
これってLLVMで全部実装されてるんじゃね?
やはりLLVMの包括的な解説記事が欲しいところだな。
112:デフォルトの名無しさん
09/06/10 00:43:18
>>107
Pascalのone pass compiler読め。
URLリンク(homepages.cwi.nl)
113:デフォルトの名無しさん
09/06/10 01:19:43
>>111
LLVMは既に提出されているものをうまくつなぎ合わせてるだけ
つなぎ合わせ方法はいくらでもある
各要素項目を網羅的に解説したものがほしい
つか、現場にいるとそっち系をゆっくり、みてる暇がない
114:デフォルトの名無しさん
09/06/10 01:43:17
>>113
実務者としては、実装されてない方法より
既に実装されているものの解説のほうが遥かに役に立つ。
>各要素項目を網羅的に解説したものがほしい
この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね?
115:デフォルトの名無しさん
09/06/10 01:45:38
>>108
Tiger Bookや"Practical Improvements to the Construction
and Destruction of Static Single Assignment Form."は読んだの?
116:デフォルトの名無しさん
09/06/10 01:48:23
>>114
> 実務者としては、実装されてない方法より
> 既に実装されているものの解説のほうが遥かに役に立つ。
ぶっちゃけここで質問している人が、
現実に使われているコンパイラのソースを参考にして、
自分のコードに反映させるのは難しいと思う。
そのくらいコンパイラは複雑化している。
さらに学習用のコンパイラは関数型言語で書かれているものが多く、
実務指向の人とは相容れないものがあるだろう。
謙虚な気持ちで学習するのが一番。
117:デフォルトの名無しさん
09/06/10 02:21:44
>>114
> 実務者としては、実装されてない方法より
> 既に実装されているものの解説のほうが遥かに役に立つ。
要素手法が見えにくいんだよね。まとまってしまうと。
ましてや、cps とか ssa 使った状態での複合リダクションとなると。
> この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね?
そりゃたくさん持ってるさ
ただ、現場をかかえてるとそっちばっかやってるわけに行かなくなるんだよな
>>116
> さらに学習用のコンパイラは関数型言語で書かれているものが多く、
> 実務指向の人とは相容れないものがあるだろう。
それは気にならないんだけど、細切れの論文掻き集めて整理やり直す時間はとれねぇよ
118:デフォルトの名無しさん
09/06/10 11:16:43
実務指向でコンパイラを今時つくりたい、なんて人はいないと思う
スクリプトでDSLをさっくり組むならともかく
119:デフォルトの名無しさん
09/06/13 19:19:12
>>90
URLリンク(www.amazon.co.jp)コンパイラとバーチャルマシン-Text-今城-哲二/dp/4274133087
↑この本に、オブジェクト指向も例外処理も分かりやすく載ってるよ。
薄くてすぐに読めるし、お薦め。
ただ、日本語で概要が載っているだけなので、
実装するには自分で知恵を絞らないとだけど。
現代的なコンパイラは、内部で何度も変換を繰り返して、
最終的に実行可能なコードをはく。
オブジェクト指向の場合は、最初の方で非オブジェクト指向の
Cみたいなコード (AST) に変換してしまうと、
後はよく書籍に載っているような方法が使えていいと思う。
コンパイラを全部 (シンタックスシュガーの除去から
アセンブラの出力まで) 自作するのは、大規模過ぎて現実的じゃない。
だから、自分が関心を持っている部分以外は
なるべく既存のものを利用するといいと思う。
例えばCのコードを書きだすコンパイラを書けば、
アセンブラごとにジェネレータを自分で書かなくても
多くの環境で動くし、最適化もCコンパイラに頼める。
例外処理などはCでは実装しにくいので、
必要ならLLVM IRを出力するという方法もあるよ。
120:デフォルトの名無しさん
09/06/13 19:25:19
>>118
「実務」の中身によるんじゃないかな?
121:119
09/06/13 19:32:59
以前、Javaバイトコードに変換するコンパイラも書いたことがあるけど、
Javaだと「.class」ファイルはクラス単位でオブジェクト指向になっていて、
オブジェクト指向「からの」変換はJVMが担当している。
だから、バイトコードの仕様を読んでも、あまり参考にはならないと思う。
同じ理由で、JVMをターゲットにした (「.class」ファイルを生成する)
コンパイラも皆、参考にならないと思う。
122:デフォルトの名無しさん
09/06/13 20:10:29
リンゴの本見ればコンパイラなんて3日で書けるだろ
123:デフォルトの名無しさん
09/06/15 10:39:22
>>121
最近はclassファイルを扱うためのライブラリがたくさんあるよ。
124:デフォルトの名無しさん
09/06/15 11:15:34
>>121 が言ってるのは、Java のオブジェクト指向的な面
(動的バインディングとか)が実現されてるのは、Java VM自体
なので(invokevirtual命令とか)、オブジェクト指向言語を
ふつうのCPU上で実現するコンパイラの参考にはならん、と
いうこと。
125:デフォルトの名無しさん
09/06/16 21:52:36
ドラゴンブック超える神本の出版が確定!
プログラミング言語を作る
プログラミング言語を作るなんて究極の楽しみだ!
126:デフォルトの名無しさん
09/06/17 09:50:36
>>125
著者の「プログラミング言語を作る」のサイトはぐだぐだ進行な上に
今ブログをチェックしてみたら最新エントリがエロゲの話で
しかもトンデモ理論だったので失笑せざるを得なかった
立ち読みはしてみるつもりだけど、はずれじゃないかなぁ
127:デフォルトの名無しさん
09/06/17 10:18:52
前橋さんが言語本出すのか。
まあ、変なものにはならないでしょ。
128:デフォルトの名無しさん
09/06/17 18:57:40
>>125
作者乙
129:デフォルトの名無しさん
09/06/17 20:24:01
>>128
あの人の作る言語は神レベルの美しさだぞ
お前こそ何言ってるんだw?
130:デフォルトの名無しさん
09/06/17 20:26:33
>>129
どの人??
131:デフォルトの名無しさん
09/06/18 08:43:47
>>125 >>129 は信者だろうな。
ポインタ本とか、Java謎本とか、結構悪くなかったと思うけど、今回もそういう
他に類例のないところを押さえる趣向かねぇ。
ドラゴンブックに代わる、なんてことはないないw
132:デフォルトの名無しさん
09/06/18 09:01:10
>ドラゴンブックに代わる、なんてことはないないw
学術書と実用系趣味本を一緒にすること自体おかしいよね
133:デフォルトの名無しさん
09/06/18 09:59:07
ドラゴンブック買ったけど、全然役に立たなかった。オナニー書籍
りんご本のほうがよほど役に立ったわ
というくらい
134:デフォルトの名無しさん
09/06/18 10:21:41
>>133
具体的に書かれてないと、単に難しいことが理解できなかった可哀想な趣味グラマにしか見えないな
135:デフォルトの名無しさん
09/06/18 10:50:14
ドラゴンブック喧嘩せず
136:デフォルトの名無しさん
09/06/18 12:07:40
ドラゴンブックは、
字句解析、構文解析はツールを使うから詳しくなる気はないし、
構文解析向けの言語理論にも興味ないって人にはまったく不向き。
構文解析ツール作ってみたいなって人、
計算機科学科の学生には今でもいい本の一つ。
137:デフォルトの名無しさん
09/06/18 14:08:10
そこから先のバックエンドについても、高度な話の基本になるところを
押さえてあるからね。
138:デフォルトの名無しさん
09/06/18 16:24:11
>>136
「内容に興味のない人には不向き」っていうことですねわかります
139:デフォルトの名無しさん
09/06/18 16:44:12
>>138
当たり前の事ではないか
140:デフォルトの名無しさん
09/06/18 17:41:11
特定書籍の信者って面白いね。
反撃が全部「ぼくは君をこういうキャラに設定したぞ。どうだ悔しいだろう」だし。
141:デフォルトの名無しさん
09/06/18 17:45:52
>>140
具体的に書かれてないと、単に難しいことが理解できなかった可哀想な趣味グラマにしか見えないな
142:デフォルトの名無しさん
09/06/18 20:23:54
>>140
構文が曖昧です。君からキャラへの変換は明示的なキャストが必要です。
143:デフォルトの名無しさん
09/06/18 22:43:48
coinsの利用についてはどうよ?
COINSコンパイラ・インフラストラクチャ
URLリンク(www.coins-project.org)
144:デフォルトの名無しさん
09/06/18 22:52:47
coinsは最凶最悪
145:デフォルトの名無しさん
09/06/19 00:01:52
>>139
いやだから、内容に興味があるのは”前提”として、
その人たちにとって良い本かを議論しないと意味ないじゃんという話
まぁ全体的にいい本っていう論調だし俺も同意するが
146:デフォルトの名無しさん
09/06/19 00:06:19
まずドラゴンブック読めない奴はゴミ
これ世界の常識あるね
147:デフォルトの名無しさん
09/06/19 06:51:19
このスレで勧められ板から、ドラゴンブックせっかく奮発して買ったのに、
いきなりしょっぱなからはじめから変な数式ばっかでいやになった…。
論文とかたまに見るけど、どうして人にわかるように書かないんだろうか?
大学行ってたら、小学生でもわかるように、って習わなかったんだろうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4798日前に更新/260 KB
担当:undef