トップページ⇒tech
1001コメント316KB

【コンパイラ・スクリプトエンジン】相談室

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
yaccやlexの使い方やら言語仕様やらの話題。
0002リンクNGNG
http://www.cygwin.com/
http://cygwin.cjb.net/
0003これでどうよNGNG
参考リンク
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html
http://compilers.cs.uec.ac.jp/
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/lex/
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/yacc/
http://www.is.s.u-tokyo.ac.jp/~vu/96/cad/compiler.html
http://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/soft.html
http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml
http://member.nifty.ne.jp/nakamula/recurs.htm
http://www.tokumaru.org/
0004デフォルトの名無しさんNGNG
ここも。
http://compilers.iecc.com/

それとガベージコレクタの話題もOKにしない?
0005デフォルトの名無しさんNGNG
ガベージコレクタはマークスイープ法の他に何かありますか?
C/C++でガーベジコレクタは必要だと思いますか?
LISP/Schemeだとセルの大きさが一定な事が多いから、かなり回収率が良い気がしますが、この推論は正しいですか?
0006デフォルトの名無しさんNGNG
スクリプトの実行は一般的にインタプリティング、または仮想機械で行なうので遅いです。
ネイティブオブジェクトコードに変換して実行するうまい方法はありますか?
00074NGNG
>>5
> ガベージコレクタはマークスイープ法の他に何かありますか?
http://www.iecc.com/gclist/GC-faq.html
とかどうですか?
00084NGNG
>>6
そういう用途にはスクリプト言語を使わずに
Cで書いたのを呼び出すとかしたほうがいいと思います。

一応こんなのもあるみたいです(ネイティブコードを実行させている)。
http://www19.freeweb.ne.jp/computer/yaneurao/ygs2k/
0009デフォルトの名無しさんNGNG
GCは束縛されているオブジェクトのメモリの移動まではできないから、
malloc/freeの問題と同じと考えて良いでしょうか。
best-fit法とかfast-fit法ぐらいしか知らない者で…。
00106>8NGNG
おお!凄いですね。ゲームで使われているのですか。
もしかして、最近のエミュレータとかもこういう形式ですかね。
00115NGNG
>7
参照カウンタ(リファレンスカウンタ)は自己参照がある場合は使えないですね。
JargonとCopyingはどんなアルゴリズムかな。
00124NGNG
>>11
(よく知らないですが)Jargonってのはアルゴリズムじゃなくて
その分野特有の言葉のことだと思うんですけど、、、

http://www.iecc.com/gclist/GC-algorithms.html#Jargon
root setとかlive dataとか書いてるし。
0013デフォルトの名無しさんNGNG
>>9
メモリ領域の移動(空き領域を1つにまとめる。デフラグみたい?)
はメモリコンパクションって呼んで
厳密にはGCとは別物
ただ一緒にやってしまうGCの実装も多そうだし
アルゴリズムによっては下記みたいに自動的に
コンパクションもできてしまうものもある
>>11Copyingはたしかヒープを2つに分けて片方がいっぱいになったら
必要なものだけたどってもう一方にコピーするヤツだと思った
メモリの無駄が多いけどコンパクションも一緒にできる
0014デフォルトの名無しさんNGNG
>>10
64とか、プレステなんかの
MIPS系列のCPU積んだマシンは
たいていこの手法ですね。

ただ、もっと動的な再コンパイルですが。
jump/callの部分でコード変換したものを
キャッシングすることで速度を稼いでいるようです。

fpse.emuforce.comがソース公開です。
0015スクリプト系NGNG
参考リンク
http://www.kt.rim.or.jp/~kbk/

