トップページ⇒tech
865コメント266KB

『コンパイラ・スクリプトエンジン』 相談室 2

■ このスレッドは過去ログ倉庫に格納されています
0001nanashi de faultNGNG
前スレ1より
>yaccやlexの使い方やら言語仕様やらの話題。

前スレ

【コンパイラ・スクリプトエンジン】相談室
http://pc.2ch.net/test/read.cgi/tech/981672957/

前スレアーカイブ(かちゅ用)
http://www.1me.jp/hp/prg_c-s_lab

前スレに張られたリンク + x
>>2-6
0002デフォルトの名無しさんNGNG
コンパイラ等を扱ったドキュメント

コンパイラおよびコンパイラコンパイラに関する本
http://www.ulis.ac.jp/library/Kanpo/Vol14No3/nakai.html

コンパイラ関連のリンク集
http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml

スクリプティング言語資料室(仮) (リンク)
http://www.kt.rim.or.jp/~kbk/

Compiler Construction
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html

Compiler Construction (1997)
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html

再帰下降構文解析の手法
http://member.nifty.ne.jp/nakamula/recurs.htm

情報システム工学実験 III コンパイラ・コンパイラ
http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html

正規表現
http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm

コンパイラ研究・開発情報の一集積所
http://compilers.cs.uec.ac.jp/

計算機能論ホームページ
http://buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/index.html
0003デフォルトの名無しさんNGNG
Asm関係

Links and Selected Readings
http://www.gnu.org/software/gcc/readings.html

NASM Manual
http://www.bekkoame.ne.jp/~bero/docj/nasm/nasmdoc0.htm

インテル(R) Itanium(TM) プロセッサ
http://www.intel.co.jp/jp/developer/design/itanium/index.htm

インテル(R) Pentium(R) 4 プロセッサ関連マニュアル (宝庫です)
http://www.intel.co.jp/jp/developer/design/pentium4/manuals/index.htm

Streaming SIMD Extensions 2 (SSE2)
http://developer.intel.com/software/products/college/ia32/sse2/index.htm
0004デフォルトの名無しさんNGNG
Lex(Flex) Yacc(Bison) 構文解析

Turbo Pascal Lex/Yacc
http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html

Jim Roskind's LALR(1) C++ Grammar
http://www.empathy.com/pccts/roskind.html

Flexと Bisonを同時に使う
http://guppy.eng.kagawa-u.ac.jp/~kagawa/1999/SysProg/both.html

KITE_ASM (yacc)
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/yacc/

KITE_ASM (lex)
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/lex/

Cygwin
http://www.cygwin.com/

GNU utilities for Win32
http://unxutils.sourceforge.net/
0005デフォルトの名無しさんNGNG
ガベコレ

GC FAQ -- draft
http://www.iecc.com/gclist/GC-faq.html

A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

0006デフォルトの名無しさんNGNG
処理系,スクリプト

The Odd Stage (吉里吉里というゲームのスクリプト)
http://www.din.or.jp/~glit/TheOddStage/

tiny C コンパイラ (C)
http://watalab.cs.uec.ac.jp/tinyCabs.html

Portable Object Compiler (Obj-C >> C のトランスレータ?)
http://users.pandora.be/stes/compiler.html

自作コンパイラの部屋(PL/1, Pascal等)
http://www.tokumaru.org/

0007デフォルトの名無しさんNGNG
持つ彼さまー!>1
0008nanashi de faultNGNG
つかれた・・・
たまに、よくわかんないのとか、リンク切れ、
その他重要じゃないのが入ってたんで添削しました。

あと、Intelとか張ったのはおれのしわざです。


では後誰か頼みます。
0009デフォルトの名無しさんNGNG
こっちモナー?
http://www.intel.co.jp/jp/developer/design/litcentr/index.htm
00101NGNG
>>9
すげぇ
つかそれだけ紹介すりゃ良かった・・・
0011デフォルトの名無しさんNGNG
DMonkeyもソース公開されてるけど。スレ違いならスマソ。

