1 名前:nanashi de fault [02/05/12 02:05] 前スレ1より >yaccやlexの使い方やら言語仕様やらの話題。 前スレ 【コンパイラ・スクリプトエンジン】相談室 pc.2ch.net/test/read.cgi/tech/981672957/ 前スレアーカイブ(かちゅ用) www.1me.jp/hp/prg_c-s_lab 前スレに張られたリンク + x >>2-6
108 名前:デフォルトの名無しさん mailto:sage [02/06/19 00:19] >>106 buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/koubungi.gif の図で言うと * と / が演算子の結合度が同じかつ親子なので、 a を a / d で置き換えてよい。 今考えたんで合ってるかどうか分からんけど。
109 名前:age mailto:age [02/06/20 01:05] age
110 名前:デフォルトの名無しさん [02/06/21 02:17] 保守汁
111 名前:デフォルトの名無しさん mailto:sage [02/06/24 11:39] 昨日LAOXのBOOK館でドラゴンブックの邦訳を買ったDQNを目撃した人はいませんか? それが私です。 ついでにもう一冊、と、 原田賢一『コンパイラ構成法』共立出版、374頁、1999 を買っちゃいました。こちらはDQNの私でもわかりやすく例を挙げて、 C言語ライクの言語を構築する方法を説明してありました。
112 名前:デフォルトの名無しさん mailto:sage [02/06/25 01:16] DQN がドラゴンブック買うかよチクショー。
113 名前:コンパイラ構成法 mailto:sage [02/06/25 03:49] おもわず検索してソースだけget。
114 名前:棄教者 ◆witdLTi2 mailto:sage [02/06/25 07:47] >>113 あ。ほんとだ。 正誤表とソースがげtできる! カムサハムニダ。
115 名前:デフォルトの名無しさん [02/06/30 20:21] 保守
116 名前:デフォルトの名無しさん mailto:sage [02/07/07 23:12] やっと前スレが埋まったね。
117 名前:質問 [02/07/07 23:43] どうしてこのスレはもりあがらないんですか?
118 名前:デフォルトの名無しさん mailto:age [02/07/07 23:49] kmyaccとflexを組み合わせて使うことは可能なんですか?
119 名前:デフォルトの名無しさん [02/07/08 00:24] 生理的に可能
120 名前:デフォルトの名無しさん [02/07/08 00:31] ありがとう カムサハムニダ
121 名前:デフォルトの名無しさん [02/07/08 01:12] ちうか、今の時代、構文解析なぞを勉強するのはあまり意味がない 気もするのだが... まだLALRとかが発明される前なら研究の 対象にはなっただろうが、今はyaccが使えればいいじゃん、と思う。
122 名前:デフォルトの名無しさん [02/07/08 01:13] antlrの使い方がわかればなおよい。 と言ってる俺はyaccしか使えません首吊ってきます
123 名前:棄教者 ◆witdLTi2 [02/07/08 08:21] >>121 yaccの文法はわかっても即コンパイラ・スクリプトが書けるとは限らないという罠。
124 名前:デフォルトの名無しさん mailto:sage [02/07/08 08:35] >>121 いや〜、でも憶えないとコンフリクトの理由が分からなくて困ることとかない? でも、なにも知らないところからだったら yacc 憶えた後の方が理解が早いので 手順として先に yacc は賛成。
125 名前:デフォルトの名無しさん mailto:sage [02/07/08 10:10] >>121 コンパイラ・コンパイラの段階から自作できるようになって、初めて一人前。
126 名前:デフォルトの名無しさん mailto:sage [02/07/08 10:39] コンパイラ・コンパイラ・コンパイラはどうやって作るんですか?
127 名前: mailto:sage [02/07/08 11:02] >>126 コンパイラ・コンパイラと一緒。 * (コンパイラ・コンパイラ)・コンパイラ * (YACC のコンパイラ)・コンパイラ * (C のコンパイラ)・コンパイラ
128 名前:デフォルトの名無しさん mailto:sage [02/07/08 14:19] >>126 作る必要はありません。
129 名前:デフォルトの名無しさん mailto:sage [02/07/08 16:40] >>126 コンパイラ・コンパイラ・コンパイラの段階から自作できるようになって、初めて神。
130 名前:デフォルトの名無しさん mailto:sage [02/07/09 03:40] [コンパイラ]n ・ コンパイラの段階から自作できるようになって、初めて神。
131 名前:ふわふわ名無しさん mailto:sage [02/07/09 04:16] 結局のところ、コンパイラ・コンパイラさえ作れれば神。 証明↓
132 名前:デフォルトの名無しさん mailto:sage [02/07/11 03:28] ⊂(ΦωΦ)⊃フフフ・・・・
133 名前:棄教者 ◆witdLTi2 mailto:sage [02/07/11 16:15] >>131 テユーカ、一番すごいのはダイレクトにマシンコードを吐き出すコンパイラをハックする人だと思う。
134 名前:デフォルトの名無しさん mailto:sage [02/07/11 18:45] 再帰下降ってみんなもう使ってないの?
135 名前:デフォルトの名無しさん mailto:sage [02/07/11 20:44] >>134 JavaCCが、再帰下降のパーサを生成する。 WebGainが音信不通なんでどうなることやら。
136 名前:デフォルトの名無しさん [02/07/17 00:05] 昔のインタフェースの特集記事に色々とあったな
137 名前:デフォルトの名無しさん [02/07/22 00:34] while文を使ってfor文を定義したいのですが、 for(ex1;ex2;ex3){s;} は ex1; while(ex2){ s; ex3; } と書こうと考えますた。 なんですが、前から順番に構文解析していく場合 sを先に評価してex3を評価するなんてことをどうやって実現するのでしょうか? ジャンプ命令を使ったりしてどうにかするのでしょうか? 教えてください。
138 名前: mailto:sage [02/07/22 00:38] >>137 「定義したい」とはどういう意味だ?
139 名前:デフォルトの名無しさん mailto:sage [02/07/22 00:38] ブロック終端でのjumpの前の時点でex3を評価すればいいじゃん
140 名前:デフォルトの名無しさん [02/07/22 00:55] >>139 つまりsを読んだ後、ex2の前にjumpする前にex3を評価するってことですよね? でも前から解析していく際にex3はどのようにしておけばよいのでしょう。 プログラム書くときにex3のところをどうやって書けばいいのかが・・・考えてるんですけど 分からないんです・・・
141 名前:デフォルトの名無しさん mailto:sage [02/07/22 00:59] >>140 ハァ? それじゃfor()はどうやって実現してるんだよ?
142 名前: mailto:sage [02/07/22 01:12] >>140 もしかして、構文木とか作らずに、字面のまま実行してたりする?
143 名前:デフォルトの名無しさん [02/07/22 01:16] >>142 恥ずかしながらそうです。。。
144 名前:デフォルトの名無しさん mailto:sage [02/07/22 01:18] それじゃ、構造化言語を作るのは無理だろ。
145 名前:デフォルトの名無しさん [02/07/22 01:23] >>144 そうですか。。。 出直してきます。レスくれた方ありがとうございました。
146 名前:よ mailto:sage [02/07/22 01:31] continueに対応できない罠 とかいう問題じゃなかったか…
147 名前:デフォルトの名無しさん [02/07/22 02:24] www.combo.org/ これなんかもおもしろそう.
148 名前:デフォルトの名無しさん mailto:sage [02/07/22 03:53] 別に構文木を作らなくても、構造化言語のコンパイラは作れる。 というか、作ったことがある。 出力コードの最適化は難いし、jumpの塊になるけど、breakや continueもちゃんと対応できた。
149 名前:デフォルトの名無しさん mailto:sage [02/07/22 11:00] >>148 > 別に構文木を作らなくても、構造化言語のコンパイラは作れる。 不可能じゃないだろうが、for ループがネストすることを考えると、ジャンプ用の ラベルの振り方とか面倒そうだ。(それって、結局、構文木を作ってるのと手間 変わらんのでは?)
150 名前:デフォルトの名無しさん [02/07/29 04:09] 字句解析をする際に予約語と予約語でない名前とを区別するにはどうするべきなんでしょうか? つづりを切り出し照合せよなどと本には書いてあったのですが、意味がよく分かりません。 ハッシュ法を使って何とかするのでしょうか?
151 名前:デフォルトの名無しさん mailto:sage [02/07/29 05:24] >>150 とりあえず単語切り出すところまではできてるとして、後は static const char *keywords[] = { "if", "else", "while", ..., NULL }; int is_keyword(const char *s) { int i; for (i = 0; keywords[i] != NULL; ++i) if (strcmp(s, keywords[i]) == 0) return 1; return 0; } とか。キーワード数が増えたら、ベタな線形検索やめてハッシュや二分木を 使った方が良いかもしれんが、たかだか数十程度なら気にしなくて良い。
152 名前:ろうひ男爵 [02/07/29 09:44] >>150 c言語+asmのマクロを展開するプログラムを作って、 当初は普通の検索(線形検索)で90秒かかった処理が、 ハッシュ(チェイン法)を使って15秒になったよ。 でも、そのときの登録語数が3万単語位なので、 cコンパイラ部分だけで使うくらいの語数(変数合わせて千単語ぐらい)だと、 それほど性能の差は無いと思うよ。 ちなみに、2本木の方が実装は難しいかも。
153 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:36] gperfつかっとけ
154 名前:デフォルトの名無しさん mailto:sage [02/07/29 12:13] 2本木ってなに?
155 名前:ろうひ男爵 [02/07/29 12:22] すまん、2分木の事。 あと、90秒かかったのが5秒になったの間違えです。
156 名前:デフォルトの名無しさん mailto:sage [02/07/30 01:44] 2本木なんて初めて聞いたよ
157 名前:ろうひ男爵 [02/07/30 04:41] >>156 すまんのう
158 名前:デフォルトの名無しさん mailto:sage [02/07/30 04:48] >>157 ろうひ男爵、いいかんじのひとだね。
159 名前:デフォルトの名無しさん mailto:sage [02/07/30 23:38] 後学のため自前でスクリプトコンパイラを作ってみようと思い、 再起下降構文解析とかBNFとかLAL(1)等の解説されているページをみてまわっています。 a -> a b b -> c c -> X このような一直線な処理は簡単にできる気がするのですが、 a -> a b|c b -> X c -> Y のようにorが入るとたちまちパニックです。 上記の場合bの処理でfalseが帰った場合、 取得したトークンをスタック等に積んでおいて、 cでそのスタックを参照するというような仕組みになるんでしょうか? それとももっとエレガントな仕組みがあるのでしょうか? 実は全くトンチンカンな事いっちゃってるんでしょうか? つべこべ言わずYaccで仕組み覚えろモルァ!でしょうか?
160 名前:デフォルトの名無しさん mailto:sage [02/07/30 23:56] >>159 まだコードやアルゴリズムを考える段階にないと思われ。 cspt1.ict.ru.ac.za/compilers/ ここにコンパイラ作りの基礎を書いた本一冊文のドキュメントがある。 LL文法の範囲内しか扱ってないけれど最初に手を着けるにはこれぐらいでいい。
161 名前:棄教者 ◆witdLTi2 mailto:sage [02/07/31 08:42] >>159 Yaccを使いこなせるようになった方が手っ取り早いです。 yacc/lex プログラムジェネレータ on UNIX 五月女健治著 テクノプレス ISBN4-924998-14-1
162 名前:デフォルトの名無しさん mailto:sage [02/07/31 13:58] >>159 自前で作らなきゃいやなの?
163 名前:159 mailto:sage [02/07/31 14:39] >>160 もっと基礎や概念みにつけるべきということですね。 英語はかなり苦手ですが、いい機会なので昼休み等に読んでいこうと思います。 >>161 昨日Yacc/Lex関係の本を探してみたのですが、 Flaxの本しかありませんでした(買いませんでした) 教えていただいた本を探してみようと思います。 (そういえばネットで買えるとこがありましたよね) >>162 仕事には全く関係ないというか、完全に興味本位です。 あとオブジェクト指向を勉強してたとき感じたのですが、 自分の知らない技術理解すると、今までやってきたことを 違った視点で見れたりするじゃないですか。 そういうのも狙ってます。 (再起下降構文解析とかみててビビビときましたね)
164 名前:デフォルトの名無しさん mailto:sage [02/07/31 14:48] >>161 LL の方が エラー回復が楽 先読みするトークン数を容易に増やせる って利点もあるから、俺は両方やることを推奨したい。ま、お勉強としては 手書きのパーサーも悪くないっしょ。
165 名前:デフォルトの名無しさん [02/07/31 20:00] 下の文法のパーサをつくれたらLALR(2)パーサジェネレータを名乗っていいですか? //term a b c //non-term START: E; E: C a a| D a b; C: A; D: B; A: a; B: a;
166 名前:デフォルトの名無しさん mailto:sage [02/07/31 20:03] >>165 実際にLR表作ってみたら?
167 名前:デフォルトの名無しさん mailto:sage [02/07/31 20:07] >>166 できてるっぽいんですが、goto表をここに貼ってみればいいですか?
168 名前:デフォルトの名無しさん [02/07/31 21:22] 貼っていい?
169 名前:デフォルトの名無しさん mailto:sage [02/08/02 00:48] イっていい?
170 名前:高速化 [02/08/07 02:49] インテルのコンパイラでコンパイルするだけで高速化しました。 無料体験版があります。 www.xlsoft.com/jp/products/vtune/perftool.htm
171 名前:デフォルトの名無しさん [02/08/07 03:02] ハッシュはどこら辺を参考にすればいいんでしょうかねぇ。
172 名前:デフォルトの名無しさん [02/08/15 00:22] 『コンパイラ構成法』を読みながらlex/yaccを勉強しているのですが、 ttp://216.239.51.100/search?q=cache:lYpgKL5fV34C:www.hara.cs.keio.ac.jp/kCompiler/+%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E6%A7%8B%E6%88%90%E6%B3%95+%E6%AD%A3%E8%AA%A4%E8%A1%A8&hl=ja&lr=lang_ja&ie=UTF-8 でダウンロード出来るであろうソースコードが相手先サーバーが動いていないか何かで、ダウンロード出来ません。 正誤表はグーグルキャッシュでゲットできたのですが。 ソースコードお持ちの方、どこかのアップローダに上げていただけませんか?
173 名前:棄教者 ◆witdLTi2 [02/08/15 15:30] >>172 いま、鯖がdjみたいですね。 このまえはぼくもダウソできたので。 しばらくしたらもう一度渡来してみたらどうよ。 この本は親切で分かりやすい本です。おすすめです。 わからないところや面白い本はドラゴンブックで補充するとさらに良いでしょう。
174 名前:ろうひ男爵 [02/08/17 05:29] >>171 '0'-'9' を 0-9 '@' を 10 'A'-'Z' を 11-36 '_' を 37 'a'-'z' を 38-63 それ以外を 0 にする文字変換テーブルを作り(chartbl[256])、 ハッシュ表(hashtbl[256])を256だとすると、 hashtbl[chartbl['最初の文字']+chartbl['真ん中の文字']+hashtbk['最後から2番目の文字']+chartbl['最後の文字']] でハッシュ値が収得できるよ。
175 名前:デフォルトの名無しさん [02/08/27 16:01] インタープリターの勉強したいんですが、どこかに参考コードとか、 いい本ありませんか?
176 名前:ろうひ男爵 [02/08/27 16:38] どういった用途に使います?>>175 中間言語に落として、ゲームやツールに組み込む単純なスクリプト言語なら、 LL(1)が良いと思います。 それ以上に簡単な物の方がよいのでしたら、 構文解析もほとんど考えなくても良い言語にしたら簡単なんじゃないのでしょうか? 使用用途にもよりますが、以下ぐらいなら簡単に作れるのではないでしょうか? 命令を組み込みの物だけにする、 関数を使えなくする、構造化も出来なくする(手続き言語の古いMS-BASICみたいにする) 変数は$マークから始まるとか、特殊記号にする 算術計算式などを、別扱いにするか、専用の命令を作り、ADDとかにしする。 それでも、バックパッチぐらいは必要ですけど。 LLなら、そこまで難しくはないけど、 yaccとlexを使い、LALRって方法でも簡単に出来ますよ。
177 名前:デフォルトの名無しさん [02/08/27 16:53] >>176 用途というか、PerlやHSPを使ってるうちに、どうやってコンパイラや スクリプトが動くんだろうと思って、すごく簡単なものでもいいから作れたら 勉強がてらやるのもおもしろいかなーと漠然と思ったんです。 コンパイラに関してはぜんぜん知らなかったので、すこしWEBを見て LL(k),LR(k)について勉強しましたが、言ってる事は理解できても それをどうやってコードにしようと悩んでしまって。なにかコードがあれば みながら勉強することができるのですが・・・言語はJAVAかCかPERLか、VB くらいしか使えないので、どれかでやろうと思っています。 何かインタープリター系の本でコードが載っていて、いい本かなにかありますか? お願いします。ちなみにUNIX系使えないのでYACCとかできません・・・
178 名前: ◆JAPH9PWA mailto:sage [02/08/27 17:42] Macは知らないけど、Windowsならyaccあるよ hp.vector.co.jp/authors/VA010446/toolbox1/
179 名前:デフォルトの名無しさん [02/08/27 17:49] JavaCCで、構文と構文の隙間を埋めるような 柔軟な構文を定義する方法を教えてください。 Perlでいうところの (.*?) みたいなものが欲しいんです。お願いします。
180 名前:デフォルトの名無しさん [02/08/27 18:07] www.tokumaru.org/index.htm ここのコンパイラソースコードは参考にはならない?
181 名前:ろうひ男爵 [02/08/27 18:37] >>177 でしたら、 コンパイラ構成法 原田 賢一 共立出版株式会社 ISBN: 4320029224 6,500円 が一番分かりやすいのですが、yaccとlexが必要です。 コンパイラの仕組み 情報科学こんせぷつ〈8〉 朝倉書店 ; ISBN: 4254127081 も物量的に少ないので読みやすいですが、消化不良のところが出てきます。 しかし、1日から一週間で読めると思います。 あと、インタープリタとコンパイラの違いは大きくないので、 ここのスレッドに色々質問すると良いかもしれません。 どちらにしろ、コンパイラ関連の本は難解な物が多く、 いろいろなアルゴリズムを理解していることが前提となったりするので、 軽くアルゴリズムの本を読んでおいた方がためになりますよ。 アルゴリズムを1冊ですますには、以下の本が良いと思います。 定本Cプログラマのためのアルゴリズムとデータ構造 近藤嘉雪 技術評論社 簡単なアルゴリズムの本は C言語アルゴリズム+徹底入門 柏原正三 技術評論社 が読みやすいです。
182 名前:デフォルトの名無しさん mailto:sage [02/08/27 18:40] 金出す前にこれでも読んどけ。 www.hayalab.cs.ritsumei.ac.jp/~hayashi/materials/textbook.html
183 名前:Aoki [02/08/27 19:12] 実行速度が速いSmalltalkを実装するための技法をいろいろ教えて下さい。
184 名前:デフォルトの名無しさん mailto:sage [02/08/27 20:03] >>179 JavaCCは少し使ったことがあるんで、答えられるようなら答えますけど、 Perlは知らないんで、質問の意図がわからないです。
185 名前:179 [02/08/27 20:28] <ALL:~[]> /* Perlの(.*)相当だと思うのですが… */ void this () : {} { ( "{" this() "}" )+ )|(s = getAll() { println(s) } ) } が、期待通りの動作をしてくれません。 左の構文を優先させたいのです。お願いします。
186 名前:179 [02/08/27 20:35] 具体的には、(asdf()asdf((asdf)asdf)) みたいなのをパーズしたいと思ってます。 asdfの部分は、それが構文そのものを含む時以外は、 全ての文字を処理したいのです。
187 名前:デフォルトの名無しさん mailto:sage [02/08/27 20:46] <ALL:~[]*> すみませんこっちでした。
188 名前:184 mailto:sage [02/08/27 21:43] まだようわからんけど、{asdf{}asdf{{asdf}asdf}}が無理やりパースできるようにしてみた。 解釈が間違えてたらごめん。 TOKEN : { <ALL: (~["{","}"])+> } void Input() : {} { foo() } void foo() : { String s; } { ( LOOKAHEAD(2) "{" ( foo() )* "}" )+ | (s = getAll() { System.out.println(s); } ) } String getAll() : { Token t; } { t = <ALL> { return t.image; } }
189 名前:179 [02/08/27 21:58] ありがとうございます。参考にします。
190 名前:デフォルトの名無しさん [02/08/28 05:15] パスカルやCはLL?LR?どっちを使ってるの?最近のはやいコンパイラは みんなLRかな?
191 名前:デフォルトの名無しさん mailto:sage [02/08/28 09:24] 最近のflexはスレッドセーフなCコードを吐くようになったのか。 %option reentrant
192 名前:デフォルトの名無しさん [02/08/28 10:06] >>182 のリンクはいいリンクだ
193 名前:デフォルトの名無しさん mailto:sage [02/08/28 10:13] >>190 パスカルはLL(1)じゃないの?
194 名前:デフォルトの名無しさん mailto:sage [02/08/28 10:58] PascalはLL(1)でもパースできるように設計されているだけであって、 コンパイラがどうしているかは別。
195 名前:棄教者 ◆witdLTi2 mailto:sage [02/08/28 13:04] >>182 のリンク先にあるコンパイラのソースコードの解説、 これってWEBを使って吐き出されたのかなぁ。 スレとは関係ないのでsage そういえば TeX とか WEB とか Knuth なスレってあったっけ?
196 名前:デフォルトの名無しさん [02/08/28 13:41] Texスレはなぜかビジネスソフト板で見たような気がする。 Knuthスレはないんじゃないかな? >>182 のリンク先にある www.hayalab.cs.ritsumei.ac.jp/~hayashi/materials/SCF.pdf の元のコードってどこにあるの?ないぞ
197 名前:デフォルトの名無しさん [02/08/28 16:32] knuthが作ったWEB言語って何?気になるんだけど
198 名前:デフォルトの名無しさん mailto:sage [02/08/28 22:53] >>197 Knuthが提唱した文芸的プログラミングの実装、かな? ドキュメントの中にソースコードを埋め込む形を取ることで、ソースとドキュメントの 間の不整合や、ドキュメント無きコーディングを避けるっていうものらしい。 コンパイルのためにはドキュメントの中からソースを抜き出してコンパイラに渡す プログラムが必要になる。 で、Knuth自身が作った、TeXドキュメントからPascalプログラムを抜き出してコンパイルする システムがWEBシステムの筈。 詳しくは www.google.com/search?hl=ja&ie=UTF-8&oe=utf-8&q=Knuth+WEB&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja でも見れ。
199 名前:デフォルトの名無しさん mailto:sage [02/08/28 22:54] >>195 TeX総合スレ@数学板 science.2ch.net/test/read.cgi/math/1026634481/
200 名前:棄教者 ◆witdLTi2 [02/09/02 13:04] >>111 原田本を今読んでいるところですが、気になった箇所があるので皆さんにお伺いします。 p.164下から11行目 > $p_m$ にアドレス $m+n$ の領域を割り付ける. とあるのは > $v_m$ にアドレス $m+n$ の領域を割り付ける. ではないでしょうか。 ちなみに正誤表 www.hara.cs.keio.ac.jp/kCompiler/Errata/Errata.html で確認したところ、掲載されていませんでした。 いきなり原田先生にメールして自分が間違っていたら恥ずかしいので、 2CHのハッカーの皆さんに確認してからメールをしようと思います。
201 名前:棄教者 ◆witdLTi2 [02/09/02 13:04] テユーカ200get
202 名前:棄教者 ◆witdLTi2 mailto:sage [02/09/02 16:12] >>182 p.15 の BNF の説明 > Backus Nauer Form Backus Nauer Form (BNF) では、.... って the Jargon File には Backus-Naur Form / Backus Normal Form って書いてあるんですけど。。。 Nauer って who?
203 名前:デフォルトの名無しさん mailto:sage [02/09/02 16:33] ドイツ語綴り->Nauer 英語綴り->Naur だったと思う。
204 名前:棄教者 ◆witdLTi2 mailto:sage [02/09/02 17:15] グーグルすると backus naur form で日本語限定だと213件, 言語非限定だと約20700件ヒット。 backus nauer form で日本語限定だと9件, 言語非限定だと253件ヒット。 おまけに「スペリング修正候補 backus <b>naur</b> form」として修正を勧告される。
205 名前:棄教者 ◆witdLTi2 mailto:sage [02/09/02 17:16] ×backus naur form で日本語限定だと213件 ○backus naur form で日本語限定だと215件
206 名前:デフォルトの名無しさん [02/09/03 21:12] インタープリタの仮想機械に興味を持ち、調べています。 調べてみた JVM、CRI、Python はいずれもスタックマシンのようでしたが、レ ジスタマシンと比較して何かメリットがあるのでしょうか。
207 名前:デフォルトの名無しさん mailto:sage [02/09/03 22:29] Forthハッカーの伝統。 というのは半分冗談だけど、中間コードが簡単/短くできるからじゃないんですか。 コンパイラも作りやすいし。
208 名前:デフォルトの名無しさん mailto:sage [02/09/04 00:53] 詳しくは知らんけど、インタープリタの仮想機械では、 レジスタのアクセスがメモリをアクセスするのと同じ。 パイプラインとかハードウェアで実装する場合の利点が いかせられないからだと思う。