『コンパイラ・スクリプトエンジン』 相談室 2at TECH
『コンパイラ・スクリプトエンジン』 相談室 2 - 暇つぶし2ch2:デフォルトの名無しさん
02/05/12 02:05
コンパイラ等を扱ったドキュメント

コンパイラおよびコンパイラコンパイラに関する本
URLリンク(www.ulis.ac.jp)

コンパイラ関連のリンク集
URLリンク(www.ulis.ac.jp)

スクリプティング言語資料室(仮) (リンク)
URLリンク(www.kt.rim.or.jp)

Compiler Construction
URLリンク(rananim.ie.u-ryukyu.ac.jp)

Compiler Construction (1997)
URLリンク(rananim.ie.u-ryukyu.ac.jp)

再帰下降構文解析の手法
URLリンク(member.nifty.ne.jp)

情報システム工学実験 III コンパイラ・コンパイラ
URLリンク(math.cs.kitami-it.ac.jp)

正規表現
URLリンク(hp.vector.co.jp)

コンパイラ研究・開発情報の一集積所
URLリンク(compilers.cs.uec.ac.jp)

計算機能論ホームページ
URLリンク(buri.sfc.keio.ac.jp)


3:デフォルトの名無しさん
02/05/12 02:05
Asm関係

Links and Selected Readings
URLリンク(www.gnu.org)

NASM Manual
URLリンク(www.bekkoame.ne.jp)

インテル(R) Itanium(TM) プロセッサ
URLリンク(www.intel.co.jp)

インテル(R) Pentium(R) 4 プロセッサ関連マニュアル (宝庫です)
URLリンク(www.intel.co.jp)

Streaming SIMD Extensions 2 (SSE2)
URLリンク(developer.intel.com)


4:デフォルトの名無しさん
02/05/12 02:05
Lex(Flex) Yacc(Bison) 構文解析

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)
URLリンク(www.arch.cs.kumamoto-u.ac.jp)

KITE_ASM (lex)
URLリンク(www.arch.cs.kumamoto-u.ac.jp)

Cygwin
URLリンク(www.cygwin.com)

GNU utilities for Win32
URLリンク(unxutils.sourceforge.net)

5:デフォルトの名無しさん
02/05/12 02:06
ガベコレ

GC FAQ -- draft
URLリンク(www.iecc.com)

A garbage collector for C and C++
URLリンク(www.hpl.hp.com)



6:デフォルトの名無しさん
02/05/12 02:06
処理系,スクリプト

The Odd Stage (吉里吉里というゲームのスクリプト)
URLリンク(www.din.or.jp)

tiny C コンパイラ (C)
URLリンク(watalab.cs.uec.ac.jp)

Portable Object Compiler (Obj-C >> C のトランスレータ?)
URLリンク(users.pandora.be)

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



7:デフォルトの名無しさん
02/05/12 02:08
持つ彼さまー!>1

8:nanashi de fault
02/05/12 02:09
つかれた・・・
たまに、よくわかんないのとか、リンク切れ、
その他重要じゃないのが入ってたんで添削しました。

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


では後誰か頼みます。

9:デフォルトの名無しさん
02/05/12 02:19
こっちモナー?
URLリンク(www.intel.co.jp)

10:1
02/05/12 02:21
>>9
すげぇ
つかそれだけ紹介すりゃ良かった・・・


11:デフォルトの名無しさん
02/05/12 04:01
DMonkeyもソース公開されてるけど。スレ違いならスマソ。

URLリンク(gaogao.moemoe.gr.jp)

12:デフォルトの名無しさん
02/05/12 09:40
いつのまにかsourceforgeにあるね、DMonkey
URLリンク(sourceforge.jp)