http://gaogao.moemoe.gr.jp/
0012デフォルトの名無しさんNGNG
いつのまにかsourceforgeにあるね、DMonkey
http://sourceforge.jp/projects/dmonkey/
0013デフォルトの名無しさんNGNG
∩ ∩
(´×`)
0014デフォルトの名無しさんNGNG
>>13
ミッフィー?
0015デフォルトの名無しさんNGNG
∧_∧
(;゚×゚)
0016sNGNG
yaccableなC++はこちら〜〜

http://www.computing.surrey.ac.uk/research/dsrg/fog/

ページ中程のCxxSrc.tgz/CxxSrcNT.tgz
0017デフォルトの名無しさんNGNG
構文解析アルゴリズムって再帰下降使うのとyacc使うの以外にいいのありませんか?
再帰下降使うと似たような関数いっぱい書かないといけなくなるし
gccとかはどんなアルゴリズムなんですか?
0018デフォルトの名無しさんNGNG
>>17
gccのソースを見ろ。
〜〜〜 終了 〜〜〜
0019デフォルトの名無しさんNGNG
LL
0020デフォルトの名無しさんNGNG
gccはyaccだろ。
0021デフォルトの名無しさんNGNG
>>17
優先順位と結合規則とオペレータの関係をテーブル化する方法がある。
正式名称がなんなのかは知らないけど。
関数のポインタを使う。
似たような関数いっぱい書かないといけないのは同じだけど
メンテがし易くなる。それも気持ち程度。
0022デフォルトの名無しさんNGNG
>>21
演算子順位法かな?
基本的にはループ1つで実装できたので、「似たような関数いっぱい」とは
違うかも。
0023デフォルトの名無しさんNGNG
●コンパイラ 原理・技法・ツール 1&2
http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
http://www.amazon.co.jp/exec/obidos/ASIN/4781905862/

日本語で読める本では、結局これが一番(だと思ってる)。
バイブルだから・・・としり込みしないで読もう!
この本がコンパイラ本1冊目であっても十分読める(と思う)。


●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
http://www.amazon.co.jp/exec/obidos/ASIN/4000103458/

2分冊うざい、という人にはこの本。


●コンパイラの構成と最適化 中田 育男
http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/

悪くはない(偉そう)。この本は最適化がメイン。
0024デフォルトの名無しさんNGNG
>>23
>●コンパイラ 原理・技法・ツール 1&2
>http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
1巻はオススメしない。
LL(1)とかLR(N)とかはイラン。
0025デフォルトの名無しさんNGNG
(物理的に)手軽に読みたければ

●コンパイラの仕組み 渡邊 坦
http://www.amazon.co.jp/exec/obidos/ASIN/4254127081/

という本もある。ただし、サイズの割に値段が手軽じゃない罠
0026デフォルトの名無しさんNGNG
>>17
再帰下降用のパーサー・ジェネレータもあるよん。
0027デフォルトの名無しさんNGNG
ANTLRはどうでしょう?
http://www.antlr.org/
0028デフォルトの名無しさんNGNG
前にもあった話題のような気がするのですが、、、。
再帰下降(手書き)とyaccでは、どちらが速いルーチンが作れますか?
yaccだという噂ですが、、、。
0029デフォルトの名無しさんNGNG
yacc
0030デフォルトの名無しさんNGNG
>28
どう考えてもyaccでしょ。
0031デフォルトの名無しさんNGNG
同じ言語を生成する文法なら漸近的な計算量は等しいが、普通は
再帰呼び出し/復帰1回より配列読み出しとgotoの方が速いだろ
うな。

ただ、Javaみたいに関数(メソッド)呼び出しが速くて配列操作が
比較的遅い言語だとどうかなあ…

まあ、yaccっていうからCに限るのかな。
0032デフォルトの名無しさんNGNG
LLで表駆動が早め
0033デフォルトの名無しさんNGNG
>>31
javaccとかいうのがあったはず
0034デフォルトの名無しさんNGNG
>>33
JavaCCはLL(k)だね。
0035デフォルトの名無しさんNGNG
>>31
Yet Another Compiler Compilerだから別にCとは限らない。
0036デフォルトの名無しさんNGNG
WindowsでGUIを利用した仮想マシンをつくるときって、
普通マルチスレッドで設計するでしょうか?
もう1つの言語スレでちょっと話題になってたのに、
今は全然違う方向に逝ってるからキケナイ...
0037デフォルトの名無しさんNGNG
>>36
>GUIを利用した仮想マシン
VMなのにGUIに依存するの?
Smalltalk見たいなもの?
0038デフォルトの名無しさんNGNG
>37
いや、スクリプト言語を作りたいんだけど、
言語と作るって言うのもなにかな〜と思って。
003938NGNG
主旨書き忘れました。
要はHSPみたいなものを作りたいのです。
0040デフォルトの名無しさんNGNG
>>39
もう少し志を高く持とう。
004138NGNG
志ってイってもなー
コンソール感覚でGUIアプリ作れたらなとか考えてるだけだしなー
大体作ること自体面白そうだし。
0042デフォルトの名無しさんNGNG
>>38

>コンソール感覚でGUIアプリ作れたら
意味がわからん。
0043デフォルトの名無しさんNGNG
>>41
いや、目標(HSP)が引く杉ってこと。
004438NGNG
>42
>>コンソール感覚でGUIアプリ作れたら
>意味がわからん。
それもそうだ。
たとえば、
list = file_search("C:\My Documents\*.jpg");
foreach(list, itr){
image = image_load(itr);
tile_draw(image, 48, 32);
}
ぐらいの記述量でフォルダ内の画像一覧を表示するアプリが書けるとか。
いや、たとえだけど。

>43
>いや、目標(HSP)が引く杉ってこと。
そうか?
そうか。
うーむ。

004542NGNG
>>44
記述量を問題にするなら、処理系でなく既存の
言語のクラスライブラリを整えた方がいいんでない?

でも、HSPでクラスライブラリはやだ・・・
004642NGNG
あ。スクリプトか。
よく見てなかった。スマソ
0047デフォルトの名無しさんNGNG
>>38
LISPは構文解析いらないから楽だよ
0048デフォルトの名無しさんNGNG
>>47
いらないってこたあないだろ。
たしかに構文は簡単だけどさ。
0049デフォルトの名無しさんNGNG
DelphiやVBみたいに貼りつけ→即実行みたいな
環境を作るのってむずかしい?
0050デフォルトの名無しさんNGNG
>>48
最低限の構文は必要かと。
むちゃくちゃ楽なのは確かだけど。
あとはマクロで構文唐。
0051デフォルトの名無しさんNGNG
まあ下手な構文作るよりかはLISPのS式にしとく方がましだな。
005238NGNG
>>47
構文解析とかは中田(?)氏の本を読んでできるようにはなりました。
再帰下降法だけだけど。
0053デフォルトの名無しさんNGNG
>38
FORTHは?
と言ってみるテスト。
0054MINDNGNG
>>53
処理系を作る人にはやさしいけど、応用系を作る人にはどうかな?
と呟いてしまう今日この頃。
0055デフォルトの名無しさんNGNG
まだyaccがはやいなんていってる馬鹿いるね
0056デフォルトの名無しさんNGNG
>>55
うっさいハゲ
0057デフォルトの名無しさんNGNG
>>55
パーサー担当は君に決定!
0058デフォルトの名無しさんNGNG
LISPで決まり。
ところで、GCの無いLISPって理論的に可能でしょうか。
0059デフォルトの名無しさんNGNG
可能
無限にメモリを消費し続けてください
0060デフォルトの名無しさんNGNG
保守age
0061デフォルトの名無しさんNGNG
保守しる!
0062デフォルトの名無しさんNGNG
もりあがらないね
0063デフォルトの名無しさんNGNG
どうやって中間言語に翻訳しなおすのですか?
0064HELP!あ〜にゃにゃにゃ〜にゃ〜NGNG
Yaccのソースが見つからないのれす。
0065逝って良しの1NGNG
構文解析器だけは作りたくないです。
0066デフォルトの名無しさんNGNG
>>65
再帰下降なら楽じゃん。
0067デフォルトの名無しさんNGNG
>>64
GNU bison ならすぐ見つかるだろ。
0068デフォルトの名無しさんNGNG
>>64
森氏のkmYaccならVectorで検索すれば有るんじゃない?ソース付きで。
この人のcppとmakeは自分なりに手直しして未だに使わせてもらってる。
0069デフォルトの名無しさんNGNG
どうしても関数の実装ができません。あとcontinueとbreakも。
0070デフォルトの名無しさんNGNG
>69
Cマガの2000年5月号をよめばわかります。
007164NGNG
>>67
GNUは生理的に嫌なので。すんまへん。

>>68
ウヲ。すごいでつなこの人。ありがとうございます。
0072デフォルトの名無しさんNGNG
>>71
そういうやつは生理的に氏ね!
0073デフォルトの名無しさんNGNG
>>72
GNU のソースが生理的に嫌いだってのは、分からんでもない。あのインデントは
読みたくないよ。(というわけで GNU indent 通して整形してから参照してる俺)
0074デフォルトの名無しさんNGNG
>>73
むしろライセンスの方じゃないの。
0075デフォルトの名無しさんNGNG
>>74
73 の皮肉と諧謔を込めた文意を読み取れ。
0076デフォルトの名無しさんNGNG
75=73
0077デフォルトの名無しさんNGNG
>>68
ちなみにこの人、LSI-Cコンパイラの作者な。
yaccもcppもmakeもその一部。
007868NGNG
ワシは厨房なんで高度な皮肉も
宗教じみたライセンスも理解できんので
避けてるのです。生理的に。用途違うかな。

>>77
普段LSI-C試食版使ってるので、cppで気づきました。
LSI-Cは一人の天才プログラマが作ったって噂があったけど、
本当だったんですな。あこがれます。
0079真68NGNG
↑どうでもいいけど68書いたの俺な。あんた64じゃない?
>>77
知っている。今はLSI JAPANの取締役らしいな。
bisonのジェネレータが出力するソースは見にくくて吐き気がするが、
kmyaccのは綺麗で分かりやすい。実用にも問題無いし、学習用にもお勧め。
俺はbisonから完全に乗り換えたよ。テーブルの小ささに惚れた。
008064NGNG
スマソ回線切って首吊ってきます。
008173NGNG
>>76
はずれ(w

>>78
> 宗教じみたライセンスも理解できんので
GPL は理解しておいて損はないと思うよ。

俺は GPL の趣旨には賛同しないので、自分が公開するソフトのライセンスは
GPL にしない。でも GPL で公開されているソフトには有用なモノも多いし、ライ
センスを理解して使えば GPL に汚染されずに旨い部分だけ頂ける。

(ちなみに個人的には BSD、仕事絡みではクローズドな人です)
0082デフォルトの名無しさんNGNG
>ライセンスを理解して使えば GPL に汚染されずに旨い部分だけ頂ける。
この辺のところを、もう少し詳しく教えて( ゚д゚)ホスィ
008364NGNG
82に禿尿。readlineとかガリガーリ使っていきたいヨー
0084デフォルトの名無しさんNGNG
LL(1)文法の
Fisrt Follow Directorの計算アルゴリズムが良くわからん。
オーム者コンパイラ(中田育男 8刷 p85)

誰かわかりやすく教えてくれ。
0085.NGNG
http://www.aa.wakwak.com/~ayaka/cgi-bin/privatetalk/sank.pl
0086 NGNG
>>84
過去ログ。
0087デフォルトの名無しさんNGNG
ageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
0088デフォルトの名無しさんNGNG
以前、Cで数十行で書かれた小さいBASICインタプリタを見たことあるん
だけど、検索しても、どうしても見つかりませんでした。
知ってる人いますか?
0089デフォルトの名無しさんNGNG
>>88
7行スレのことか?
0090デフォルトの名無しさんNGNG
>>88
Expert Cに載ってる奴じゃない?
http://www.ioccc.org/1990/dds.c
0091デフォルトの名無しさんNGNG
>90
これ、VC6でコンパイル通らないんだけど、何だったらできる?
0092デフォルトの名無しさんNGNG
C++の構文解析、
struct C {
 C (f)(); /*Cを返す関数f*/
 C(); /*コンストラクタ*/
};
というので、{}のなかの 'C'
まで読んだ時点でそれがclass-nameかdeclaratorかどうやって判断しているの?
ひとつだけの先読みではわからないですよね。LALR(1)とかいうのとはちがうのですか?
0093デフォルトの名無しさんNGNG
>>92
http://www.y-adagio.com/public/reports/mh_inst/1996/19.doc.htm
0094デフォルトの名無しさんNGNG
>>92
読んだ時点で判断してるわけないと思うが。
そこは意味解析で判断する部分。
構文解析の段階だと
C();
は「戻型が省略された関数C」とでも解析されるんだろう。
structの定義('}')が終わった段階で、
初めて意味解析が走ると考えたほうが自然。
0095デフォルトの名無しさんNGNG
>>94
struct の } 終わってから解析って、そりゃ構文解析でほとんど何もやってない
に等しい気が……。struct C の段階で「C」を型名としてシンボルテーブルに登
録しておいて

 C (f)();
 → 識別子 '(' 識別子 ')' '(' 識別子 ')' ';'

ぐらいにバラしてスタックに積んでおき、この段階で意味解析に掛けると思う。
構造体の宣言が終わらなくても ';' 単位でばらせば、十分に解析可能だよね。
少なくとも型名やら名前空間やら、必要な情報は事前に出てるわけだし。

(そうでもない?)
0096デフォルトの名無しさんNGNG
'C'まで読み込んだ段階では判定できないから
適当な中間の非終端記号を入れて判定を遅延させて、
十分読み込んだところで判定を確定する、という話じゃないの?
009796NGNG
>95 と内容被ってた(鬱)
009892NGNG
とりあえず全部identifierとして読んでおけばいいんですね。
Cの場合、構文解析の段階でtypedefとenumを辞書引きすればよさそう(試してない)
だったので、C++もその延長でいけるかとおもっていたのです。
LALR(2)でならそれでもいけるかな?
0099デフォルトの名無しさんNGNG
>>98
C は型名と変数名は異なる名前空間で定義されるから(型名と重複する変数名
を定義可能)、その方針でやる場合には

 型名を読み込んだ
 → 字句解析側に、次にアルファベット列が来たら identifier を返すように設定

と、構文解析・字句解析での情報のやりとりが必要になるかと。
010092NGNG
>>99
typedef名だけは型名と変数名の両方に登録されるようなので、
typedef t int;
int t();
なんてのはエラーにしないといけない(?)のでどっちにしても
意味解析でも構文解析じみたことはしなければいけないみたいですね。
0101100NGNG
typedef t int ×
typedef int t ○
■ このスレッドは過去ログ倉庫に格納されています