参考になるかな?リンク
http://www.din.or.jp/~glit/TheOddStage/
http://www.sun-inet.or.jp/~yaneurao/
0016デフォルトの名無しさんNGNG
LISPやSchemeはスクリプトに入るのかな?実装は一番楽だと思うけど。
0017デフォルトの名無しさんNGNG
あ、CommonLISPやR5RSとかの規格に準拠させるならそれなりに大変なんだけども。
それでも他の言語よりは楽かな?
0018デフォルトの名無しさんNGNG
自作コンパイラage
0019デフォルトの名無しさんNGNG
Schemeが流行るといいなage
0020デフォルトの名無しさんNGNG
CommonLISPはそれなりなんてレベルじゃないよ。
schemeもR5RSにキッチリあわせようとすると一月はかかるね。
0021デフォルトの名無しさんNGNG
>>20
一ヶ月ですむならやってみようかなぁ…
0022デフォルトの名無しさんNGNG
http://www.jah.ne.jp/~naoyuki/index.html
scheme実装とか載ってる。
あとソースも公開されてるし。参考になるかな
0023デフォルトの名無しさんNGNG
俺の上司が昔8KバイトのROMにLISPのインタプリタ
を押し込んでいたな・・。
0024デフォルトの名無しさんNGNG
>21
最新のR5RSじゃなくてもR4RSに準拠すればオンライン上にある大抵のスクリプトは通るよ。
(あんま変わらないかもしれないけど。)
がんばってね。
0025デフォルトの名無しさんNGNG
昔8086のsmallモデルでも動くschemeをCで作ったけど、だいたい2kステップぐらいだった。
0026デフォルトの名無しさんNGNG
期待age
0027デフォルトの名無しさんNGNG
参考書籍
yacc/lex プログラミングジェネレータ on UNIX - 五月女健治 - tp

0028デフォルトの名無しさんNGNG
>>27
その本って絶版じゃなかったっけ。図書館いけばあると思うけど。(啓学出版ってつぶれたんじゃ?)
参考書籍
C stepupシリーズ(3) yaccによるCコンパイラプログラミング
ソフトバンク
ISBN4-89052-136-4
内容:
簡単な8086のASMコードを吐くCコンパイラサブセットの実装が載っている。
niftyにこれの全ソースが落ちているのを昔見ました。
0029デフォルトの名無しさんNGNG
コンパイラを作る方法
翔泳社
ISBN4-88135-072-2
内容:
Pascal-Bという処理系の実装(+仮想マシン)
0030デフォルトの名無しさんNGNG
CプログラムブックI,II,III
アスキー出版局
ISBN失念
内容:
I にForceインタプリタ
II にREDAというコンパイラ、makeの実装、
III にlispの実装
0031デフォルトの名無しさんNGNG
それから、niftyのFPLとかに結構な量の処理系があった。
0032デフォルトの名無しさんNGNG
技評の本で、Cライクなコンパイラ、インタプリタと
アセンブラを作成する本があったな。
会社にあるのでいまは挙げられないけど、あとで調べておくよ。
0033デフォルトの名無しさんNGNG
>>28
その本、今日買ったんですけど・・・
>>32
気が狂うほど期待です
0034デフォルトの名無しさんNGNG
たしか'mc'なんとかでしょ>32
デバッグコンソール環境も付いてた筈。(ただしNEC9801用)
0035デフォルトの名無しさんNGNG
昔、アジソンウェスレイ出版社の本でCのインタプリタが載ってるのがあったなあ。
その本は当時としてはかなり内容が濃かった。(マルチスレッドとかTSRとかエディタ、DBなど)
多分もう売ってない。工業系の図書館いけばあると思うけど。
0036デフォルトの名無しさんNGNG
大学の図書館にコンパイラの本なんて腐るほど置いてあった。
0037デフォルトの名無しさんNGNG
ハードカバーで活版印刷のやつも沢山あった
0038デフォルトの名無しさんNGNG
解析を行うにはyacc/lexを選ぶしか方法は無いんでしょうか?
yacc/lex以外の手段はありませんか?
自分でやるのは大変過ぎるからパスですけど…
0039デフォルトの名無しさんNGNG
bison/flex

あと、kmyaccとか言うのがなかったっけ?
0040デフォルトの名無しさんNGNG
>39
それ全部似た様なモノでしょ?
C程度の構文なら自分でスタック作ってやった方が速いよ。>38
004139NGNG
>>40
マジレスしちゃいやん♥
0042デフォルトの名無しさんNGNG
[PolyEditのマクロ言語エンジンの解説]
http://www.doga.co.jp/ptdoga/rensai/cmaga/9611.htm

つーか。
ソフト製作が容易になったせいでコンパイラの需要が増えたのか。
or コンパイラ技術が簡単になったのか。

なんにしても最近独自のスクリプト言語増えすぎ。
なにか標準的な言語を策定してくださいませませ>ISO

0043ISONGNG
Perlに決定しました。
それは置いといて、

>>42
別に色々あってもいいんじゃない?
0044デフォルトの名無しさんNGNG
ALGOL 200x,,,
0045デフォルトの名無しさんNGNG
LL構文解析はスタック作って、ヒープ領域に置いたほうがいい?
それとも、再帰使ってスタック領域を利用した方がいい?
0046sageNGNG
>>45
LL構文解析に限った話題じゃないね sage
エラー処理はOSに任せてスタック使ったら?
004732ではないですがNGNG
>>32,33 技評の本で、Cライクなコンパイラ、インタプリタと
アセンブラを作成する本があったな。

たぶんこれじゃないですか?
「ハイクラスC言語 コンパイラ&インタプリタ」舟本奨 監修 末石吾朗+小林優 著
8080CPUもどきアセンブリコードを生成するコンパイラと、
そのアセンブリコードを実行するインタプリタのソースが載っています。
0048しつもんNGNG
ソースが見やすいけど複雑な言語、(私が思うにC/C++みたいな)
ソースはみずらいけど簡単な言語、(私が思うにRubyみたいな)
どちらの方が一般に好まれますかね?
0049デフォルトの名無しさんNGNG
ドラゴンブックを読んでるんですが、数学的な証明の部分とかも
ちゃんと理解しないとコンパイラは書けませんか?
0050デフォルトの名無しさんNGNG
>>49
いらないと思う。
コンパイラ技術の論理的なこと(???)を理解するには
ドラゴンブックはいい本かもしれないけどあんまり実践的じゃない。と思う。:-)
0051デフォルトの名無しさんNGNG
BNFで表したCやC++やJavaやJavaScriptの文法って
どっかにないでしょーか?
0052デフォルトの名無しさんNGNG
>>51CならK&Rの付録についていたような、、、
0053デフォルトの名無しさんNGNG
>43
ソフトごとにマクロ言語を覚えるのが面倒です(^^;

誰かが優秀な言語のスクリプトエンジンを公開すれば
多分それがデファクトになるのかなぁとも思うんですけどね。
0054デフォルトの名無しさんNGNG
>>51 これじゃ駄目?
Javaの文法
http://java.sun.com/docs/books/jls/html/19.doc.html#52996
0055デフォルトの名無しさんNGNG
>>53
うーむ。
優秀ってのはよくわからないけど、
o GNU Makefile,VC++,BCBなどのプロジェクトファイルが付属している。
-> .libや.aなどのバイナリも付属させる?

o なるべく小さく。
-> 考え方にもよると思うけどソースファイルで50KBぐらいが限度?

o Lisp系の文法でも良いかもしれないけど、普及するとは考えにくい
(「わ、括弧だ」で敬遠する人がいるかもしれない)。
-> なのでC言語ライクにする。

o ライブラリに依存しない。
-> 構築するのが面倒になるから。
こんなの?

それと聞きたいんだけど、例外処理っていると思う?
型なし言語だとして
try
{
throw "例外";
}
catch e
{
print e, "\n";
}
0056デフォルトの名無しさんNGNG
おお、おもしろそう
0057デフォルトの名無しさんNGNG
compiler.age();
0058デフォルトの名無しさんNGNG
>>55
ソースでの配布キボンヌ。
005955NGNG
>>58
>>55 は「こんなのだったらーいいなー」ってのを書いただけです。。。^^;
作ってるのは作ってるんですけどForthっぽい+自前のGCを装備というやつです。

0060デフォルトの名無しさんNGNG
age
0061bakaNGNG
ほんとに頭よい人は、日本語の文法に由来するコンピュータ言語を
開発してます。英語の文法に由来する言語なんて開発したって、ま
してそれらを理解して使っているレベルでは奴隷以外の何物でもな
いよん。原点に返って日本語で考えることからスタートしないと
日本はいつまでたっても追いつかないのだ。つーか、中国に追い越
されるよん。あっちの人はさすがに精神的な文化レベルは日本にも
ひけをとらないため、ユニークな言語があるよん。それも中国語に
由来する文法で考えたコンピュータ言語が。

0062デフォルトの名無しさんNGNG
>>61
これは日本語に由来してますか?
10 a =
# 10をaに代入する
0063デフォルトの名無しさんNGNG
>>61
こんなスレにも煽りがいるのか。
そんなあなたはMINDを使っててください。

あと、そのユニークな中国製言語の具体例を挙げてください。
さぁ、どうぞ。
0064デフォルトの名無しさんNGNG
ま、面白そうかなとは思うけどね。
しょせんは英語読めない人間の戯言でしょ。

時に、中国語の文法は日本語より英語の文法に近いんじゃなかったっけw
0065デフォルトの名無しさんNGNG
何を言う! 我らにはギコBASICがあるではないか!
0066bakaNGNG
ば〜か、中国語が英語に似てるにはS+Vと動詞に慣用的にくっつく
一部の前置詞くらいのもの。時制なんか日本語のほうに近いよ。
例えば中国語に完了形なんてない。
中国製の言語か?自分で調べろ。誰がタダで教えるか。
確かに俺は英語読めないかもしれんが、少なくとも64よりはあ
るよん。
あおったつもりはない。聖書を読んでああでもないこうでもない
と屁理屈いってるやつと同じレベルの君たちに危機感をもっただ
けだよん。
0067bakaNGNG
>62

おっと見落としてた。何がいいたんだ?なんの反応もできないが
しょせん俺もバカだから許してくれ。一言いわせてもらえば
そーいう解釈する普通の日本人がどれだけいるかが問題だ。
そーいうルールを作ったとして、拡張、応用していけるかが問題
だな。拡張、応用するにしたがって解釈するのにヘイコラとなっ
たらその言語は失敗だ!
それしか胃炎。


0068デフォルトの名無しさんNGNG
>>66
えっと、プログラミング言語についてかんがえてるんですよね。
時制ってそんなに関係のあるものってわけでもないと思います。
むしろS+Vみたいな部分のほうが大切。
0069デフォルトの名無しさんNGNG
おお。bakaの意見は、煽りと思わせつつ、かなり建設的ではないか!
0070デフォルトの名無しさんNGNG
わけわかんないこと叫んでるbakaがいるなー。
英語に由来しようが、日本語に由来しようが、
数あるプログラミング・パラダイムに沿って
プログラムを組み立てられなければ実用性なし。
せいぜい理想を追っかけててください。
0071デフォルトの名無しさんNGNG
>>baka
バカなら黙ってろ。

ところでMLみたいな関数型言語を作ってみようという人はいませんか?
0072デフォルトの名無しさんNGNG
>>66
>中国製の言語か?自分で調べろ。誰がタダで教えるか。

そりゃ、知らないものは教えようがないよね。
0073デフォルトの名無しさんNGNG
>>68
そうだね、プログラム言語に過去とか現在なんて概念はないし。
>>66が言ってることは、ちんぷん漢文だよ(藁
0074デフォルトの名無しさんNGNG
>>66
君が>>64よりも英語ができると思った根拠を示せ。
0075デフォルトの名無しさんNGNG
話題を変えようぜ。
関数型言語ってどんなのなんですか?
全部が関数で作られてるとか???
0076デフォルトの名無しさんNGNG
>>66
今何時ですか?
0077デフォルトの名無しさんNGNG
>>75
この辺とか。
http://www.gin.or.jp/users/daikoku/ml/whatml.htm

Appelのコンパイラ本(タイガーブック)にはML、Java、C版があって、
本来意図したのはML版だそうです。なのでJava版やC版の記述に
は不自然な箇所が結構あるそうなのですが、私はC版しか読んで
ないので、具体的にどこなのかよくわかりません。

タイガーブック
http://www.cs.princeton.edu/~appel/modern/
ドラゴンブックよりも実践指向で、オブジェクト指向言語とか最近の
トピックも押さえているので、ぜひ日本語版が出てほしい本です。
0078デフォルトの名無しさんNGNG
>>75
ループが無いとか、
変数に代入ができない(するべきではない)とか、
わたしも最初、「こんなのでプログラム書けるの?」と不思議でした。
でも、慣れるとCやJavaよりすっきりとしたコードで
プログラムできるんですよ。

日本語では
「プログラミング言語ML」ウルマン、アスキー
「プログラミング言語」武市正人 岩波講座ソフトウェア科学
が関数型言語を解説しています。
0079デフォルトの名無しさんNGNG
完全なオブジェクト指向の言語ってどうもとっつきずらいです…
C++なんかはオブジェクト指向のいいとこどりみたいでいいかんじだと思うんですが、
どうでしょう?
やっぱりオブジェクト指向なら完全にオブジェクト指向でいかないとだめなもんですか?
0080デフォルトの名無しさんNGNG
オブジェクト指向プログラミング言語と他のオブジェクト指向なんちゃら
はちょっと違うよーん。JavaとかC#みたいなのはそのオブジェクト指向設計
とかと親和性が高いというのが使いやすい人にとっては使いやすいよーん。
0081部外者ANGNG
>78
Lisp/Schemeも関数型言語じゃなかった?
ローカル変数使えるけど。
MLが完全な関数型に近いと聞くけど、どうちがうのか調べてないのでわからんです。
0082デフォルトの名無しさんNGNG
http://www.ascii.co.jp/ghelp/21/002130.html
0083デフォルトの名無しさんNGNG
言語処理系は一から自分でアルゴリズムを考えようとすると死にそう
ですが、みなさんどんな本を読みましたか?
洋書の定番として読みにくさの順で、

ドラゴンブック
タイガーブック

あたりだと思いますが、他にもっと読みやすい本とかないでしょうか?

パーサや正規表現の解説も「yaccとlexに頼れ」で飛ばすんじゃなく、
ある程度わかりやすく説明して本がいいのですが。
0084デフォルトの名無しさんNGNG
C++はテンプレートがかなりいい。
でも、規則の組み合わさり方が複雑すぎる。
0085デフォルトの名無しさんNGNG
>>80
>よーん
馬鹿?(ワラ
0086デフォルトの名無しさんNGNG
>>85
まあまあ、別に「よーん」って言おうが言うまいが、コンピュータ言語
について話す上では関係ないことだし。
つーか、そんなとこにいちいち突っ込む君の方が馬鹿じゃん。
0087デフォルトの名無しさんNGNG
ていうか意味わかんねーなと思ったけど、80。
0088デフォルトの名無しさんNGNG
よーん、、87がいじめるモナー
         ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
           ∩_∩
          ( ´Д⊂ヽ
         ⊂    ノ
           人  Y
          し (_)
0089デフォルトの名無しさんNGNG
赤塚ファンが苛められてるな。
いや、とりみきファンの可能性も、、
009083NGNG
だれか洩れの質問>>83に答えてください。
0091not 83, not 90NGNG
>>83
ageなきゃ意味ないだろー。
0092部外者ANGNG
ドラゴンブックは翻訳されてるけど。>83
他に何か?
0093ミトコンドリ子NGNG
>>83
プログラミング言語処理系 岩波講座ソフトウェア科学5
ISBN4-00-010345-8
なんてどうかしら? 適当に端折られてるから、ドラゴンブックよりは
読みやすいかもしれないわ。

ついでに、タイガーブックってしらないんだけど、正式名称教えていただけ
ないかしら。
0094部外者ANGNG
それ持ってるけど、内用はまんまドラゴンブックの縮小版って感じだね。>93
(それでも辞典並みに分厚いけど)
0095デフォルトの名無しさんNGNG
>>93
あー思い出した。俺もそう思うよ。
>>94
読み比べるとやっぱり読みやすいと思うよ。
ただそれを元に実装しようと思うと足りない情報があって、
結局ドラゴンブック読むことになるって感じかな……
どうよ。
0096部外者ANGNG
>94
x内用
o内容

薄っぺらいのが良いなら、
計算機科学/ソフトウェア技術講座7「コンパイラの理論と実現」
ISBN4-320-02382-X
共立出版 2700円
てのもある。
最後にC--というコンパイラの実装が乗っている。
これのパーサはyaccを使った物と、再帰下降の2種類が掲載されている。
0097ミトコンドリ子NGNG
>>95
そうそう、そのとおり。
理屈だけ知るなら93
実装までするならドラゴンブックって感じかしらね。
0098デフォルトの名無しさんNGNG
実装だけならドラゴンブックいらん・・・。
009983NGNG
>>93
ドラゴンブックとは、

Modern Compiler Implementation in ML/Java/C
Andrew W. Appel
ISBN 0-521-58274-1
ISBN 0-521-58388-8
ISBN 0-521-58390-X

のことです。
ドラゴンブックの竜に対して、こちらの表紙は虎になっています。

ドラゴンブックよりも薄くて読みやすいとか、新しい分だけ最近の
トピックを押さえているとかの良い部分もあるんですが、字句解析
や構文解析の説明をはしょり気味な内容です。

理論よりも自分で実装することに興味があるので、ドラゴンブック
は読んでてつらいのです…
010083NGNG
>>99
一行目の「ドラゴンブックとは、 」は「タイガーブックとは、 」の間違いです。
0101デフォルトの名無しさんNGNG
>>99
実装より理論のが簡単なんだって。
■ このスレッドは過去ログ倉庫に格納されています