13:デフォルトの名無しさん
02/05/12 21:51
∩ ∩
(´×`)

14:デフォルトの名無しさん
02/05/12 22:48
>>13
ミッフィー?

15:デフォルトの名無しさん
02/05/12 22:53
∧_∧
(;゚×゚)

16:s
02/05/13 18:27
yaccableなC++はこちら~~

URLリンク(www.computing.surrey.ac.uk)

ページ中程のCxxSrc.tgz/CxxSrcNT.tgz

17:デフォルトの名無しさん
02/05/14 03:56
構文解析アルゴリズムって再帰下降使うのとyacc使うの以外にいいのありませんか?
再帰下降使うと似たような関数いっぱい書かないといけなくなるし
gccとかはどんなアルゴリズムなんですか?

18:デフォルトの名無しさん
02/05/14 04:00
>>17
gccのソースを見ろ。
~~~ 終了 ~~~

19:デフォルトの名無しさん
02/05/14 04:02
LL

20:デフォルトの名無しさん
02/05/14 07:35
gccはyaccだろ。

21:デフォルトの名無しさん
02/05/14 12:30
>>17
優先順位と結合規則とオペレータの関係をテーブル化する方法がある。
正式名称がなんなのかは知らないけど。
関数のポインタを使う。
似たような関数いっぱい書かないといけないのは同じだけど
メンテがし易くなる。それも気持ち程度。

22:デフォルトの名無しさん
02/05/14 18:30
>>21
演算子順位法かな?
基本的にはループ1つで実装できたので、「似たような関数いっぱい」とは
違うかも。

23:デフォルトの名無しさん
02/05/14 18:46
●コンパイラ 原理・技法・ツール 1&2
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

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


●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
URLリンク(www.amazon.co.jp)

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


●コンパイラの構成と最適化 中田 育男
URLリンク(www.amazon.co.jp)

悪くはない(偉そう)。この本は最適化がメイン。

24:デフォルトの名無しさん
02/05/15 00:25
>>23
>●コンパイラ 原理・技法・ツール 1&2
>URLリンク(www.amazon.co.jp)
1巻はオススメしない。
LL(1)とかLR(N)とかはイラン。

25:デフォルトの名無しさん
02/05/15 02:00
(物理的に)手軽に読みたければ

●コンパイラの仕組み 渡邊 坦
URLリンク(www.amazon.co.jp)

という本もある。ただし、サイズの割に値段が手軽じゃない罠

26:デフォルトの名無しさん
02/05/15 06:10
>>17
再帰下降用のパーサー・ジェネレータもあるよん。

27:デフォルトの名無しさん
02/05/15 15:26
ANTLRはどうでしょう?
URLリンク(www.antlr.org)


28:デフォルトの名無しさん
02/05/21 18:51
前にもあった話題のような気がするのですが、、、。
再帰下降(手書き)とyaccでは、どちらが速いルーチンが作れますか?
yaccだという噂ですが、、、。


29:デフォルトの名無しさん
02/05/21 18:54
yacc

30:デフォルトの名無しさん
02/05/21 19:40
>28
どう考えてもyaccでしょ。

31:デフォルトの名無しさん
02/05/21 20:06
同じ言語を生成する文法なら漸近的な計算量は等しいが、普通は
再帰呼び出し/復帰1回より配列読み出しとgotoの方が速いだろ
うな。

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

まあ、yaccっていうからCに限るのかな。

32:デフォルトの名無しさん
02/05/21 20:10
LLで表駆動が早め

33:デフォルトの名無しさん
02/05/21 20:13
>>31
javaccとかいうのがあったはず

34:デフォルトの名無しさん
02/05/21 20:20
>>33
JavaCCはLL(k)だね。

35:デフォルトの名無しさん
02/05/21 21:18
>>31
Yet Another Compiler Compilerだから別にCとは限らない。

36:デフォルトの名無しさん
02/05/21 23:20
WindowsでGUIを利用した仮想マシンをつくるときって、
普通マルチスレッドで設計するでしょうか?
もう1つの言語スレでちょっと話題になってたのに、
今は全然違う方向に逝ってるからキケナイ...


37:デフォルトの名無しさん
02/05/21 23:22
>>36
>GUIを利用した仮想マシン
VMなのにGUIに依存するの?
Smalltalk見たいなもの?

38:デフォルトの名無しさん
02/05/21 23:30
>37
いや、スクリプト言語を作りたいんだけど、
言語と作るって言うのもなにかな~と思って。


39:38
02/05/21 23:33
主旨書き忘れました。
要はHSPみたいなものを作りたいのです。


40:デフォルトの名無しさん
02/05/21 23:38
>>39
もう少し志を高く持とう。

41:38
02/05/21 23:49
志ってイってもなー
コンソール感覚でGUIアプリ作れたらなとか考えてるだけだしなー
大体作ること自体面白そうだし。


42:デフォルトの名無しさん
02/05/21 23:51
>>38

>コンソール感覚でGUIアプリ作れたら
意味がわからん。

43:デフォルトの名無しさん
02/05/21 23:52
>>41
いや、目標(HSP)が引く杉ってこと。

44:38
02/05/22 00:05
>42
>>コンソール感覚でGUIアプリ作れたら
>意味がわからん。
それもそうだ。
たとえば、
list = file_search("C:\My Documents\*.jpg");
foreach(list, itr){
image = image_load(itr);
tile_draw(image, 48, 32);
}
ぐらいの記述量でフォルダ内の画像一覧を表示するアプリが書けるとか。
いや、たとえだけど。

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



45:42
02/05/22 00:12
>>44
記述量を問題にするなら、処理系でなく既存の
言語のクラスライブラリを整えた方がいいんでない?

でも、HSPでクラスライブラリはやだ・・・

46:42
02/05/22 00:14
あ。スクリプトか。
よく見てなかった。スマソ

47:デフォルトの名無しさん
02/05/22 00:14
>>38
LISPは構文解析いらないから楽だよ

48:デフォルトの名無しさん
02/05/22 00:18
>>47
いらないってこたあないだろ。
たしかに構文は簡単だけどさ。

49:デフォルトの名無しさん
02/05/22 00:19
DelphiやVBみたいに貼りつけ→即実行みたいな
環境を作るのってむずかしい?

50:デフォルトの名無しさん
02/05/22 00:21
>>48
最低限の構文は必要かと。
むちゃくちゃ楽なのは確かだけど。
あとはマクロで構文唐。

51:デフォルトの名無しさん
02/05/22 00:31
まあ下手な構文作るよりかはLISPのS式にしとく方がましだな。

52:38
02/05/22 00:31
>>47
構文解析とかは中田(?)氏の本を読んでできるようにはなりました。
再帰下降法だけだけど。

53:デフォルトの名無しさん
02/05/23 03:29
>38
FORTHは?
と言ってみるテスト。


54:MIND
02/05/23 14:09
>>53
処理系を作る人にはやさしいけど、応用系を作る人にはどうかな?
と呟いてしまう今日この頃。

55:デフォルトの名無しさん
02/05/23 14:24
まだyaccがはやいなんていってる馬鹿いるね

56:デフォルトの名無しさん
02/05/23 15:42
>>55
うっさいハゲ

57:デフォルトの名無しさん
02/05/23 16:23
>>55
パーサー担当は君に決定!

58:デフォルトの名無しさん
02/05/23 17:02
LISPで決まり。
ところで、GCの無いLISPって理論的に可能でしょうか。


59:デフォルトの名無しさん
02/05/23 17:06
可能
無限にメモリを消費し続けてください

60:デフォルトの名無しさん
02/05/27 05:40
保守age

61:デフォルトの名無しさん
02/05/29 01:31
保守しる!

62:デフォルトの名無しさん
02/05/29 23:47
もりあがらないね

63:デフォルトの名無しさん
02/05/29 23:49
どうやって中間言語に翻訳しなおすのですか?

64:HELP!あ~にゃにゃにゃ~にゃ~
02/05/30 01:04
Yaccのソースが見つからないのれす。

65:逝って良しの1
02/05/30 01:15
構文解析器だけは作りたくないです。

66:デフォルトの名無しさん
02/05/30 01:24
>>65
再帰下降なら楽じゃん。

67:デフォルトの名無しさん
02/05/30 03:00
>>64
GNU bison ならすぐ見つかるだろ。

68:デフォルトの名無しさん
02/05/30 04:39
>>64
森氏のkmYaccならVectorで検索すれば有るんじゃない?ソース付きで。
この人のcppとmakeは自分なりに手直しして未だに使わせてもらってる。

69:デフォルトの名無しさん
02/05/30 05:06
どうしても関数の実装ができません。あとcontinueとbreakも。

70:デフォルトの名無しさん
02/05/30 11:08
>69
Cマガの2000年5月号をよめばわかります。

71:64
02/05/30 12:29
>>67
GNUは生理的に嫌なので。すんまへん。

>>68
ウヲ。すごいでつなこの人。ありがとうございます。

72:デフォルトの名無しさん
02/05/31 01:41
>>71
そういうやつは生理的に氏ね!

73:デフォルトの名無しさん
02/05/31 22:45
>>72
GNU のソースが生理的に嫌いだってのは、分からんでもない。あのインデントは
読みたくないよ。(というわけで GNU indent 通して整形してから参照してる俺)

74:デフォルトの名無しさん
02/05/31 23:22
>>73
むしろライセンスの方じゃないの。

75:デフォルトの名無しさん
02/05/31 23:53
>>74
73 の皮肉と諧謔を込めた文意を読み取れ。

76:デフォルトの名無しさん
02/06/01 00:21
75=73

77:デフォルトの名無しさん
02/06/01 04:16
>>68
ちなみにこの人、LSI-Cコンパイラの作者な。
yaccもcppもmakeもその一部。

78:68
02/06/01 13:53
ワシは厨房なんで高度な皮肉も
宗教じみたライセンスも理解できんので
避けてるのです。生理的に。用途違うかな。

>>77
普段LSI-C試食版使ってるので、cppで気づきました。
LSI-Cは一人の天才プログラマが作ったって噂があったけど、
本当だったんですな。あこがれます。

79:真68
02/06/01 16:48
↑どうでもいいけど68書いたの俺な。あんた64じゃない?
>>77
知っている。今はLSI JAPANの取締役らしいな。
bisonのジェネレータが出力するソースは見にくくて吐き気がするが、
kmyaccのは綺麗で分かりやすい。実用にも問題無いし、学習用にもお勧め。
俺はbisonから完全に乗り換えたよ。テーブルの小ささに惚れた。

80:64
02/06/01 19:58
スマソ回線切って首吊ってきます。

81:73
02/06/03 16:39
>>76
はずれ(w

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

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

(ちなみに個人的には BSD、仕事絡みではクローズドな人です)

82:デフォルトの名無しさん
02/06/03 17:46
>ライセンスを理解して使えば GPL に汚染されずに旨い部分だけ頂ける。
この辺のところを、もう少し詳しく教えて( ゚д゚)ホスィ

83:64
02/06/03 23:01
82に禿尿。readlineとかガリガーリ使っていきたいヨー

84:デフォルトの名無しさん
02/06/04 04:10
LL(1)文法の
Fisrt Follow Directorの計算アルゴリズムが良くわからん。
オーム者コンパイラ(中田育男 8刷 p85)

誰かわかりやすく教えてくれ。

85:.
02/06/04 04:15
URLリンク(www.aa.wakwak.com)

86: 
02/06/05 01:17
>>84
過去ログ。


87:デフォルトの名無しさん
02/06/06 23:29
ageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

88:デフォルトの名無しさん
02/06/07 11:22
以前、Cで数十行で書かれた小さいBASICインタプリタを見たことあるん
だけど、検索しても、どうしても見つかりませんでした。
知ってる人いますか?

89:デフォルトの名無しさん
02/06/07 11:28
>>88
7行スレのことか?

90:デフォルトの名無しさん
02/06/07 13:20
>>88
Expert Cに載ってる奴じゃない?
URLリンク(www.ioccc.org)

91:デフォルトの名無しさん
02/06/10 16:08
>90
これ、VC6でコンパイル通らないんだけど、何だったらできる?

92:デフォルトの名無しさん
02/06/11 00:42
C++の構文解析、
struct C {
 C (f)(); /*Cを返す関数f*/
 C(); /*コンストラクタ*/
};
というので、{}のなかの 'C'
まで読んだ時点でそれがclass-nameかdeclaratorかどうやって判断しているの?
ひとつだけの先読みではわからないですよね。LALR(1)とかいうのとはちがうのですか?


93:デフォルトの名無しさん
02/06/11 02:37
>>92
URLリンク(www.y-adagio.com)

94:デフォルトの名無しさん
02/06/11 02:44
>>92
読んだ時点で判断してるわけないと思うが。
そこは意味解析で判断する部分。
構文解析の段階だと
C();
は「戻型が省略された関数C」とでも解析されるんだろう。
structの定義('}')が終わった段階で、
初めて意味解析が走ると考えたほうが自然。


95:デフォルトの名無しさん
02/06/11 03:48
>>94
struct の } 終わってから解析って、そりゃ構文解析でほとんど何もやってない
に等しい気が……。struct C の段階で「C」を型名としてシンボルテーブルに登
録しておいて

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

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

(そうでもない?)

96:デフォルトの名無しさん
02/06/11 05:05
'C'まで読み込んだ段階では判定できないから
適当な中間の非終端記号を入れて判定を遅延させて、
十分読み込んだところで判定を確定する、という話じゃないの?

97:96
02/06/11 05:07
>95 と内容被ってた(鬱)

98:92
02/06/12 00:57
とりあえず全部identifierとして読んでおけばいいんですね。
Cの場合、構文解析の段階でtypedefとenumを辞書引きすればよさそう(試してない)
だったので、C++もその延長でいけるかとおもっていたのです。
LALR(2)でならそれでもいけるかな?

99:デフォルトの名無しさん
02/06/12 14:01
>>98
C は型名と変数名は異なる名前空間で定義されるから(型名と重複する変数名
を定義可能)、その方針でやる場合には

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

と、構文解析・字句解析での情報のやりとりが必要になるかと。

100:92
02/06/12 23:04
>>99
typedef名だけは型名と変数名の両方に登録されるようなので、
typedef t int;
int t();
なんてのはエラーにしないといけない(?)のでどっちにしても
意味解析でも構文解析じみたことはしなければいけないみたいですね。

101:100
02/06/12 23:05
typedef t int ×
typedef int t ○

102:デフォルトの名無しさん
02/06/16 01:17
最適化するのにポインタって邪魔ですか?

103:デフォルトの名無しさん
02/06/16 01:21
邪魔。

104:デフォルトの名無しさん
02/06/16 01:32
っですよねー。
三項になりましたサンクコ

105:デフォルトの名無しさん
02/06/16 01:40
オブジェクトやメモリを参照することを禁止したポインタなら邪魔にならない。

106:デフォルトの名無しさん
02/06/18 03:52
1+a+2 を逆ポーランドで表現した
1a+2+ というデータだけがここに有るとして、これを
3a+ にうまく変形出来ないだろうか。

107:デフォルトの名無しさん
02/06/18 04:00
>>106
出来る。

108:デフォルトの名無しさん
02/06/19 00:19
>>106
URLリンク(buri.sfc.keio.ac.jp)
の図で言うと * と / が演算子の結合度が同じかつ親子なので、
a を a / d で置き換えてよい。

今考えたんで合ってるかどうか分からんけど。

109:age
02/06/20 01:05
age

110:デフォルトの名無しさん
02/06/21 02:17
保守汁

111:デフォルトの名無しさん
02/06/24 11:39
昨日LAOXのBOOK館でドラゴンブックの邦訳を買ったDQNを目撃した人はいませんか?
それが私です。

ついでにもう一冊、と、
原田賢一『コンパイラ構成法』共立出版、374頁、1999
を買っちゃいました。こちらはDQNの私でもわかりやすく例を挙げて、
C言語ライクの言語を構築する方法を説明してありました。

112:デフォルトの名無しさん
02/06/25 01:16
DQN がドラゴンブック買うかよチクショー。

113:コンパイラ構成法
02/06/25 03:49
おもわず検索してソースだけget。

114:棄教者 ◆witdLTi2
02/06/25 07:47
>>113
あ。ほんとだ。
正誤表とソースがげtできる!
カムサハムニダ。

115:デフォルトの名無しさん
02/06/30 20:21
保守

116:デフォルトの名無しさん
02/07/07 23:12
やっと前スレが埋まったね。

117:質問
02/07/07 23:43
どうしてこのスレはもりあがらないんですか?

118:デフォルトの名無しさん
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:デフォルトの名無しさん
02/07/08 08:35
>>121
いや~、でも憶えないとコンフリクトの理由が分からなくて困ることとかない?
でも、なにも知らないところからだったら yacc 憶えた後の方が理解が早いので
手順として先に yacc は賛成。


125:デフォルトの名無しさん
02/07/08 10:10
>>121
コンパイラ・コンパイラの段階から自作できるようになって、初めて一人前。

126:デフォルトの名無しさん
02/07/08 10:39
コンパイラ・コンパイラ・コンパイラはどうやって作るんですか?

127: 
02/07/08 11:02
>>126
コンパイラ・コンパイラと一緒。

* (コンパイラ・コンパイラ)・コンパイラ
* (YACC のコンパイラ)・コンパイラ
* (C のコンパイラ)・コンパイラ


128:デフォルトの名無しさん
02/07/08 14:19
>>126
作る必要はありません。

129:デフォルトの名無しさん
02/07/08 16:40
>>126
コンパイラ・コンパイラ・コンパイラの段階から自作できるようになって、初めて神。

130:デフォルトの名無しさん
02/07/09 03:40
[コンパイラ]n ・ コンパイラの段階から自作できるようになって、初めて神。

131:ふわふわ名無しさん
02/07/09 04:16
結局のところ、コンパイラ・コンパイラさえ作れれば神。
証明↓

132:デフォルトの名無しさん
02/07/11 03:28
⊂(ΦωΦ)⊃フフフ・・・・

133:棄教者 ◆witdLTi2
02/07/11 16:15
>>131
テユーカ、一番すごいのはダイレクトにマシンコードを吐き出すコンパイラをハックする人だと思う。

134:デフォルトの名無しさん
02/07/11 18:45
再帰下降ってみんなもう使ってないの?

135:デフォルトの名無しさん
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:
02/07/22 00:38
>>137
「定義したい」とはどういう意味だ?

139:デフォルトの名無しさん
02/07/22 00:38
ブロック終端でのjumpの前の時点でex3を評価すればいいじゃん


140:デフォルトの名無しさん
02/07/22 00:55
>>139
つまりsを読んだ後、ex2の前にjumpする前にex3を評価するってことですよね?
でも前から解析していく際にex3はどのようにしておけばよいのでしょう。
プログラム書くときにex3のところをどうやって書けばいいのかが・・・考えてるんですけど
分からないんです・・・

141:デフォルトの名無しさん
02/07/22 00:59
>>140
ハァ?
それじゃfor()はどうやって実現してるんだよ?

142:
02/07/22 01:12
>>140
もしかして、構文木とか作らずに、字面のまま実行してたりする?

143:デフォルトの名無しさん
02/07/22 01:16
>>142
恥ずかしながらそうです。。。


144:デフォルトの名無しさん
02/07/22 01:18
それじゃ、構造化言語を作るのは無理だろ。

145:デフォルトの名無しさん
02/07/22 01:23
>>144
そうですか。。。
出直してきます。レスくれた方ありがとうございました。

146:よ
02/07/22 01:31
continueに対応できない罠

とかいう問題じゃなかったか…

147:デフォルトの名無しさん
02/07/22 02:24
URLリンク(www.combo.org) これなんかもおもしろそう.


148:デフォルトの名無しさん
02/07/22 03:53
別に構文木を作らなくても、構造化言語のコンパイラは作れる。
というか、作ったことがある。
出力コードの最適化は難いし、jumpの塊になるけど、breakや
continueもちゃんと対応できた。

149:デフォルトの名無しさん
02/07/22 11:00
>>148
> 別に構文木を作らなくても、構造化言語のコンパイラは作れる。
不可能じゃないだろうが、for ループがネストすることを考えると、ジャンプ用の
ラベルの振り方とか面倒そうだ。(それって、結局、構文木を作ってるのと手間
変わらんのでは?)

150:デフォルトの名無しさん
02/07/29 04:09
字句解析をする際に予約語と予約語でない名前とを区別するにはどうするべきなんでしょうか?
つづりを切り出し照合せよなどと本には書いてあったのですが、意味がよく分かりません。
ハッシュ法を使って何とかするのでしょうか?

151:デフォルトの名無しさん
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:デフォルトの名無しさん
02/07/29 10:36
gperfつかっとけ

154:デフォルトの名無しさん
02/07/29 12:13
2本木ってなに?

155:ろうひ男爵
02/07/29 12:22
すまん、2分木の事。
あと、90秒かかったのが5秒になったの間違えです。

156:デフォルトの名無しさん
02/07/30 01:44
2本木なんて初めて聞いたよ

157:ろうひ男爵
02/07/30 04:41
>>156
すまんのう

158:デフォルトの名無しさん
02/07/30 04:48
>>157
ろうひ男爵、いいかんじのひとだね。

159:デフォルトの名無しさん
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:デフォルトの名無しさん
02/07/30 23:56
>>159
まだコードやアルゴリズムを考える段階にないと思われ。

URLリンク(cspt1.ict.ru.ac.za)

ここにコンパイラ作りの基礎を書いた本一冊文のドキュメントがある。
LL文法の範囲内しか扱ってないけれど最初に手を着けるにはこれぐらいでいい。

161:棄教者 ◆witdLTi2
02/07/31 08:42
>>159
Yaccを使いこなせるようになった方が手っ取り早いです。
yacc/lex プログラムジェネレータ on UNIX
五月女健治著
テクノプレス
ISBN4-924998-14-1

162:デフォルトの名無しさん
02/07/31 13:58
>>159
自前で作らなきゃいやなの?

163:159
02/07/31 14:39
>>160
もっと基礎や概念みにつけるべきということですね。
英語はかなり苦手ですが、いい機会なので昼休み等に読んでいこうと思います。

>>161
昨日Yacc/Lex関係の本を探してみたのですが、
Flaxの本しかありませんでした(買いませんでした)
教えていただいた本を探してみようと思います。
(そういえばネットで買えるとこがありましたよね)

>>162
仕事には全く関係ないというか、完全に興味本位です。
あとオブジェクト指向を勉強してたとき感じたのですが、
自分の知らない技術理解すると、今までやってきたことを
違った視点で見れたりするじゃないですか。
そういうのも狙ってます。
(再起下降構文解析とかみててビビビときましたね)

164:デフォルトの名無しさん
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:デフォルトの名無しさん
02/07/31 20:03
>>165
実際にLR表作ってみたら?

167:デフォルトの名無しさん
02/07/31 20:07
>>166
できてるっぽいんですが、goto表をここに貼ってみればいいですか?

168:デフォルトの名無しさん
02/07/31 21:22
貼っていい?

169:デフォルトの名無しさん
02/08/02 00:48
イっていい?

170:高速化
02/08/07 02:49
インテルのコンパイラでコンパイルするだけで高速化しました。
無料体験版があります。
URLリンク(www.xlsoft.com)

171:デフォルトの名無しさん
02/08/07 03:02
ハッシュはどこら辺を参考にすればいいんでしょうかねぇ。

172:デフォルトの名無しさん
02/08/15 00:22
『コンパイラ構成法』を読みながらlex/yaccを勉強しているのですが、
URLリンク(216.239.51.100)
でダウンロード出来るであろうソースコードが相手先サーバーが動いていないか何かで、ダウンロード出来ません。

正誤表はグーグルキャッシュでゲットできたのですが。

ソースコードお持ちの方、どこかのアップローダに上げていただけませんか?


173:棄教者 ◆witdLTi2
02/08/15 15:30
>>172
いま、鯖が㌧㌦みたいですね。
このまえはぼくもダウソできたので。
しばらくしたらもう一度渡来してみたらどうよ。

この本は親切で分かりやすい本です。おすすめです。
わからないところや面白い本はドラゴンブックで補充するとさらに良いでしょう。

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
02/08/27 17:42
Macは知らないけど、Windowsならyaccあるよ
URLリンク(hp.vector.co.jp)

179:デフォルトの名無しさん
02/08/27 17:49
JavaCCで、構文と構文の隙間を埋めるような
柔軟な構文を定義する方法を教えてください。
Perlでいうところの (.*?) みたいなものが欲しいんです。お願いします。

180:デフォルトの名無しさん
02/08/27 18:07
URLリンク(www.tokumaru.org)

ここのコンパイラソースコードは参考にはならない?

181:ろうひ男爵
02/08/27 18:37
>>177
でしたら、
コンパイラ構成法 原田 賢一 共立出版株式会社 ISBN: 4320029224 6,500円
が一番分かりやすいのですが、yaccとlexが必要です。

コンパイラの仕組み 情報科学こんせぷつ〈8〉 朝倉書店 ; ISBN: 4254127081
も物量的に少ないので読みやすいですが、消化不良のところが出てきます。
しかし、1日から一週間で読めると思います。

あと、インタープリタとコンパイラの違いは大きくないので、
ここのスレッドに色々質問すると良いかもしれません。

どちらにしろ、コンパイラ関連の本は難解な物が多く、
いろいろなアルゴリズムを理解していることが前提となったりするので、
軽くアルゴリズムの本を読んでおいた方がためになりますよ。

アルゴリズムを1冊ですますには、以下の本が良いと思います。
定本Cプログラマのためのアルゴリズムとデータ構造 近藤嘉雪 技術評論社

簡単なアルゴリズムの本は
C言語アルゴリズム+徹底入門 柏原正三 技術評論社
が読みやすいです。

182:デフォルトの名無しさん
02/08/27 18:40
金出す前にこれでも読んどけ。

URLリンク(www.hayalab.cs.ritsumei.ac.jp)

183:Aoki
02/08/27 19:12
実行速度が速いSmalltalkを実装するための技法をいろいろ教えて下さい。

184:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/27 20:46
<ALL:~[]*>
すみませんこっちでした。

188:184
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:デフォルトの名無しさん
02/08/28 09:24
最近のflexはスレッドセーフなCコードを吐くようになったのか。
%option reentrant


192:デフォルトの名無しさん
02/08/28 10:06
>>182のリンクはいいリンクだ

193:デフォルトの名無しさん
02/08/28 10:13
>>190
パスカルはLL(1)じゃないの?

194:デフォルトの名無しさん
02/08/28 10:58
PascalはLL(1)でもパースできるように設計されているだけであって、
コンパイラがどうしているかは別。

195:棄教者 ◆witdLTi2
02/08/28 13:04
>>182のリンク先にあるコンパイラのソースコードの解説、
これってWEBを使って吐き出されたのかなぁ。

スレとは関係ないのでsage
そういえば TeX とか WEB とか Knuth なスレってあったっけ?

196:デフォルトの名無しさん
02/08/28 13:41
Texスレはなぜかビジネスソフト板で見たような気がする。
Knuthスレはないんじゃないかな?

>>182のリンク先にある
URLリンク(www.hayalab.cs.ritsumei.ac.jp)
の元のコードってどこにあるの?ないぞ

197:デフォルトの名無しさん
02/08/28 16:32
knuthが作ったWEB言語って何?気になるんだけど

198:デフォルトの名無しさん
02/08/28 22:53
>>197
Knuthが提唱した文芸的プログラミングの実装、かな?
ドキュメントの中にソースコードを埋め込む形を取ることで、ソースとドキュメントの
間の不整合や、ドキュメント無きコーディングを避けるっていうものらしい。
コンパイルのためにはドキュメントの中からソースを抜き出してコンパイラに渡す
プログラムが必要になる。
で、Knuth自身が作った、TeXドキュメントからPascalプログラムを抜き出してコンパイルする
システムがWEBシステムの筈。

詳しくは
URLリンク(www.google.com)
でも見れ。

199:デフォルトの名無しさん
02/08/28 22:54
>>195
TeX総合スレ@数学板
スレリンク(math板)

200:棄教者 ◆witdLTi2
02/09/02 13:04
>>111
原田本を今読んでいるところですが、気になった箇所があるので皆さんにお伺いします。
p.164下から11行目
> $p_m$ にアドレス $m+n$ の領域を割り付ける.
とあるのは
> $v_m$ にアドレス $m+n$ の領域を割り付ける.
ではないでしょうか。
ちなみに正誤表
URLリンク(www.hara.cs.keio.ac.jp)
で確認したところ、掲載されていませんでした。
いきなり原田先生にメールして自分が間違っていたら恥ずかしいので、
2CHのハッカーの皆さんに確認してからメールをしようと思います。

201:棄教者 ◆witdLTi2
02/09/02 13:04
テユーカ200get

202:棄教者 ◆witdLTi2
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:デフォルトの名無しさん
02/09/02 16:33
ドイツ語綴り->Nauer
英語綴り->Naur
だったと思う。

204:棄教者 ◆witdLTi2
02/09/02 17:15
グーグルすると
backus naur form で日本語限定だと213件, 言語非限定だと約20700件ヒット。
backus nauer form で日本語限定だと9件, 言語非限定だと253件ヒット。
おまけに「スペリング修正候補 backus <b>naur</b> form」として修正を勧告される。

205:棄教者 ◆witdLTi2
02/09/02 17:16
×backus naur form で日本語限定だと213件
○backus naur form で日本語限定だと215件

206:デフォルトの名無しさん
02/09/03 21:12
インタープリタの仮想機械に興味を持ち、調べています。

調べてみた JVM、CRI、Python はいずれもスタックマシンのようでしたが、レ
ジスタマシンと比較して何かメリットがあるのでしょうか。

207:デフォルトの名無しさん
02/09/03 22:29
Forthハッカーの伝統。
というのは半分冗談だけど、中間コードが簡単/短くできるからじゃないんですか。
コンパイラも作りやすいし。

208:デフォルトの名無しさん
02/09/04 00:53
詳しくは知らんけど、インタープリタの仮想機械では、
レジスタのアクセスがメモリをアクセスするのと同じ。
パイプラインとかハードウェアで実装する場合の利点が
いかせられないからだと思う。

209:
02/09/04 02:05
>>206
仮想マシンで最もコストが高いのが、コードのフェッチとデコード。
スタックマシンなら、コードも短いしオペランドも要らない。

210:デフォルトの名無しさん
02/09/04 11:34
>>207-209
ありがとうございました。

まとめると、ネイティブコードまでコンパイルするのでなければ、レジスタマ
シンでも結局はメモリへのアクセスを行うことになるので、スタックマシンに
対する利点はなく、むしろコードが短くなる分だけスタックマシンの方が速度
的に有利、というところですかね。

211:ろうひ男爵
02/09/04 12:20
>>210
たしかに、
ネイティブコードへ最適化する場合、レジスタマシンの方が有利ですよね。
広域レジスタとローカルレジスタを割り当てたりした方が最適化しやすいですからね。

一方、インタプリタの場合、おっしゃるとおり
レジスタマシンと言っても結局メモリアクセスされるので、
スタックマシンに対するメリットはないですね。
それだったら、簡単に設計でき、
なおかつコードが短くなるスタックマシンの方が有利でしょう。

自分的には出力されたコードがレジスタマシンの方が読みやすいので、
レジスタマシンを使ってます。(インタプリタですが)


212:デフォルトの名無しさん
02/09/04 14:39
つーかJITコンパイル等でチューニングを詰めていくと
結局どっちも速度的に大差ないという話。


213:デフォルトの名無しさん
02/09/04 21:04
スタックの一部をレジスタにマップする最適化は比較的簡単だから
ネイティブコードでも結構速くなる。
ネイティブコードのみをがりがりチューニングしたければ、中間コードは
3つ組や4つ組がわかりやすいかも。


214:デフォルトの名無しさん
02/09/05 10:00
インタープリタの初歩なら、石田晴久訳のUNIXプログラミング環境の
後半のhocを一通りやってみるのが近道じゃないかな。

215:デフォルトの名無しさん
02/09/05 14:22
スタックマシンでのコンパイルがよくわからない~

216:デフォルトの名無しさん
02/09/06 01:30
ちとスレ違いですが、JITの勉強にお勧めの良書教えてくれませんか?

217:デフォルトの名無しさん
02/09/06 02:16
>>216
詳しくはないけど、良書どうこういうより、
JITについて書かれている本を探すの自体が大変だと思う。
一応、参考URLを貼り付けておく。
shuJIT
URLリンク(www.shudo.net)

218:デフォルトの名無しさん
02/09/07 15:01
コンパイラの理論と実現ではC--という小さなCの処理系を作ってるけど
それのソースコードがわけわからんとです。
構文木の構造体が
struct TREE{
int val;
struct TREE *left;
struct TREE *right;
}
で、
maketree(int a,TREE *b,TREE *c)という関数で構文木を作るんですが、
あるところでmaketree関数のパラメータのbにint型を渡してるんです。
型が合わないからエラーがでると思うのですが、なにか僕が大きな間違いをしてるんでしょうか

219:デフォルトの名無しさん
02/09/07 19:27
>>218
sizeof(int) == sizeof(void*) を仮定していて、
int の即値を格納しようとしているとか?


220:218
02/09/08 11:15
>>219
構文木関係の部分だけ抜き出してコンパイルしてみると、
BCCではエラーがでました(TREE *型にint型は渡せない。と言っておられました)、
clは警告文だけでした。それにちゃんと動きました。
うーむ、やはり即値を渡しているのか。。。



221:デフォルトの名無しさん
02/09/09 17:06
>>218
宣言してない関数の戻り値をそのまま渡してるとか?
それかNULL代わりに0渡してるんじゃない?

こんなんだったらどっちでも昔の名残だね。

222:218
02/09/09 21:26
>>221
なにしろANSIで定められる前のCなので古めかしいところは多いです
たとえば、
func(a,b){
int a;
int b;
}
とか。。。
それと、bには字句解析で得たリテラルを渡してるようです
(TREE *)にキャストしてやることで問題は回避できました。


223:デフォルトの名無しさん
02/09/11 23:39
>>222
それを書くなら、こうだろう。

func(a, b)
  int a;
  int b;
{
  ...
}

> それと、bには字句解析で得たリテラルを渡してるようです
正攻法としては union 使うように書き換えちゃえ、かな。

224:デフォルトの名無しさん
02/09/21 12:17
LALR(K)パーサジェネレータのお勧めってありますか?
googleでlalr(k)てしたところいくつか見つかったのですが。


225:デフォルトの名無しさん
02/09/21 13:28
>>224
yacc以外でってこと?
といっても他はyaccの他言語用ぐらいしかしらないけど。

226:デフォルトの名無しさん
02/09/21 14:09
>>225
いやそうでなく k >= 2 という意味でお願いします。

227:デフォルトの名無しさん
02/09/22 19:47
URLリンク(www.cminusminus.org)
これはよいです。

228:デフォルトの名無しさん
02/09/25 09:46
>>227
面白そうですね
簡単に説明してもらえませんか?


229:
02/09/25 10:05
>>228
自分で読む気はないのか?

230:デフォルトの名無しさん
02/09/25 11:26
Cより低級な、簡単なアセンブラとしてのC--ってことでは?

231:デフォルトの名無しさん
02/09/25 21:44
氷魚さんの作ったやつ?

232:デフォルトの名無しさん
02/09/25 22:01
>>231
だれそれ?電波固定?

233:デフォルトの名無しさん
02/09/25 22:09
コンパイラとかじゃなく、ファイルを読む道具としてyacc&lexを
使っているのですが、入力した数値で要素数が定義されてるよう
な場合どうしたらよいでしょうか?

要素数 - 要素...
4 4 4 2 2
5 0 1 0 2 3
2 0 3

という形式です。

int_array
: /* empty */
| integer
| int_array integer
;

では、全部一気に読んでしまうので・・・。(低レベルでスマン・・・。)

234:デフォルトの名無しさん
02/09/26 03:13
>>233
int_array
: /* empty */
| one integer
| two integer integer
| three integer integer integer
(略)
;
とするとか…



















イヤスギ

235:デフォルトの名無しさん
02/09/26 03:43
int_list: /* カラ */
| integer
| int_list integer
;
int_array: integer int_list
;

ダメか?


236:棄教者 ◆KIKYO7cg
02/09/26 08:48
-----------------yacc------------
%token NUM
%%
lines : /* empty */
| line lines
;
line : index elements '\n' ;
index : number ;
elements : /* empty */
| number elements
;
number : NUM ;
%%
------------------lex-------------
[0-9]+ { yylval = atoi( yytext ); return NUM; }
[ \t] { /* 空白は捨てる */ }

でどうよ。

237:233
02/09/27 01:01
レス下さった方々ありがとうございます。

>>234
ちょっと無理です・・・。^^;

>>235
最初の要素は良いのですが残りはすべてint_list integerに一致して
しまうようです。

>>236
233の例では行けると思いますが、実はこの形式を出力するツールは
一つではなくて、それらの間で改行の位置というのは統一されていな
いのです。というわけで、できれば改行フリーでなんとかしたいと
思ってるのですが・・・。

うーん、そもそも読み込んだ値を利用したり、繰り返しの回数を制限
するのはyaccで定義できる構文の概念を逸脱しているんでしょうか・
・・。 今回はyaccの使用はやめてlexだけに留めるべきかもしれませ
んね。(その辺ご存知の方いましたら後学のため教えていただきたい
です。)

238:デフォルトの名無しさん
02/09/27 01:04
>>237
atoiでいいじゃん。
「何回繰り返す」とかはセマンティクスの部類に入るから、
yacc使うのはお門違い。

239:デフォルトの名無しさん
02/09/27 01:09
>>237
ドラゴンブックにはそういうの(個数の検査とか)は構文では解決でけん
と書いてあった気がします。

240:デフォルトの名無しさん
02/09/27 01:19
>>233
正攻法は単に数値のリストとして、リストに含まれる文字コードチェックに
利用を限ってしまうのがいいんじゃないかな?
考えてみるのは面白そうだけど、
仕事となると、むきになってやっても費用対効果がなさそうだし・・・


241:デフォルトの名無しさん
02/09/27 22:01
ギコBasic新しく作り直してみた

URLリンク(page.freett.com)

242:241
02/10/01 09:30
まだギコBasicのスレが残ってるのに気づかなかった・・・スマソ

243:デフォルトの名無しさん
02/10/17 18:25
ANTLRの使い方を日本語で解説してあるウェブページありませんか?

244:デフォルトの名無しさん
02/10/19 07:54
ガイツュシ

245:デフォルトの名無しさん
02/10/19 21:12
STLスレから出張。
これ URLリンク(spirit.sourceforge.net) どうなん?



246:デフォルトの名無しさん
02/10/19 23:06
>>245
すげー。びびった。久々に驚嘆したハックだ。

247:デフォルトの名無しさん
02/11/05 22:08
ふふ

248:デフォルトの名無しさん
02/11/07 02:31
以下のような構文を作ります。データを定義しているフォーマットです。xmlとかcvsみたいな物です。
ここから木の様に情報を取り出したいと思ったのですが、上手くパーサを作れません。
tokenizerは簡単に出来るのですが、どうすれば良いですか。rubyでやってます。

object hoge
 caption='hogehoge'
 val=0
 object fuga
  caption='fugafuga'
  object aaa
   caption='aaa'
  end
  object bbb
   caption='bbb'
  end
  object ccc
   caption='ccc'
  end
 end
end

249:ねこま
02/11/07 02:39
インデントレベルだけで解釈できれば簡単そう


250:デフォルトの名無しさん
02/11/07 02:46
トラバースと逆の手順。
各ノードは子供と親のリンクを持つ。

<でノードを生成、現在処理中のノードへの参照を
親への参照として新規ノードへ設定。
その後で親に子として新規ノードへの参照を設定。
処理中のノードの参照として新規ノードを指させる。

>でシングルタグか開始タグか終了タグかを判断し
親に戻るかどうかを決める。
戻る時には処理中のノードの参照として
親を指させる。

こっちにドキュメントを置いてます。
サンプルソースはC++。
ソース玉は整理してないんで乱雑にメモテキストとか
テストデータが散らかっててちょっと気が引ける。
URLリンク(sourceforge.jp)
こういうドキュメントが欲しいとか
掲示板に投げておけばそのうち対処するかも。

251:デフォルトの名無しさん
02/11/07 02:55
>>248
rubyじゃできないな。

252:デフォルトの名無しさん
02/11/07 03:22
手抜き実装で考え方だけ。言語も適当。

loop
  token w = Tokenizer.next();

  if w == 'object' then
    currNode := currNode.pushNewNode( Tokenizer.next());
    continue;
  end if

  if w == 'end' then
    currNode := currNode.parent();
    if currNode is null then break;
    continue;
  end if

  Tokenizer.skip();
  currNode.pushNamedValue( w, Tokenizer.next());
end loop

Node というクラスはツリーのノードを表す。
各ノードは子ノードとして、object か namedValue を持つことができる。
pushNewNode は object 子ノードとして追加して、その新規子ノードを返す。
引数はノードの名前を表す。
pushNamedValue は namedValue 子ノードとして追加する。戻り値はなし。
第一引数は値の名前、第二引数は値の中身。

253:デフォルトの名無しさん
02/11/07 04:33
今ちょっと色々調べてたんですけど、色々とヒント有り難うございます。
一週間前にはかけらすらないような事趣味でやり始めて分かったんですが構造を持つ
ファイルフォーマットってコンパイラ作成のような視点が必要なんですね。
さすがにインデントでは無理だってすぐ分かりましたが、xmlに近いことは
気づきませんでした。そう言えばxmlと似てますね。

内部データ構造を持つファイルフォーマットのパーサーの解説の一般的なドキュメント
希望>250

254:デフォルトの名無しさん
02/11/07 07:52
schemeで書くとこんな感じなんだが

(define (hoge-read s)
 (let loop ((x s) (stack '()))
  (if (pair? x)
   (case (car x)
    ((object)
     (loop (cddr x) (cons (list (cadr x) (car x)) stack)))
    ((end)
     (if (null? stack)
      (error "Syntax-error - Corresponding 'object' is required :"
       s))
     (if (pair? (cdr stack))
      (loop (cdr x)
       (cons
        (cons (reverse (car stack)) (cadr stack))
        (cddr stack)))
      (loop (cdr x) (reverse (car stack)))))
    (else
     (loop (cdddr x)
      (cons
       (cons (list (car x) (caddr x)) (car stack))
       (cdr stack)))))
   (if (and (pair? stack) (pair? (car stack)))
    (error "Syntax-error - 'end' is required :" s)
    stack))))

255:デフォルトの名無しさん
02/11/07 07:52
;テスト
(define hoge-read-test-data '(
object hoge
 caption = "hogehoge"
 val = 0
 object fuga
  caption = "fugafuga"
  object aaa
   caption = "aaa"
  end
  object bbb
   caption = "bbb"
  end
  object ccc
   caption = "ccc"
  end
 end
end
))

(hoge-read read-tag-test-data)
=>
(object
 hoge
 (caption "hogehoge")
 (val 0)
 (object
  fuga
  (caption "fugafuga")
  (object aaa (caption "aaa"))
  (object bbb (caption "bbb"))
  (object ccc (caption "ccc"))))

256:デフォルトの名無しさん
02/11/07 08:20
(中身的に変んないけど)Cに変換すると
scmobj_t hoge_read(scmobj_t s) {
 scmobj_t x = s;
 scmobj_t stack = nil;
 tail_recursive_loop:
 if (pairp(x)) {
  if (car(x) == make_symbol("object")) {
   stack = cons(list2(cadr(x),car(x)),stack);
   x = cddr(x);
   goto tail_recursive_loop;
  } else if (car(x) == make_symbol("end")) {
   if (nullp(stack))
    return error("Syntax-error - Corresponding 'object' is required :",s);
   if (pairp(cdr(stack))) {
    x = cdr(x);
    stack = cons(cons(reverse(car(stack)),cadr(stack)),cddr(stack));
    goto tail_recursive_loop;
   } else {
    x = cdr(x);
    stack = reverse(car(stack));
    goto tail_recursive_loop;
   }
  } else {
   stack = cons(cons(list2(car(x),caddr(x)),car(stack)),cdr(stack));
   x = cdddr(x);
   goto tail_recursive_loop;
  }
 } else if (pairp(stack) && pairp(car(stack)))
  return error("Syntax-error - 'end' is required :",s);
 return stack;
}


257:デフォルトの名無しさん
02/11/14 06:59
>>245
Expression Templateをはじめ各種のテンプレート・メタ・プログラミングは
知ってたけどPaser Generatorにまで行きつくとは。 
 カ コ イ イ ! !
テンプレートらしく解析対象の列の要素型がパラメタ指定できるのもカコイイ!
(char, w_charに始まってユーザー作成のクラスまで)
字句解析器も含んでるしね。

当方Java(正確にはバイトコード)のPartial Evaluationを実装中なのだが、
Javaに演算子多重定義が導入されていれば、
合わせ技で同じようなことが狙えたのになァ。惜しい。
(メソッド呼び出し式で書けば良いわけだが、カッコ良さが大いに減る。)

258:デフォルトの名無しさん
02/11/17 16:17
>>257
でも、あんまり真剣な用途には使えないよね。

実行時にパーザ生成するんだったら、文字列で文法与えても良いな。

259:祐一ゴン
02/11/17 19:39
やぁ、ぼく押金さん(*´∀`*)ノ
中学の時からポカリの粉を麻薬と思って鼻から吸ってたけどヽ(`Д´)ノ ウワァァン!!全然トリップできないや!最近初めてその事実を知ったよ
今部屋をテラフォーミングしたら鼠の干からびた死体が出てきたよ、あまり旨くなかったよ


260:デフォルトの名無しさん
02/11/18 04:16
パスカルとベーシックってどっちが作りやすいですか?

261::-)
02/11/18 07:12
pascal→delfy
ベーシック→HSP

HSPはタダの開発環境です。デルフィは10万円くらい?

262:デフォルトの名無しさん
02/11/18 11:55
たとえば、関数呼び出し
a(b(c(d())));
ってのをなんらかの中間コードにしてあって、
これを1パスでコード生成できるの?
(最適化はどうでもいい)

a();
のコード生成はできるけど、
a(b());
のようにネストするとできなくなって困ってます。

263:デフォルトの名無しさん
02/11/18 12:01
>>262
ちょっとは考えろ
つーか、お前の言う中間コードって何のためにあるのさ

264:デフォルトの名無しさん
02/11/18 13:15
>>262
> ってのをなんらかの中間コードにしてあって、
> これを1パスでコード生成できるの?

「これ」というのが「中間コード」を指しているのなら、
どのような「中間コード」なのか示してもらわないと。

) を検出したタイミングでコード生成すりゃいいだけの
話なんだけど。

265:デフォルトの名無しさん
02/11/18 17:40
バイトコードバイトコード!

266:デフォルトの名無しさん
02/11/19 00:50
>>261
デルファイじゃないのか?Delphi
嘘教えるなよ

267:デフォルトの名無しさん
02/11/19 01:10
>>261はどうみても無知だろ

268:デフォルトの名無しさん
02/11/19 03:22
>>260はコンパイラ作るならbasicかpascalどっちを作ったほうがいいかって
いってるんだろ。どっちだろう、俺はベーシック知らないからなんとも
いえん。

269:デフォルトの名無しさん
02/11/19 03:26
コンパイラならPascalだろうが、
インタプリタならBasicの方が楽だろう。
昔のBasicインタプリタは4KBくらいだった。

270:デフォルトの名無しさん
02/11/19 03:59
ベーシックインタプリタのコードってないの?

271:デフォルトの名無しさん
02/11/19 05:11
>>271
ほれ
URLリンク(homepage2.nifty.com)

272:デフォルトの名無しさん
02/11/19 11:09
>>260-270
…この21世紀になんでその2択に拘るんだw。

273:257
02/11/19 11:13
>>258
使えないかねぇ…。この辺の技術には期待したいトコロなんだけどなぁ。
私も使ってみたわけではないので大丈夫と言い切れるもんではないんだが。

実行時というか、コンパイル時にテンプレートの展開動作を利用して
パーザが作られるようなんだが。

274:デフォルトの名無しさん
02/11/21 13:10
>>270
ギコBASICは参考にならないですか?

275:デフォルトの名無しさん
02/11/21 14:05
この辺は?
URLリンク(member.nifty.ne.jp)

276:デフォルトの名無しさん
02/12/03 17:38
bisonが吐き出したコードってなんでVC++でコンパイル通らないんだ?
激しく鬱…

bison++/flex++に乗り換えるかのぉ。ドキュメント少なすぎだが・・・

277:デフォルトの名無しさん
02/12/03 18:48
>276
> bisonが吐き出したコードってなんでVC++でコンパイル通らないんだ?
gcc 使え、というお達しかと……。ところで byacc とか kmyacc はどう?

278:276
02/12/04 14:34
正確にはC++ソースとしてコンパイルしようとすると、VC++には入ってない(おそらくPOSIX互換の?)インクルードファイルを要求されてコンパイルできません。
まぁ、別にオブジェクト指向な解析器が作りたいというわけではなく、ただアクション書くのにクラスとか使いたいだけなんだが…

何かいい方法あったらキボンヌ!というか、bison++/flex++の日本語ドキュメントなんか激しくほすぃかも

279:デフォルトの名無しさん
02/12/04 14:47
>278
include 外せばいいんじゃないの?

280:デフォルトの名無しさん
02/12/04 19:38
>279
それだと毎回 *.y からコード生成するたびに書き換えが必要になるから、
ダミーのヘッダファイルをでっち上げるに一票。

っつか、どうしても再入可能にしたいとかで bison の機能が必須でなければ、
bison 以外の yacc 互換処理系を試す方が幸せかも知れんが。

281:278
02/12/05 01:17
>>280
bison以外ならC++ソースとしてビルドできるんですか?

今日はbison++/flex++試しマスタ。今度はVC++だとエラー出まくって全然ビルドできない罠。

byaccとkmyacc試してみるかなぁ。

282:デフォルトの名無しさん
02/12/05 08:55
yaccの使い方教えろや

283:bloom
02/12/05 09:10

URLリンク(www.agemasukudasai.com)

284:デフォルトの名無しさん
02/12/05 09:23
coco/r使えよ

285:デフォルトの名無しさん
02/12/05 12:01
coco/rって何か教えろや

286:デフォルトの名無しさん
02/12/05 15:39
うえーんコンパイラフレームワークキボン( ●д●)

287:デフォルトの名無しさん
02/12/05 16:53
>>286
lex + yacc + RTL(gcc)じゃ駄目か?

288:デフォルトの名無しさん
02/12/05 16:56
yaccかbisonについて優しく解説してるサイトはありませんか?
または本でも。

289:デフォルトの名無しさん
02/12/05 18:16
ちょっと聞いていいですか?
このスレ、結構人が訪れているみたいなんだけれど、
実際にコンパイラレベル(変な言い方だけど)のものを作ってる、もしくは作った人っています?
自分はスクリプトぐらいなら、何とかいけそうなんだけれど、
コンパイラまでくるとかなり大変じゃないですか?

290:デフォルトの名無しさん
02/12/05 19:34
仮想的なスタックマシンとかのコンパイラなら
作ってる人は沢山いると思うよ。

291:デフォルトの名無しさん
02/12/05 19:40
>288
オライリーの lex & yacc 本

>289
アセンブラを出力させるなら、そんなに面倒じゃない。実行できるバイナリを出力
しようと思うと、山のような詳細に追われて力尽きる。

292:デフォルトの名無しさん
02/12/05 20:17
インストラクションコードへの変換が面倒だなあ。
テーブル化するのが。

293:デフォルトの名無しさん
02/12/06 07:28
変な聞き方してしまいました。
コンパイラといっても仮想マシンコードに変換するスクリプトコンパイラだってあるし。
ネエィテブなアセンブルや直接、実行形式を吐くコンパイラのことを聞いたつもりでした。

294:ろうひ男爵
02/12/13 20:28
>>289
自分は構造化BASICで186のDOSの.COMを出力する物を作ったよ。
今は暇を見つけて簡易的なC言語コンパイラを作ってるよ

295:デフォルトの名無しさん
02/12/13 20:34
だれか僕のためにCコンパイラのソースみせてください。
Cじゃなくてもパスカルでもベーシックでもいいっす。
( ̄人 ̄)オ・ネ・カ・゛イ♪ヽ(* ̄〓 ̄*)ノ^☆ブチュゥゥ♪

296:デフォルトの名無しさん
02/12/13 20:41
ギャーーーーー

297:デフォルトの名無しさん
02/12/13 20:56
>>295
URLリンク(gcc.gnu.org)

298:デフォルトの名無しさん
02/12/13 21:15
>>295
ほれ

#include <stdio.h>
main()
{
printf("逝ってよし");
}


299:デフォルトの名無しさん
02/12/13 21:33
ウワァァァァァァヽ(`Д´)ノァァァァァァン!

300:ろうひ男爵
02/12/14 17:55
>>295
BASICで、

[ラベル:] if 比較式 goto ラベル
[ラベル:] print "メッセージ"
[ラベル:] 代入式

でよかったら、構文解析もほとんどいらないし簡単じゃない?
改行で行末にして、変数の頭にRをつけてR10とかすれば、
悩むところはないと思うよ。

パスカルだとラベルを読み込むときに細工すればLL(1)だよね、
そんなに難しくないはずだよ。
Cにしろパスカルにしろなにがしらの本を読んだ方が良いんじゃない?

言語はどのレベルの物を作ろうとしてるの?
それと、実行環境はスクリプトで中間言語に落としての実行環境?

301:デフォルトの名無しさん
02/12/14 19:56
>295
どうせ渡されたところで読めない、に 1 票。

言語処理系を作るのが初めてなら、とりあえず「UNIX プログラミング環境」でも
買ってきて hoc の実装追ってみれば?

302:デフォルトの名無しさん
02/12/14 20:38
つーかコンパイラのソースが見たいんならgccなりOpenWatcomなりがあるわけで。
それぐらい自分で探せヴォケつー。

303:デフォルトの名無しさん
02/12/14 21:05
bccが一番読みやすいなり

304:デフォルトの名無しさん
02/12/14 21:24
>302
いきなり gcc は厳しすぎ。

10年前だと「アルゴリズム+データ構造=プログラム」読めというところだが、
さすがに古いよな…。

305:デフォルトの名無しさん
02/12/14 22:29
URLリンク(www.amazon.co.jp)
はどうよ? インタープリタだけど。

306:デフォルトの名無しさん
02/12/14 22:31
たけーんだよバカ

307:デフォルトの名無しさん
02/12/15 00:57
専門書の類は、どれもそんなもんだ。諦めれ。

308:デフォルトの名無しさん
02/12/15 07:18
一応タダで読めるけどな。
URLリンク(i.loveruby.net)

309:ろうひ男爵
02/12/20 04:02
Cマガでコンパイラのことをやってますね。
演算子順位法とLL(1)をざらっと、LALRの概説です。
計12ページぐらいだったので、ここにいる方には物足りませんが、
読みやすかったので、人に聞かれた場合にはイイかも。

310:デフォルトの名無しさん
02/12/20 04:16
スレリンク(lobby板)
これよんでみれ!

311:デフォルトの名無しさん
02/12/20 04:44
えっ、bisonで生成したコードってVC++じゃ、
コンパイルできないのですか?
じゃあ、かわりにVC++で通るyacc互換でお勧めってあります?
仕事でも使うかもしれないので商用OKだとありがたいのですが。

312:デフォルトの名無しさん
02/12/20 04:56
GC(ガベコレ)についてちゃんと勉強してみたいのですが、
何かいい書籍はありますか?今は少しづつですが、gccに含まれている
Boehmのソースで勉強してますがなかなか思うように進みません。

VMにそのようなものが書かれているものがあればそれでもOKです。
よろしくお願いします。

313:デフォルトの名無しさん
02/12/20 06:48
>>312
とりあえず、>>305に紹介されてる本読むとか。

314:デフォルトの名無しさん
02/12/20 09:45
>>309
概説でしかないし、yaccはちょこっとだけしか載ってない。
作るための特集じゃなくて、基礎知識をお勉強するための記事だった。
という印象。

315:デフォルトの名無しさん
02/12/20 09:47
>>311
VCでコンパイルできなかったっけ?
まぁいいや。

URLリンク(www.kohsuke.org)
これなんかどうよ。使った事無いけど。

316:ろうひ男爵
02/12/20 13:09
>>314
さすがにあのページ数だと、1つでも掘り下げるのは難しかったみたいですね。
その中では演算子順位法が分かりやすかったと思います。

317:デフォルトの名無しさん
02/12/20 13:40
>>311
通るよ。

でもbisonで生成したコードにはGNUのテンプレートが含まれるので、商用はま
ずかったと思う。


318:デフォルトの名無しさん
02/12/20 22:12
>>312
書籍じゃないけど。
URLリンク(www.dcs.qmul.ac.uk)


319:デフォルトの名無しさん
02/12/21 01:10
>>317
出力されたコード見れば分るけど 1.24 以降は特例として GPL 適用外になってる。

320:デフォルトの名無しさん
02/12/21 08:09
>>319
あ、変わったんだ。サンクス。

321:デフォルトの名無しさん
02/12/21 18:09
bisonを使った宿題が出ているのですが、
ここでそのことについて質問してもいいでしょうか?

322:デフォルトの名無しさん
02/12/21 23:16
>>321

>yaccやlexの使い方やら言語仕様やらの話題。
だから、宿題丸投げじゃなきゃいいと思うよ。


323:デフォルトの名無しさん
02/12/22 01:11
>>321
 何か本を入手した?(購入するのも、図書館で借りるのも可。)もしまだなら、
   書名:UNIX Literacy Series Vol.12 UNIX yaccとlexの使い方
   発行所:HBJ出版局
   著者:田中正広
   ISBN:4-8337-8728-8
を入手して読んでみるといいYO!現在これ読んで某課題と格闘中(^^;
 で、そういった本を読んでから質問するのなら十分OKかと。>>322に同意

324:デフォルトの名無しさん
02/12/22 01:13
スクリプト言語でアセンブラ処理系は作れるのか?

325:デフォルトの名無しさん
02/12/22 01:28
>124
作れるよ

326:デフォルトの名無しさん
02/12/22 11:56
最近、Flex&Bisonをいじり始めました。
まだ、基本概念を勉強中なのですが、Flex&Bisonを使った「C++」用の
チュートリアルや簡単なサンプル実装などないでしょうか?
「C」での実装はいろいろあるんですが、自分はC++で実装したいの困ってます。
C++での解説も申し訳ない程度にはあるんですが、やっぱりサンプルがあると助かります。

327:デフォルトの名無しさん
02/12/22 12:04
スクリプト言語でアセンブラ処理系ってのもいみなさそうだな。
C言語をスクリプト言語として動くように作ったことはあるが。

328:デフォルトの名無しさん
02/12/22 14:09
>>327
意味あるよ

329:デフォルトの名無しさん
02/12/22 14:52
>>328
新規チップの設計用とか?w

330:デフォルトの名無しさん
02/12/22 15:38
>329
ユーザにアセンブラ処理系の機能拡張をさせる場合には、スクリプト言語を
そのまま使えるのは嬉しいかも。自前でマクロ言語作るのって手間だし、マ
クロの設計がダサいとユーザの不満もたまるし(w

ただ、往々にしてバイナリ入出力の扱いって C, C++ の方が楽なんだよね。

331:デフォルトの名無しさん
02/12/22 18:58
Cマガの特集見ました。
よしこれから面白くなるってところで、終わってました。
期待してたのにちょっと悲しい。

332:321
02/12/22 21:22
自己解決しました。
皆さん、ご迷惑をおかけしました。

333:デフォルトの名無しさん
02/12/23 00:22
URLリンク(catalog.compilertools.net)
このあたりはどうかな。


334:デフォルトの名無しさん
03/01/02 18:47
RTLでいいですか?

335:デフォルトの名無しさん
03/01/02 19:45
あははコンパイラを作るのって楽しいなぁ(´∀`)

336:デフォルトの名無しさん
03/01/02 19:48
YACC link
URLリンク(www2.dewa.or.jp)

337:デフォルトの名無しさん
03/01/04 01:51
>336
チクショー!!
まんまとだまされたぜ。

338:デフォルトの名無しさん
03/01/04 08:38
山形オートキャンパークラブ(´д`;)

339:中卒
03/01/04 14:37
ナカータ育男の本でわけわからん数式が出てきてるんですがどうにかなりませんか?

340:ろうひ男爵
03/01/04 20:02
>>339
頑張って、勉強するしかないのでは。
もしくは、より簡単な、今月のcマガの特集とか、
コンパイラの仕組み 渡邊 坦 著
とかはどう?

341:デフォルトの名無しさん
03/01/04 20:23
「モナーのコンパイラスレ出張所」ページでも作るか。
AAで語るFSAとか。ネタよろしこ。

342:名無しさん
03/01/05 10:35
>>339
その本は悪魔の本なので除霊する必要があります。早急にこちらへ
送ってください。
# 一万えんもする本なんて買えねーよ。

343:デフォルトの名無しさん
03/01/09 02:50
名スレの予感

344:デフォルトの名無しさん
03/01/09 03:32
>>53
いいんだよ。気にしないで。
まさゆきが嬉しそうだから。

286 名前:ひろゆき ?3SHRUNYAXA 投稿日:03/01/08 17:56 ID:MVMcp6tb
     ♪___
   ♪  ヽ=@=ノ¶  タイーホ
     ヽ( ・∀・)ノ   タイーホ
         (  へ)    ミンナ タイーホ
          く       タイーホ
   ♪  ___
     ♪ヽ=@=ノ ¶ タイーホ イッテヨシ
      ヽ(・∀・ )ノ  タイーホ
         (へ  )    オマエラ モウ
             >    ダメポ



345:デフォルトの名無しさん
03/01/09 04:15
ID:ZBsKvw39 (゚∀゚)アヒャヒャ
ID:fh6iaOXC (゚∀゚)アヒャヒャ

346:デフォルトの名無しさん
03/01/09 14:17
荒すな

347:デフォルトの名無しさん
03/01/09 14:21
test

348:デフォルトの名無しさん
03/01/09 14:32
自分が作るほどには2ちゃんねる掲示板は必要ないと。

まあ、遊びでしかないからね。

仕事の合間にやってるだけだろ。

349:デフォルトの名無しさん
03/01/09 17:48
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

350:デフォルトの名無しさん
03/01/09 20:46
>>200は原田先生に聞いてみた?

351:デフォルトの名無しさん
03/01/09 23:03
私はは匿名掲示板なんて無くてもいいのだが。
自分の発言に責任を持つのは当然だと思います。

352:デフォルトの名無しさん
03/01/10 00:56
これからは、心を入れ替えて良い子にします。
よろしくお願いします。

353:デフォルトの名無しさん
03/01/10 09:36
>>62
だれの目から見てもどうかではなく、裁判所が判断してどうかってこと
なんだよね。
だから、「名誉を毀損した」ってことが確定するのは、判決した瞬間なのよ、、、


354:デフォルトの名無しさん
03/01/10 09:57
>>62
だれの目から見てもどうかではなく、裁判所が判断してどうかってこと
なんだよね。
だから、「名誉を毀損した」ってことが確定するのは、判決した瞬間なのよ、、、


355:デフォルトの名無しさん
03/01/10 10:15
>某○○
こいつって・・・

356:デフォルトの名無しさん
03/01/10 10:48
ひろゆきの家に一人千円位寄付って事で送りつけるって手も有る!
遊び場作ってやって遊んでる奴の為に訴えられて金払わなきゃいけ
なくなったら止めたくもなる罠!

357:デフォルトの名無しさん
03/01/10 11:30
☆★☆
|・∀・)♪  おあよーおあよー!
|⊂ ノ
|` J    朝だす、みんな起きるだす!!

358:デフォルトの名無しさん
03/01/10 11:58
29■■■■■■■■■■■■■■□□
28■■■■■■■■■■■■■■■■■■■■■■□□□□□□□□
27■■■■■■■■■■■■□□□□□□□□
26■■■■■■■■■■■■■■■□□□□□□□□□□□
25■■■■■■■■■■■■■■■■■■■■■■■■■■□□□□□□
24■■■■■■■■■■■■■■■■■■■■■■■■■■■□□□□□□□□□□□
23■■■■■■■■■■■■■■■■■■■■■■■■■■■■□□□□□□
22■■■■■■■■■■■■■■■■■□□□□□□□□
21■■■■■■■■■■■■■■■■■■■■■□□□□□□
20■■■■■■■■■■■■■■■■□□□□
19■■■■■■■■■■■■■■■■■■■■■■■■■□□□□□
18■■■■■■■■■■■■■■□□□□□□□
17■■■■■■■■■■■■■■■■□□□□□□□□□□
16■■■■■■■■■■■□□□□
15■■■■■■□□□□□
14■■■■■□□
12■
09■
06■


359:デフォルトの名無しさん
03/01/10 12:50
おい!おまいら!

URLリンク(dailynews.yahoo.co.jp)

のアンケートで5を選びませんか? 目標50%

360:デフォルトの名無しさん
03/01/10 15:15
だからあれほどかちゅにしろとっ…!

361:デフォルトの名無しさん
03/01/10 16:41

それじゃあ匿名掲示板の長所を否定することと同義
じゃないか。俺の言ってることに賛成といいながら
IP記録にも賛成とはどういうことだ。

362:デフォルトの名無しさん
03/01/10 23:02
質の低い書き込みを減らしたいのに
質の低い板を生かしておくのはどうしてなんでしょうか?

363:デフォルトの名無しさん
03/01/10 23:07
全ての板ってことっすか?

364:デフォルトの名無しさん
03/01/11 00:25
今回の件で言論の自由さえも脅かされることになるかも
誰も何も言えない時代が来そうな伊予柑

365:デフォルトの名無しさん
03/01/11 00:34
匿名掲示板の意味を履き違えてる人が多くて萎える。

366:デフォルトの名無しさん
03/01/11 09:57
それ、なんかの話であったな。
たしか漫画だった。なんってやつだったけなぁ

367:デフォルトの名無しさん
03/01/11 10:30
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

368:デフォルトの名無しさん
03/01/11 11:22
ぬちゃんねる

369:デフォルトの名無しさん
03/01/11 11:53
事実無根で訴えます。

370:デフォルトの名無しさん
03/01/11 13:27
昔+にもいたぞ。
バカ丸出しだなw

371:デフォルトの名無しさん
03/01/11 16:12
もう、マンコとかアナルとか書き込めなくなっちゃうね!

372:デフォルトの名無しさん
03/01/12 00:20
マスコミや官僚・政治家・企業の秘密独占
そこからの権力維持
これを打ち破るのが巨大掲示板群
2ちゃんねるだ
警察は言論統制を目的に2ch攻撃の手を緩めない
個人情報保護法
当面は反米野郎を血祭りにあげるのだろう

373:デフォルトの名無しさん
03/01/12 00:30
6億って鯖実況?

374:デフォルトの名無しさん
03/01/12 10:44
判例がいっぱい出来たら
もうメガサイトなど誰もやらない・やれないんじゃないか?

375:デフォルトの名無しさん
03/01/12 15:20
>>1-343
荒らされる前までのリンク。

376:デフォルトの名無しさん
03/01/12 21:16
URLリンク(www.sponichi.co.jp)

もう予告は止めた方が良いだろうね。

377:デフォルトの名無しさん
03/01/12 21:18
法律上の「代理」の意味はスルーしたようです(w

378:山崎渉
03/01/13 18:56
(^^)

379:山崎渉
03/01/15 18:10
(^^)

380:デフォルトの名無しさん
03/01/20 12:53
マ板にあったギコBASICスレが御亡くなりになりました。
2000年の6月からの長寿スレ なのに残念です。


381:デフォルトの名無しさん
03/01/20 14:51
native compilerを作った奴いるか?

382:デフォルトの名無しさん
03/01/20 16:21
自分の時間で作れるのはスタックマシン中間言語インタプリタへのコンパイラまでだった




383:デフォルトの名無しさん
03/01/20 16:47
Scheme で >>382 みたいなコンパイラ、VM を作るのに参考になる論文とかあっ
たら教えてください。英語か日本語のやつで。処理系のソース見てるんだけど
難しくて。

384:デフォルトの名無しさん
03/01/20 17:52
処理系のソースから何かを得られないのなら、参考文献で
概要を理解することはできても永遠に「作れない」気がする。
というわけで、何のソースを見てるのか分からないけど、
ソース解析を侮らずにしっかりやるのがよいと思われ。

385:デフォルトの名無しさん
03/01/21 20:57
>>383
理論が先か実践が先か・・・

386:デフォルトの名無しさん
03/01/21 22:29
コンパイラの本を読んでいると、コンパイラを変換系、高級言語で書かれた
ソースコードを原始言語、コンパイラによって得られたアセンブラコードを、
目的プログラムと呼ぶ、と書かれているのですが、この3者の関係って、
変換系=アセンブラ、原始言語=アセンブラコード、目的プログラム=オブジェクトコード
にも当てはまるのでしょうか?

387:デフォルトの名無しさん
03/01/21 22:37
compilerはtranslatorの一種?

388:デフォルトの名無しさん
03/01/21 23:45
アセンブラみたいに1:1対応に近いものは
コンパイラとは呼ばないんじゃないかなあ。
よく分からんけど。

389:デフォルトの名無しさん
03/01/22 01:01
HTMLのようなタグ付き文字列を解析したいんだけど、
良い方法はありますか?

例えば、
<data><name>aaaa</name><size>2000</size></data>
のような文字列からaaaと200を取り出したいんですけど・・・
よろしくお願いいたします。

390:デフォルトの名無しさん
03/01/22 01:02
2000でした。申し訳ありません。

391:デフォルトの名無しさん
03/01/22 01:08
>>389
それはXMLのDOM使った方がいいんでないの?
だとするならスレ違いじゃないかねえ。

392:デフォルトの名無しさん
03/01/22 01:11
>>389
取り出すだけなら、
1. < が現れたら > まで読み飛ばす
2. > が現れたら < までを出力とする
3. ただし、半角スペース、タブ、改行は読み飛ばす

393:デフォルトの名無しさん
03/01/22 01:21
>>391
レスサンクスです。
私XMLのDOMっていうのはよく分からないんです。
下降再帰の手法でできるのかなぁ・・・とか思ったんで。

>>392
やはりそのようにやるしかないんでしょうか・・・
ファイルが複雑になったり、ファイルの形式が変わったりすると
パーサを書くのが嫌になってきてるんで・・・

クラスが10種類ほどあるんですが、その種類によって全部構造が違うんです。
ファイルから読み込むと同時に、オブジェクトに値をぶち込みたいんですけど
やはりこういうプリミティブなやり方しかないんですね・・・
明日のことを考えるとちょっと鬱になってしまいました・・・

394:デフォルトの名無しさん
03/01/22 01:26
>399
このスレの上のほうで一度でているが
上昇解析な手法がある。
URLリンク(sourceforge.jp)
再帰だと解析終わるまで戻ってこないから、
用途が限定される。こちらは一文字単位で
戻ってくるからエディタなんかでも使えそ。

395:デフォルトの名無しさん
03/01/22 01:36
>>394
なるほど、そういうのもあるんですか・・・
でもなんか散雑な感じで、夜中の思考力ではなんだか分かりませんでした・・・
スミマセン・・・・

つまりはxmlを解析してパースツリーを構築するものですよね?


396:デフォルトの名無しさん
03/01/22 01:41
>>395
そうでふ。
プログラム見れば分かるけどすげー短くて
ボーゼンとするほど単純。

397:デフォルトの名無しさん
03/01/22 03:08
>>394
それって上向き解析なの?オートマトンでツリー作ってるように見えるんだけど。

398:デフォルトの名無しさん
03/01/22 03:24
>>397
プログラムの書き方が上向き解析のスタックを
使う要領でノードを操作してる上向き風味。
オートマトンは字句解析だけ。

399:デフォルトの名無しさん
03/01/22 23:53
いや全然上向きに見えないなー。むしろ下向き?
どんどん部分木作ってるわけでしょ。
あとオートマトンも字句解析の一つ上で使ってるように見える。
どうでもいいけど。

400:デフォルトの名無しさん
03/01/23 00:33
400getしたわけですが、
キリ番getするための良い入門書はありますか?

401:デフォルトの名無しさん
03/01/23 02:15
>>400
お前が書け。


402:デフォルトの名無しさん
03/01/23 18:55
bison/flexをVC++でMFCと併用していますが、どうもパーサ走らせると終了時に
メモリリーク起こします。ダンプされたのを見てると、どうもyytextの中身っぽい
文字列が…。これってflexの仕様でつか?
>>191の言ってるスレッドセーフ云々っていうのも気になりますた・・・

403:山崎渉
03/01/23 20:01
(^^)

404:デフォルトの名無しさん
03/01/25 00:08
Programming Language Processors in Java: Compilers and Interpreters
URLリンク(www.amazon.com)
この本読んだ人はいますか?いたら感想聞かせてください。

405:デフォルトの名無しさん
03/01/31 23:19
最適化するのにポインタって邪魔ですか?

406:デフォルトの名無しさん
03/02/01 00:58
>>405
ポインタというか aliasing が邪魔。

407:デフォルトの名無しさん
03/02/01 08:47
>>404
amazon のレビューを見る限り、非常に好意的だけど何か不満な点でも?

日本人で実際に読んだ人に背中を押してほしいと言うことですか?

408:デフォルトの名無しさん
03/02/02 01:30
>405
なんの最適化か知らないけど、追跡がしにくい。
実装する側の思考をすればわかると思うけど。
アドレスの同一判定までしてるコンパイラってあるのかな。

409:デフォルトの名無しさん
03/02/09 01:08
>408
一応、解析して指されている対象を絞り込む技法はあります。
解析コストと精度でトレードオフはありますが。

実行時のアドレスの同一性を考えるのではなく、
あるポインタ型変数についてその変数に代入するように
プログラム上でメモリ割り当てた部分の集合を計算します。
なるたけ集合が小さく絞れれば精度が高いと考えます。
解析に当たっては各手法の間で
関数呼び出しをまたいでの解析をするかしないか、
関数(メソッド)内のコントロール/データ・フローにどこまで配慮するか、
オブジェクト指向言語でメソッドの呼び出しの際のオブジェクトに配慮するか、
などの様々なオプションがあります。

こうやって得られたPoints-toグラフは関数(メソッド)やスレッドなどからの
Escapeを調べたりするのに使えます。

興味のある方はPoints-to analysisとかAlias analysisというキーワードで
ググって見てください。

410:デフォルトの名無しさん
03/02/11 08:25
Lex and YACC primer/HOWTO
URLリンク(www.linux.or.jp)
訳されている。


411:デフォルトの名無しさん
03/02/16 18:41
lex/yaccの初心者です。
lex/yacc使用してInterpreterパターンで計算機を作ろうと思ったんですが、コンパイルすらできません。
lexファイル内のcaseが不正だとか言ってきます。(他にもエラーがでてきますが…)
どこが間違ってるのでしょうか?ちなみに"Expression.h"に間違いはないはずなので省略しています。
=========================[calc_lex.l]
%{
#include "Expression.h"
#include "calc_yacc.cpp.h"
%}
%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?){
  yylval.exp=new Number(atof(yytext));
  return NUMBER;};
[ \t] ;
.  {return yytext[0];};
%%


412:411
03/02/16 18:42
続き
==========================[calc_yacc.y]
%{
#include "Expression.h"
%}
%union{
  Expression* exp;
}
%token <exp> NUMBER
%left '-' '+'
%type <exp> expression
%%
statement:
  expression {printf("= %g\n", $1->Evaluate());};
expression:
  expression '+' expression {$$=new MathExp($1, $3, MathExp::ADD);}
  | NUMBER  {$$=$1;};
%%
main(){yyparse();}

413:デフォルトの名無しさん
03/02/22 14:17
再帰下降構文解析で実験的にコンパイラを作っているのですが、
関数のオーバーロードの実現方法がわかりません。
引数だけのオーバーロードなら、再帰下降の各関数が返す関数呼出しノードがひとつに絞れそうな気もするのですが
返り値もオーバーロード可能にしようとすると、もうどうやっていいものか。
何かいい方法はありませんか?

考えている仕様:
int A();
string A();
void B(int);
があって B(A) としたら上のほうの Aが呼ばれるようにしたい。
もうひとつvoid B(string); があれば曖昧エラーを出す。

414:デフォルトの名無しさん
03/02/22 14:37
>>413
それは無理じゃないの? だってさ、
void B(int);
void B(string);
の2つが定義されたらどうするの? つまりマッチングをどっちで取るの?




415:デフォルトの名無しさん
03/02/22 14:43
>>414
413の最後の行に書きましたように、曖昧エラーを出したいと思います。
勿論実用的には、解決を行えるように、明示的に型を指定する構文が必要になるでしょうが…。

他の言語でも、F(int, double)とF(double, int)があったときにF(1,1)なんて呼ぶと曖昧エラーになるので
返り値でも曖昧エラーを出すことは多分許容範囲内だろう、と。

416:デフォルトの名無しさん
03/02/22 14:55
追記。Adaでも可能なので、無理ってことは無い筈です。

417:414
03/02/23 08:29
スマン 俺が間違ってた。
 再帰下降という事は、
  代入する変数の型
  関数の型
  先行演算子の型
 が先に判るわけだから、それをグローバルにとってスタック上に保存しながら使ったら?

 

418:413
03/02/23 16:27
>>417
ありがとう。ええと、それですと

void A(int);
void A(string);

int B(int);
string B(string);
bool B(bool);

A(B("XXX"));

で、Aの時点で、期待する型はintとstring
 Bに入ったら、boolでは無いことがわかる。しかしintとstringのどちらかは区別が付かない
 ということで両方を候補に入れ、Bもやはりintとstringを期待して、
  で定数の解析に入ったら、定数はstring
 Bに戻って、B(string)が選ばれたことが確定
Aに戻って、A(string)が選ばれたことが確定

こんなイメージ…ですよね?合ってます?

419:414
03/02/23 16:50
>>418
それは実装上厳しいんじゃない?
Aの引数を解釈してる時に、Bが出た時点で、曖昧にした方がいいと思うけどなあ

420:デフォルトの名無しさん
03/02/23 19:25
>419
え、特に問題なさそうだけど?
>Aの引数を解釈してる時に、Bが出た時点で、曖昧にした方がいいと思うけどなあ
なんでそう思ったの?


421:413
03/02/23 19:44
まず一旦、型を特定しない構文木を作ることにしました。理由は、

string* A();
int* A();

*(A()) = 10;

再帰下降だと、A()を解析している時、その後代入されるのが整数なのか文字列なのか、
それ以前にそもそも代入されるのかどうかもわからないため。
(代入もされず値としても使われないなら曖昧エラー出さないといけませんし)

取り敢えず構文木を作るとこまで書きました。これから>>418の実装に挑戦します。
もっと手っ取り早い方法があればいいのですけれど。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch