[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 10/19 19:42 / Filesize : 260 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

「コンパイラ・スクリプトエンジン」相談室13



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 あたり

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上で実現するコンパイラの参考にはならん、と
いうこと。



125 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:52:36 ]
ドラゴンブック超える神本の出版が確定!

プログラミング言語を作る
プログラミング言語を作るなんて究極の楽しみだ!

126 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 09:50:36 ]
>>125
著者の「プログラミング言語を作る」のサイトはぐだぐだ進行な上に
今ブログをチェックしてみたら最新エントリがエロゲの話で
しかもトンデモ理論だったので失笑せざるを得なかった

立ち読みはしてみるつもりだけど、はずれじゃないかなぁ

127 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:18:52 ]
前橋さんが言語本出すのか。
まあ、変なものにはならないでしょ。

128 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 18:57:40 ]
>>125
作者乙

129 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 20:24:01 ]
>>128
あの人の作る言語は神レベルの美しさだぞ
お前こそ何言ってるんだw?

130 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 20:26:33 ]
>>129
どの人??

131 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 08:43:47 ]
>>125 >>129 は信者だろうな。

ポインタ本とか、Java謎本とか、結構悪くなかったと思うけど、今回もそういう
他に類例のないところを押さえる趣向かねぇ。

ドラゴンブックに代わる、なんてことはないないw

132 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:01:10 ]
>ドラゴンブックに代わる、なんてことはないないw
学術書と実用系趣味本を一緒にすること自体おかしいよね


133 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:59:07 ]
ドラゴンブック買ったけど、全然役に立たなかった。オナニー書籍
りんご本のほうがよほど役に立ったわ

というくらい

134 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 10:21:41 ]
>>133
具体的に書かれてないと、単に難しいことが理解できなかった可哀想な趣味グラマにしか見えないな



135 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 10:50:14 ]
ドラゴンブック喧嘩せず

136 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 12:07:40 ]
ドラゴンブックは、
字句解析、構文解析はツールを使うから詳しくなる気はないし、
構文解析向けの言語理論にも興味ないって人にはまったく不向き。
構文解析ツール作ってみたいなって人、
計算機科学科の学生には今でもいい本の一つ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<260KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef