【コンパイラ・スクリプトエンジン】相談室
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002リンク
NGNGhttp://cygwin.cjb.net/
0003これでどうよ
NGNGhttp://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デフォルトの名無しさん
NGNGhttp://compilers.iecc.com/
それとガベージコレクタの話題もOKにしない?
0005デフォルトの名無しさん
NGNGC/C++でガーベジコレクタは必要だと思いますか?
LISP/Schemeだとセルの大きさが一定な事が多いから、かなり回収率が良い気がしますが、この推論は正しいですか?
0006デフォルトの名無しさん
NGNGネイティブオブジェクトコードに変換して実行するうまい方法はありますか?
00074
NGNG> ガベージコレクタはマークスイープ法の他に何かありますか?
http://www.iecc.com/gclist/GC-faq.html
とかどうですか?
00084
NGNGそういう用途にはスクリプト言語を使わずに
Cで書いたのを呼び出すとかしたほうがいいと思います。
一応こんなのもあるみたいです(ネイティブコードを実行させている)。
http://www19.freeweb.ne.jp/computer/yaneurao/ygs2k/
0009デフォルトの名無しさん
NGNGmalloc/freeの問題と同じと考えて良いでしょうか。
best-fit法とかfast-fit法ぐらいしか知らない者で…。
00106>8
NGNGもしかして、最近のエミュレータとかもこういう形式ですかね。
00115
NGNG参照カウンタ(リファレンスカウンタ)は自己参照がある場合は使えないですね。
JargonとCopyingはどんなアルゴリズムかな。
00124
NGNG(よく知らないですが)Jargonってのはアルゴリズムじゃなくて
その分野特有の言葉のことだと思うんですけど、、、
http://www.iecc.com/gclist/GC-algorithms.html#Jargon
root setとかlive dataとか書いてるし。
0013デフォルトの名無しさん
NGNGメモリ領域の移動(空き領域を1つにまとめる。デフラグみたい?)
はメモリコンパクションって呼んで
厳密にはGCとは別物
ただ一緒にやってしまうGCの実装も多そうだし
アルゴリズムによっては下記みたいに自動的に
コンパクションもできてしまうものもある
>>11Copyingはたしかヒープを2つに分けて片方がいっぱいになったら
必要なものだけたどってもう一方にコピーするヤツだと思った
メモリの無駄が多いけどコンパクションも一緒にできる
0014デフォルトの名無しさん
NGNG64とか、プレステなんかの
MIPS系列のCPU積んだマシンは
たいていこの手法ですね。
ただ、もっと動的な再コンパイルですが。
jump/callの部分でコード変換したものを
キャッシングすることで速度を稼いでいるようです。
fpse.emuforce.comがソース公開です。
0015スクリプト系
NGNGhttp://www.kt.rim.or.jp/~kbk/
参考になるかな?リンク
http://www.din.or.jp/~glit/TheOddStage/
http://www.sun-inet.or.jp/~yaneurao/
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGそれでも他の言語よりは楽かな?
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGschemeもR5RSにキッチリあわせようとすると一月はかかるね。
0021デフォルトの名無しさん
NGNG一ヶ月ですむならやってみようかなぁ…
0022デフォルトの名無しさん
NGNGscheme実装とか載ってる。
あとソースも公開されてるし。参考になるかな
0023デフォルトの名無しさん
NGNGを押し込んでいたな・・。
0024デフォルトの名無しさん
NGNG最新のR5RSじゃなくてもR4RSに準拠すればオンライン上にある大抵のスクリプトは通るよ。
(あんま変わらないかもしれないけど。)
がんばってね。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGyacc/lex プログラミングジェネレータ on UNIX - 五月女健治 - tp
0028デフォルトの名無しさん
NGNGその本って絶版じゃなかったっけ。図書館いけばあると思うけど。(啓学出版ってつぶれたんじゃ?)
参考書籍
C stepupシリーズ(3) yaccによるCコンパイラプログラミング
ソフトバンク
ISBN4-89052-136-4
内容:
簡単な8086のASMコードを吐くCコンパイラサブセットの実装が載っている。
niftyにこれの全ソースが落ちているのを昔見ました。
0029デフォルトの名無しさん
NGNG翔泳社
ISBN4-88135-072-2
内容:
Pascal-Bという処理系の実装(+仮想マシン)
0030デフォルトの名無しさん
NGNGアスキー出版局
ISBN失念
内容:
I にForceインタプリタ
II にREDAというコンパイラ、makeの実装、
III にlispの実装
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGアセンブラを作成する本があったな。
会社にあるのでいまは挙げられないけど、あとで調べておくよ。
0034デフォルトの名無しさん
NGNGデバッグコンソール環境も付いてた筈。(ただしNEC9801用)
0035デフォルトの名無しさん
NGNGその本は当時としてはかなり内容が濃かった。(マルチスレッドとかTSRとかエディタ、DBなど)
多分もう売ってない。工業系の図書館いけばあると思うけど。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGyacc/lex以外の手段はありませんか?
自分でやるのは大変過ぎるからパスですけど…
0039デフォルトの名無しさん
NGNGあと、kmyaccとか言うのがなかったっけ?
0040デフォルトの名無しさん
NGNGそれ全部似た様なモノでしょ?
C程度の構文なら自分でスタック作ってやった方が速いよ。>38
0042デフォルトの名無しさん
NGNGhttp://www.doga.co.jp/ptdoga/rensai/cmaga/9611.htm
つーか。
ソフト製作が容易になったせいでコンパイラの需要が増えたのか。
or コンパイラ技術が簡単になったのか。
なんにしても最近独自のスクリプト言語増えすぎ。
なにか標準的な言語を策定してくださいませませ>ISO
0043ISO
NGNGそれは置いといて、
>>42
別に色々あってもいいんじゃない?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGそれとも、再帰使ってスタック領域を利用した方がいい?
0046sage
NGNGLL構文解析に限った話題じゃないね sage
エラー処理はOSに任せてスタック使ったら?
004732ではないですが
NGNGアセンブラを作成する本があったな。
たぶんこれじゃないですか?
「ハイクラスC言語 コンパイラ&インタプリタ」舟本奨 監修 末石吾朗+小林優 著
8080CPUもどきアセンブリコードを生成するコンパイラと、
そのアセンブリコードを実行するインタプリタのソースが載っています。
0048しつもん
NGNGソースはみずらいけど簡単な言語、(私が思うにRubyみたいな)
どちらの方が一般に好まれますかね?
0049デフォルトの名無しさん
NGNGちゃんと理解しないとコンパイラは書けませんか?
0050デフォルトの名無しさん
NGNGいらないと思う。
コンパイラ技術の論理的なこと(???)を理解するには
ドラゴンブックはいい本かもしれないけどあんまり実践的じゃない。と思う。:-)
0051デフォルトの名無しさん
NGNGどっかにないでしょーか?
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGソフトごとにマクロ言語を覚えるのが面倒です(^^;
誰かが優秀な言語のスクリプトエンジンを公開すれば
多分それがデファクトになるのかなぁとも思うんですけどね。
0054デフォルトの名無しさん
NGNGJavaの文法
http://java.sun.com/docs/books/jls/html/19.doc.html#52996
0055デフォルトの名無しさん
NGNGうーむ。
優秀ってのはよくわからないけど、
o GNU Makefile,VC++,BCBなどのプロジェクトファイルが付属している。
-> .libや.aなどのバイナリも付属させる?
o なるべく小さく。
-> 考え方にもよると思うけどソースファイルで50KBぐらいが限度?
o Lisp系の文法でも良いかもしれないけど、普及するとは考えにくい
(「わ、括弧だ」で敬遠する人がいるかもしれない)。
-> なのでC言語ライクにする。
o ライブラリに依存しない。
-> 構築するのが面倒になるから。
こんなの?
それと聞きたいんだけど、例外処理っていると思う?
型なし言語だとして
try
{
throw "例外";
}
catch e
{
print e, "\n";
}
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGソースでの配布キボンヌ。
0060デフォルトの名無しさん
NGNG0061baka
NGNG開発してます。英語の文法に由来する言語なんて開発したって、ま
してそれらを理解して使っているレベルでは奴隷以外の何物でもな
いよん。原点に返って日本語で考えることからスタートしないと
日本はいつまでたっても追いつかないのだ。つーか、中国に追い越
されるよん。あっちの人はさすがに精神的な文化レベルは日本にも
ひけをとらないため、ユニークな言語があるよん。それも中国語に
由来する文法で考えたコンピュータ言語が。
0062デフォルトの名無しさん
NGNGこれは日本語に由来してますか?
10 a =
# 10をaに代入する
0063デフォルトの名無しさん
NGNGこんなスレにも煽りがいるのか。
そんなあなたはMINDを使っててください。
あと、そのユニークな中国製言語の具体例を挙げてください。
さぁ、どうぞ。
0064デフォルトの名無しさん
NGNGしょせんは英語読めない人間の戯言でしょ。
時に、中国語の文法は日本語より英語の文法に近いんじゃなかったっけw
0065デフォルトの名無しさん
NGNG0066baka
NGNG一部の前置詞くらいのもの。時制なんか日本語のほうに近いよ。
例えば中国語に完了形なんてない。
中国製の言語か?自分で調べろ。誰がタダで教えるか。
確かに俺は英語読めないかもしれんが、少なくとも64よりはあ
るよん。
あおったつもりはない。聖書を読んでああでもないこうでもない
と屁理屈いってるやつと同じレベルの君たちに危機感をもっただ
けだよん。
0067baka
NGNGおっと見落としてた。何がいいたんだ?なんの反応もできないが
しょせん俺もバカだから許してくれ。一言いわせてもらえば
そーいう解釈する普通の日本人がどれだけいるかが問題だ。
そーいうルールを作ったとして、拡張、応用していけるかが問題
だな。拡張、応用するにしたがって解釈するのにヘイコラとなっ
たらその言語は失敗だ!
それしか胃炎。
0068デフォルトの名無しさん
NGNGえっと、プログラミング言語についてかんがえてるんですよね。
時制ってそんなに関係のあるものってわけでもないと思います。
むしろS+Vみたいな部分のほうが大切。
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG英語に由来しようが、日本語に由来しようが、
数あるプログラミング・パラダイムに沿って
プログラムを組み立てられなければ実用性なし。
せいぜい理想を追っかけててください。
0071デフォルトの名無しさん
NGNGバカなら黙ってろ。
ところでMLみたいな関数型言語を作ってみようという人はいませんか?
0072デフォルトの名無しさん
NGNG>中国製の言語か?自分で調べろ。誰がタダで教えるか。
そりゃ、知らないものは教えようがないよね。
0075デフォルトの名無しさん
NGNG関数型言語ってどんなのなんですか?
全部が関数で作られてるとか???
0076デフォルトの名無しさん
NGNG今何時ですか?
0077デフォルトの名無しさん
NGNGこの辺とか。
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ループが無いとか、
変数に代入ができない(するべきではない)とか、
わたしも最初、「こんなのでプログラム書けるの?」と不思議でした。
でも、慣れるとCやJavaよりすっきりとしたコードで
プログラムできるんですよ。
日本語では
「プログラミング言語ML」ウルマン、アスキー
「プログラミング言語」武市正人 岩波講座ソフトウェア科学
が関数型言語を解説しています。
0079デフォルトの名無しさん
NGNGC++なんかはオブジェクト指向のいいとこどりみたいでいいかんじだと思うんですが、
どうでしょう?
やっぱりオブジェクト指向なら完全にオブジェクト指向でいかないとだめなもんですか?
0080デフォルトの名無しさん
NGNGはちょっと違うよーん。JavaとかC#みたいなのはそのオブジェクト指向設計
とかと親和性が高いというのが使いやすい人にとっては使いやすいよーん。
0081部外者A
NGNGLisp/Schemeも関数型言語じゃなかった?
ローカル変数使えるけど。
MLが完全な関数型に近いと聞くけど、どうちがうのか調べてないのでわからんです。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNGですが、みなさんどんな本を読みましたか?
洋書の定番として読みにくさの順で、
ドラゴンブック
タイガーブック
あたりだと思いますが、他にもっと読みやすい本とかないでしょうか?
パーサや正規表現の解説も「yaccとlexに頼れ」で飛ばすんじゃなく、
ある程度わかりやすく説明して本がいいのですが。
0084デフォルトの名無しさん
NGNGでも、規則の組み合わさり方が複雑すぎる。
0085デフォルトの名無しさん
NGNG>よーん
馬鹿?(ワラ
0086デフォルトの名無しさん
NGNGまあまあ、別に「よーん」って言おうが言うまいが、コンピュータ言語
について話す上では関係ないことだし。
つーか、そんなとこにいちいち突っ込む君の方が馬鹿じゃん。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
∩_∩
( ´Д⊂ヽ
⊂ ノ
人 Y
し (_)
0089デフォルトの名無しさん
NGNGいや、とりみきファンの可能性も、、
0091not 83, not 90
NGNGageなきゃ意味ないだろー。
0092部外者A
NGNG他に何か?
0093ミトコンドリ子
NGNGプログラミング言語処理系 岩波講座ソフトウェア科学5
ISBN4-00-010345-8
なんてどうかしら? 適当に端折られてるから、ドラゴンブックよりは
読みやすいかもしれないわ。
ついでに、タイガーブックってしらないんだけど、正式名称教えていただけ
ないかしら。
0094部外者A
NGNG(それでも辞典並みに分厚いけど)
0095デフォルトの名無しさん
NGNGあー思い出した。俺もそう思うよ。
>>94
読み比べるとやっぱり読みやすいと思うよ。
ただそれを元に実装しようと思うと足りない情報があって、
結局ドラゴンブック読むことになるって感じかな……
どうよ。
0096部外者A
NGNGx内用
o内容
薄っぺらいのが良いなら、
計算機科学/ソフトウェア技術講座7「コンパイラの理論と実現」
ISBN4-320-02382-X
共立出版 2700円
てのもある。
最後にC--というコンパイラの実装が乗っている。
これのパーサはyaccを使った物と、再帰下降の2種類が掲載されている。
0097ミトコンドリ子
NGNGそうそう、そのとおり。
理屈だけ知るなら93
実装までするならドラゴンブックって感じかしらね。
0098デフォルトの名無しさん
NGNG009983
NGNGドラゴンブックとは、
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
のことです。
ドラゴンブックの竜に対して、こちらの表紙は虎になっています。
ドラゴンブックよりも薄くて読みやすいとか、新しい分だけ最近の
トピックを押さえているとかの良い部分もあるんですが、字句解析
や構文解析の説明をはしょり気味な内容です。
理論よりも自分で実装することに興味があるので、ドラゴンブック
は読んでてつらいのです…
0101デフォルトの名無しさん
NGNG実装より理論のが簡単なんだって。
0102デフォルトの名無しさん
NGNGえ?理論なんて全然知らなくても、yaccなどの助けで
実装できるよ。
一方、構文解析等の理論は本格的な学問で奥が
かなり深い。
010483
NGNGえと、yacc/lexを使いたくないというんではなく、ブラックボックスなのが
気持ち悪いので、いちおう基本理論の理解だけしておきたいという程度
です。「ドラゴンブック読め!」と言われるのはわかっているんですが、
難解で…
010583
NGNG0107コンパイラ屋(休日出勤)
NGNGどれも実際の処理系を作るのに役立つ内容です.
Reinhard Wilhelm, et al., Compiler Design,
Addison-Wesley, 1995, ISBN 0-201-42290-5.
Steven Muchnick, Advanced Compiler Design and Implementation,
Morgan Kaufmann, 1997, ISBN 1-55860-320-4.
Robert Morgan, Building an Optimizing Compiler,
Digital Press, 1998, ISBN 1-55558-179-X.
中田育男, コンパイラの構成と最適化,
朝倉書店, 1999, ISBN 4-254-12139-3,9500円.
Dick Grune, et al., Modern Compiler Design,
Wiley, 2000, ISBN 0-471-97697-0.
Michael L. Scott, Programming Language Pragmatics,
Morgan Kaufmann, 2000, ISBN 1-55860-442-1.
010883
NGNGありがとうございます。
コンパイラ初心者におすすめというか、あまりアカデミックでない実践
指向な本はこの中にあるでしょうか?
英語でもかまわないのですが、コードの例が多い方が嬉しいです。
竜本も虎本もコンパイラの完結したコード例がついてないのが、
ちょっと好きになれません。
ところで理系の本の著者名でよく見るet al.って、どういう意味なんで
しょうか?ネタに訊いているわけではなくて、本当に知りません。
0109デフォルトの名無しさん
NGNGet al.「〜と愉快な仲間達」
0110ミトコンドリ子
NGNG情報ありがとう。
>>83=108
コードの例が載ってなくても、アルゴリズムが理解できて、
実装できるようになんなきゃダメよ。それにドラゴンブックだって、
ちゃんと擬似コードで説明してるじゃない。
コンパイラじゃなくても、わりとアカデミックよりな文献だと
環境が特定されているサンプルコード(打ち込んだらすぐ動く)なんて
ついていること少ないわよ。擬似コードすらないこともザラよ。
(分野によるのかしら?)
逆に、理論からコードに起こすことが、必要ない、やりたくない、
できない、人のためにlex/yaccみたいな処理系が普及してるわけでしょ?
がんばりなさい。
et al.って、「ほか何人か」って意味じゃなかったかしら。
辞書に載ってるわよ。
0112コンパイラ屋(休日出勤)
NGNGDavid L. Clarke, et al, Systems Software Programming: The Way Things Work,
Prentice Hall, 1997, ISBN: 0-13-490558-X.
(邦訳 システムソフトウェアプログラミング―コンパイラの設計法と並行処理の基礎,
小松伸行訳,プレンティスホール出版,1998, ISBN 4-89471060-9, 4800円)
疋田輝雄・石畑清,コンパイラの理論と実現 (計算機科学・ソフトウェア技術講座7),
共立出版, 1998, ISBN 4-32002382-X, 2700円.
原田賢一,コンパイラ構成法,
共立出版,1999, ISBN 4-3200292-2, 6500円.
0113コンパイラ屋(休日出勤)
NGNGなくこんな本も結構役に立ちます.もっともインタプリタを作るに
はここまでいろいろ知らなくても十分なんとかなりますが.
Richard Jones, Rafael D Lins,
Garbage Collection : Algorithms for Automatic Dynamic Memory Management,
Wiley, 1996, ISBN 0-471-94148-4.
Jonathan B. Rosenberg,
How Debuggers Work : Algorithms, Data Structures, and Architecture,
Wiley, 1996, ISBN 0471149667.
邦訳: デバッガの理論と実装,吉川邦夫訳,
アスキー, 1998, ISBN: 4-7561-1745-7, 3500円.
John R. Levine,
Linkers and Loaders,
Morgan Kaufmann, 1999, ISBN 1-55860-496-0.
0114コンパイラ屋(休日出勤)
NGNGRandy M. Kaplan,
Constructing Language Processors for Little Languages,
Wiley, 1994, ISBN 0-471-59754-6.
0115コンパイラ厨房(83)
NGNG趣味でやる練習としては、既にある言語のサブセットを作ってみるのが
一番いいんでしょうか?
たとえば、どうせ実用にはしないからということで最適化は後回しにして、
SchemeやCのサブセットとか。
0116コンパイラ屋(にせもの)
NGNG麻宮騎亜,
コンパイラ1,
講談社,1999,ISBN 4062606100.
麻宮騎亜,
コンパイラ2,
講談社,1999,ISBN 4062606119.
0117デフォルトの名無しさん
NGNGhttp://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html
ここらあたりから勉強し直してみよーかなーと言ってみるテスト
やっぱPL/0からかな
0118デフォルトの名無しさん
NGNG> 共立出版,1999, ISBN 4-3200292-2, 6500円.
これはコードがネットに落ちてるから拾ってくるといーよ。
本の値段はちと高いな...
ttp://www.hara.ics.keio.ac.jp/kCompiler/index.html
0119コンパイラ厨房
NGNGんですが、あれはどうでしょうか?
0120デフォルトの名無しさん
NGNG0121ななしさん
NGNG2ちゃんで支援要請しなさい、それはあるから。
と書いてみる。
0122Yet another コンパイラ屋
NGNG0123デフォルトの名無しさん
NGNG実践しろ。>コンパイラ厨房
スキルは後から付いてくるから。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNGとりあえずそこらへんの小さなインタプリタのソースを読め
自分でも何か作れ
本もきっちり読め
以上.下がってよし.
0126デフォルトの名無しさん
NGNGソース書く人が自分で最適化するんですよね?
0127言い訳パターン1
NGNGそこまで速度が要求される場面には使わないでください。
もしくはC言語で拡張してください。
とか。。。
0128デフォルトの名無しさん
NGNG感じではないかね。
0129126
NGNGCGIとして使う場面でも速度を求められる場合があると思いますが…
どちらにせよ遅いより速い方がいいですし、
それに最適化って速さだけじゃないでしょ?
CGIって最適化してコンパイルされたものをどっかに保存してそれを実行みたいなふうにはできないのでしょうか?
CGIファイルが更新されたらまた再コンパイルして。
0130デフォルトの名無しさん
NGNGCGI自体のオーバーヘッドがそれなりにあるので、Java Servletを使う
方が得策です。
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNGそして逝かせちゃってください。
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGメモリ上にperlスクリプトをコンパイルした状態で保持します。
0135デフォルトの名無しさん
NGNG結構おもしろいとおもうんだけど、やっぱ難しいのかな?
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG実装は大丈夫なのか?
これくらい楽勝だろうな
問題:Cソースからコメントを抜き出し表示する関数を100行以内でつくれ
補足:ANSI-Cにのっとった全てのパターンで動作すること
(注:コピペ)
0140デフォルトの名無しさん
NGNG138->139の話の流れ方がよくがわからんのだが・・・
ANSI-Cにのっとった全てのパターンとは何?
コメントって/*...*/は良しとして、//は含めるの?
だったらネストとか行末の0x5cも頭にいれなきゃだめだねぇ...
0141コンパイラ厨房
NGNGスクリプト言語として使えるような言語の骨組みを作るということで。
Scemeって実装は楽そうだけど、自分で使いたいかって考えると…
あんなカッコだらけのソースコード見たくないですよ、カテジナさん!
ついでに愛用エディタの秀丸だと、対応カッコのハイライト機能も
ないですよ、マーベットさん!
0142デフォルトの名無しさん
NGNG秀丸に対応括弧のハイライト機能はあるよん
0144デフォルトの名無しさん
NGNGあとでパーサだけ取り替えれば?
0145デフォルトの名無しさん
NGNGのに、それ以外の部分で括弧だらけだよね。どういうポリシーだ?
0146145
NGNG× Lisp
0147デフォルトの名無しさん
NGNG?言いたいことがよくわからない。
LispもSchemeも1+2や10-5は
(+ 1 2)
(- 10 5)
こう書くよ。
0148146
NGNG0149145
NGNG加減乗除の演算子優先順位と括弧のハ・ナ・シ。
中置法だと括弧を使うでしょ。
0150デフォルトの名無しさん
NGNGそれ以外ってどこよ?
元々括弧だらけですが、何か?
0151デフォルトの名無しさん
NGNGlispの括弧は優先順位と何の関係もないからなあ。
言ってることがわからない。
なぜ同列の問題として扱ってるのか。
0152デフォルトの名無しさん
NGNG(+ 1 (- 2 1) 3 4 5)
こういうのを中置記法で書くと、
1 + (2 - 1) + 3 + 4 + 5
になるけど、これとごっちゃにしてるんだろうね145は。
0153コンパイラ厨房
NGNGのでしょうか?
Perlみたいに色んなところで使い回せる汎用言語じゃなく、秀丸マクロ
みたいにソフト依存のad-hocな組み込み言語で、あまり覚えるのに労力
払いたくねぇ!って場合、
CやPascalっぽい言語(Algol系)
Lisp/Schemeっぽい言語
BASICっぽい言語
上記が適当に混ざった言語(構文に一貫性なし)
の中だと、個人的な好みではAlgol系なんですが…
ちなみに構文の話です。
0154デフォルトの名無しさん
NGNG使ってるうちに慣れるとかってのはヤダな…
スクリプトって手軽なのが瓜なわけだから
使いたいって時にパッとはじめられる感じのがいい。
個人的にはPascalが好きだけど。
0155デフォルトの名無しさん
NGNGhttp://homepage1.nifty.com/ht_deko/ppa.html
> PPA(Poor-Pascal for Application)はDelphi/C++Builder用のPascalインタプリタコンポーネントです。
> 1) Project-PPA(PPA-ML)に参加し、積極的にPPA開発に寄与すると約束する。
> 2) 1)が不可能な場合、Project-PPAに決められた金額(\10,000)を送金する。
ただ利用条件ちょっと厳しいんで、私のような低級プログラマでは
使いたくても使えませんけど(泣
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGflex bison 使い始めたばかりなのですが、
正規表現考えるのめんどくさぁ、
浮動小数点の表現みたいな、複雑怪奇なのとか
文字列みたいに複数行にまたがるとかそういったパターンは
いやになりそう。
どこか正規表現集ってないかなぁ?
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGうう
0160デフォルトの名無しさん
NGNGその中だとLISP/Schemeはちょこっとしたプログラムなら完成するのが比較的早いと思う。
0161デフォルトの名無しさん
NGNG探したりしたりしてるのですが
PPAに毛が生えかけたぐらいのが言語仕様的にも
手のひらにすっぽり収まる感じでちょうどいいと思うんですよ
それか、UWSCのスクリプトかなぁ
www07.u-page.so-net.ne.jp/ca2/umiumi
0162デフォルトの名無しさん
NGNG付属スクリプトを梱包する必要があるのと、
実行速度が遅めなのがちょっと。
0163デフォルトの名無しさん
NGNG附属スクリプト?
なんで?そんなことライセンスに一言も書いてないよ。
0165デフォルトの名無しさん
NGNG付属スクリプトで実装されている機能を使っているんだろう。
0166デフォルトの名無しさん
NGNGC で言うところの標準ライブラリ的な機能が
付属のスクリプトで実装されているんで。
0167デフォルトの名無しさん
NGNG文字列演算なんかで、たとえば
%union {
char * str ;
}
%token STRING <- flex の方は \"[^\"]*\" とかといった感じ
%type <s> str
exp:
str ';'
|
;
str:
STRING '+' STRING { $$ = str2( $1 , $2 ) ; }
| STRING { $$ = str1() ; }
;
%%
0168デフォルトの名無しさん
NGNGC言語側
char * str2( char * l , char * r )
{
char * ret = new char [ strlen( l ) + strlen( r ) + 1 ] ;
strcpy( ret , l ) ;
strcat( ret , r ) ;
delete [] l ; // もう使用しないので削除
delete [] r ; // もう使用しないので削除
return ret ;
}
char * str1()
{
char * ret = new char [ yyleng + 1 ] ;
strcpy( yytext , yytext ) ;
return ret ;
}
0169デフォルトの名無しさん
NGNGとまあ、現在このようにしているわけですが、
見るからに、見てのとおりで、
メモリーの解放忘れの嵐を食らうはめになります。
皆さんはどのようにされてますか?
0170デフォルトの名無しさん
NGNGhttp://www.hpl.hp.com/personal/Hans_Boehm/gc/
これ使うとか。
0171デフォルトの名無しさん
NGNG>>170
すばやいレスどうもありがとう誤差います。
実は英語があんまり得意ではないのですが、内容はガベージコレクション
関連の内容なのでしょうか。
僕の例の場合、メモリを開放する必要のある瞬間は、より上位の文法の
ツリーが解決した瞬間なんですね、ですから何とかガベージコレクション
のような大規模なものを用いなくてもなんとか、いい方法が存在しそうな
気がします。
という訳で・・・
だれかそういった場合の良い方法、こんなのあるよとかないでしょうか?
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGいきなりトンチンカンな事書くな、解決ぜんぜんせんやんけボケ
0174デフォルトの名無しさん
NGNGちなみに私はコンテナに登録する方式ですが、美しくない・・・ぅぅ
0175デフォルトの名無しさん
NGNG0176170
NGNGじゃこういうのはどう?
http://www.fsinet.or.jp/~nito/CocoaClub/article03.html
0177デフォルトの名無しさん
NGNG0180170
NGNGObjective-Cってやってみればわかるけど
(C++と比較にならないほど)素直でいい言語だぞ。
この辺から読んでみるとか。
http://www.fsinet.or.jp/~nito/OSPT/Objective-C.html
コンパイラはGNUの実装もあるけど
Stepstone系のObjective-Cコンパイラ(トランスレーターだけど)
http://users.pandora.be/stes/compiler.html
が個人的には好き。
0181かい
NGNG実装が大変?
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNGUnionのメンバを含むクラスじゃダメなの?
0184デフォルトの名無しさん
NGNG>>174
コンテナクラス作って全部ほうりこむという方法ですか、
確かに手間は少しは省けそうですが、決定的な解決策には
なりにくそうですね。
昨日スタックのクラスを作って中身の取り出し用メンバ
を工夫してやってみました、これでかなりいけるような感じ
ですが、やっぱり決定打にはなってないです。
プロのコンパイラ屋さんのコード見てみたい今日この頃。
>>176 181
見てるこちらは、ちょっと困ったかも(笑)
0185169
NGNGコントラクタとデストラクタがあればフック関数つくれるということでしょうか。
たしかにあったら使えるかも知れませんね。
0186デフォルトの名無しさん
NGNGガベージコレクションでもいろいろ種類があるそうですから、
その中で一番実装が簡易なものを使うのが良さそうな気がします。
(トリッキーな方法を使うぐらいなら、ですが。)
0187デフォルトの名無しさん
NGNG大学の授業とかで使われるような解りやすいソースで、
Cのコンパイラのソースってどこかにありませんか?
0188デフォルトの名無しさん
NGNGURL忘れたけど、電通大(http://www.uec.ac.jp/)の情報工学科 渡辺研究室にTinyCってのがあるよー。
uecの学生より
0189デフォルトの名無しさん
NGNGここですね。
http://watalab.cs.uec.ac.jp/tinyCabs.html
ゆっくり勉強したいと思います。どうもありがとう。
あと、bisonとflex関連も見つけたんでリンクしときます。
http://www.omoikane.co.jp/i/info/html/bison-1.28/bison-ja_toc.html
http://www.omoikane.co.jp/i/info/html/flex-2.5.4/flex-ja_toc.html
0190デフォルトの名無しさん
NGNGこんなのもあるよ。
Micro-C
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html
0191デフォルトの名無しさん
NGNG印刷しても字が読み取りにくかったから、
ディスプレイで読んでるけど、つかれるなぁ。
まだ読み始めですが、既に読み終えた方、どうでしたか?
0192名無しさん@こんせぷつ
NGNGこの書籍のサンプルコードですね。
情報科学こんせぷつ8
コンパイラの仕組み
電通大 渡邊 坦著
SBN4-254-12708-1
A5判 196頁 定価(3,500円+税)
「問題解決に必要な技術を具体的に解説した実践書。(朝倉書店のページより)」
〔内容〕概要/字句解析/演算子順位/再帰的下向き構文解析/
記号表と中間語/誤り処理/実行環境とレジスタ割付/コード生成
/Tiny C/他
UNIXUSERの書評見て買ったら、いい本だった。巻末のコードは読みにくい
ので、>>188のサイトからゲットすべし。
0193デフォルトの名無しさん
NGNG初耳なんだけど、どこの出版社から何時出た本なの?
0194デフォルトの名無しさん
NGNGコンパイラの仕組み
ISBN:4254127081
185p 21cm(A5)
朝倉書店 (1998-04-01出版)
・野崎 昭弘・黒川 利明・疋田 輝雄・竹内 郁雄・岩野 和生【編】・渡辺 坦【著】
NDC分類:007.64 販売価:\3,500(税別)
0195デフォルトの名無しさん
NGNGこれをpentium用に変えるにはどうしたらいいのでしょう?
だれか講義してみない?
0196デフォルトの名無しさん
NGNGこの本はなかなかわかりやすかったよ。
コンパイラの本を2冊読んだけど、断然そっちがわかりやすかった。
でも、あんまり深いことは書いてないんだよなぁ。
0197デフォルトの名無しさん
NGNGi386用のならあるっぽい
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html
0198デフォルトの名無しさん
NGNGTinyCとMicroCって全然別物なんじゃ…
0199デフォルトの名無しさん
NGNGスキャン画像を無理やりpdfにしてるから
スクロールが重くてしかたない
なめてんのか、と思った
内容も浅いんで専門書読んだほうがいいでしょう
0200デフォルトの名無しさん
NGNGと、流れをぶちきってみます
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGで、FirstとかFollowとかよくわからなかった。
それを使って表を作ってそれをもとにプログラム書くみたいだけど(LL(1))、
とりあえず意味はよくわからんかったけど、方法はわかったような…。
だれか、FirstとFollowの説明だれかお願いします。
金がないので買えませんでした。
0203デフォルトの名無しさん
NGNGYaccとLex使ってください。
0204デフォルトの名無しさん
NGNGFollowが、その非終端記号の直後に来る可能性のある終端記号の一覧。
0205デフォルトの名無しさん
NGNGN88-BASICみたいな昔ながらのステートメントを並べるタイプの言語を
yaccで解説している書籍orURLご存知ありませんか?
0206デフォルトの名無しさん
NGNGCライクな言語でも、N88-BASICでも、必要な考え方は
同じだと思うけど。
0207デフォルトの名無しさん
NGNGCライクだと、関数の引数とか省略できないのですが、N88-BASICだと途中の引数を
省略できたりします。その辺が一番の悩みどころなんです…。頭悪くてすみません。
0208デフォルトの名無しさん
NGNGそうですねぇ、こんな感じでどうでしょ。
Statement:
Statement arg_list {}
;
arg_list:
arg_list arg
;
arg:
ほげほげ {}
| {}
;
うまくでるかな、ちなみに私の黄金パターンです。
ちなみに書籍は見たこと無い(^^;
0209デフォルトの名無しさん
NGNG適当にスペースあると思ってみてね。
0210デフォルトの名無しさん
NGNGFORI=0TO10STEP100のFORI=0をFOR I = 0と解釈して
FORI=0をFORI = 0と解釈できるの?
0211デフォルトの名無しさん
NGNGStat:
Stat arg_list {}
;
arg_list:
arg_list ',' arg { 引数取り込み処理}
| arg_list ',' ',' { 引数スキップ処理 }
| arg_list
;
さっきのより、こっちの方が簡単?
0212デフォルトの名無しさん
NGNGすみません、意味良くわかんないです。
詳しく説明してもらえれば答えられるかも?
0213デフォルトの名無しさん
NGNGなんとな〜く意味判ってきた、
要するに、先に FOR がくっつくのかという問題ですね。
それは lex に仕事させればいいです。
正規表現に後ろが hoge の時マッチするというやつあります(たしかあんまり使わないから忘れた)
それで {変数}={式}TOが登場するときに決定すればいいです。
0214デフォルトの名無しさん
NGNGarg_list:
arg_list ',' arg { 引数取り込み処理}
| arg_list ',' ',' { 引数スキップ処理 }
| arg <- ここね
;
0215デフォルトの名無しさん
NGNG何度もありがとうです。アホなんで直ぐには理解できませんが、
レスを参考にして頑張ってみます!
0216デフォルトの名無しさん
NGNGどっかのクソ教授の書いた本なんか使えるようになってからでなきゃ理解できんものばっかりです。
まあ、コンピュータ関連のツールは総じて頭より体なんですが・・・
0217いつでもどこでも名無しさん
NGNG0218216
NGNGでも実際頭で憶えられんもんって一体いくつあるんでしょ。
頭使えると云うのでしたら理屈書いてみたら?
論破してやろうか?
0219デフォルトの名無しさん
NGNGついでに >>216 激しく同意
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGパーサはyaccで作るのと、LRとかで手書きするのとで速度にそれほど差が出る
ものなのでしょうか。
手書きコードは極端に酷くなく、作るのはコンパイラでなくインタプリタを想定。
保守性は無視で…。
0222デフォルトの名無しさん
NGNGLLとかならわかるけれど。
0223>221
NGNGまあトークン切り出しは比較的簡単だから手作業でも良い。メンテも可能。
yaccと手書きについては、複雑な文法をメンテする手間を考えたら
yaccの方がよい。
再帰下降とかLL(1)のみで完結する文法なら手作業でもいいけど。
速度は手作業が有利なのには変わりなし。
0224デフォルトの名無しさん
NGNGということで、スクリプトエンジンの利点って?
0225デフォルトの名無しさん
NGNGコンパイルしなくて済む。
0226>224
NGNG0227>224
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGWZ editorのマクロがCライクだったような気が。
0230デフォルトの名無しさん
NGNG実行速度が遅い言い訳になる。
「いや、何せスクリプトで動作しているものですので・・・」
0231デフォルトの名無しさん
NGNG多くても安心。
0232デフォルトの名無しさん
NGNGパクりパクられの関係なのに平和
0233デフォルトの名無しさん
NGNG突然のお客様にも安心
0234デフォルトの名無しさん
NGNGよほど特異でなければ、flex 程度でいいと思うよ。
文脈依存型の文法で語彙の意味がコロコロ変わるのは手書きにすると
てき面に効くような気がする。
あと、流し込み型ではなくて、う〜ん例えばタブの位置で文法が
決まるようなミョウチクリンな言語を作る場合とか、
例の上の方で発言されていた fori=0to の問題見たいなのとかは、変わると思うよ。
ちなみにタコが strcmp とか使って作った奴使うくらいなら間違いなく flex の方が
いや・・・lex でもその方が速い。
はっきりいって素人じゃ flex には勝てんです。
素直に flex で書いて、チューニングした方がいい。
0236デフォルトの名無しさん
NGNG萌えられる。
0237デフォルトの名無しさん
NGNGC++/Java用のパーサクラスを出力するようなツールってないんかな。
0238デフォルトの名無しさん
NGNG検索せよ。
JavaCC
http://www.metameta.com/
とか。
0239名無しさん
NGNG漏れもジェネレーターやるから意見聞きたい。
lexでC++をサポートするのは文字コードの実装の
抽象化って意味で効果的だけど。
0240厨房
NGNG0241>240
NGNG0242>240
NGNG0243デフォルトの名無しさん
NGNGC++ はんこ まみれ ?
0244名無しさん
NGNGうんこ?まんこ?ちんこ?どれ?
0245USO800委員会
NGNG嘘です。今日は4月1日です。
0246>244
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGあんこ、インコ、援交〜、温厚〜、金庫〜、健康〜、参考〜、センコ〜
炭坑〜、天候〜、敦煌〜、軟膏〜、判子、メンコ、四個、ワンコ
0249デフォルトの名無しさん
NGNG{
public:
&nbsp;&nbsp;static におい
}
んこ::におい = くさい;
0250デフォルトの名無しさん
NGNGif(食い物.量 > 腹八分) {
if (rand()&1)
throw 便秘;
return げり;
}
return うんこ;
}
0251デフォルトの名無しさん
NGNGだいぶ前の話なんですが…どうしても気になったもので
strcmpよりも高速な文字列比較の方法ってどのような物なのでしょうか?
自前でstrcmp相当の関数をinlineするとか、その程度しか思いつかないのですが
0252デフォルトの名無しさん
NGNGstrcmpが遅いんじゃなくて、strcmpを正面から使うような
単純なアルゴリズムが遅いってことじゃない?
0253デフォルトの名無しさん
NGNGstrcmpでバカ正直に比較していたら、
最悪用意されているシンボルの回数だけ比較することになるだろ?
だったら素直に決定性有限オートマン使っとけって事
0254>251
NGNG最適なのはトライ木かな。(文字単位で区切られた木を作る)
0255254>251
NGNG0256デフォルトの名無しさん
NGNGオートマトンの間違いだろ。
しかも251は構文解析ではなく字句解析の話をしているのでないのか?
0257>256
NGNG0258251
NGNGそういう意味の文章だったんですね
文意を誤解していました
さすがに厨房な私でもstrcmpで逐次比較するような事はしないでハッシュ使ってます
0259デフォルトの名無しさん
NGNGhttp://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm
0260デフォルトの名無しさん
NGNG抽象的な対象に使えないので、字句解析にはちょいと向かないと思う。
やっぱオートマトンじゃないかな。
0261252
NGNG人前で発言しなくてよかったぞ。
アリガト>256
0262256
NGNG正規表現で字句解析するよりstrcmp使ったほうが速くないかな?
正規表現ってコンパイルしてバックトラックしながら文字列のマッチングしてたら結構遅くなるように思う。
NFAからDFA作って最短一致のみの正規表現にすれば高速になるのかな。
まぁでもコンパイルの時間がかかるのはあまり気にしないでいいか。
要は生成したブツが速く動けばいいわけだし。
0263デフォルトの名無しさん
NGNG字句解析では、シンボルテーブルとハッシュ組み合わせています
でも、最近のコンピュータは速いですから、よっぽど長大なソースでも扱わない
限りどちらでも大差ないような気もします・・・
0264monner
NGNG全部のパターンを同時に比較する
というか、仮想機械が動いている可能性がゼロになるまで
入力を行っているだけなんでめっちゃ速いです。
ただしNFAの場合は実行中に仮想機械のタスクが
増化するような状況になる(2チャンオリジナル
正規表現ライブラリ参照)ので、実際の速度は低下します。
DFAの場合は実行する前にテーブルがパンクしなければ
最高のパフォーマンスで走ります。
(圧縮方式によっては速度の低下はあるが)
蛇足:DFAでデータベース組めればとんでもない速度
が出ますが、メモリーも天文学的容量になる
0265デフォルトの名無しさん
NGNG厨房ですみません。「2チャンオリジナル正規表現ライブラリ」ってなんでしょう?
0266名無しさん
NGNG0267>>264
NGNG叩かれまくってるじゃん
0268デフォルトの名無しさん
NGNG追加されたと聞いたんですけど、本当ですか?
本当なら、どういう使い方をするんですか?
0269名無しさん
NGNGman -k regcmp
ただ、漢字対応しっかりやってるシステムは
意外と少ない。
0270デフォルトの名無しさん
NGNG超高速字句解析の話
最近字句解析の高速化をしていて思ったことですが、テーブル圧縮はむしろ有効に働くことが時にあります。
理由はおそらく、キャッシュとメインメモリの間のスピードのギャップでしょう。
なにしろ最近はアクセスタイムのギャップが10倍を超えようとしてます(もう超えてるのかな?)、こうなってくるとせっかくの工夫がこの問題で一発で台無しになってしまいます。
ゲーム屋あたりではバスボトルネックっていってヒイヒイいってます。
それで自作物字句解析は、より小さいテーブルを作るアルゴリズムを中心に私は考えています。
まあ、そんなことしてまで高速化してるのは精精、とあるCGツールのプラグインが掃き出すクサレギガバイト級テキストファイル(んなもんつくるなぁぁぁ)のパースくらいなもんでが。
>262
ちょいと横槍 lex だというなら正規表現のコンパイル時間は関係ないよ。
あとは monner 氏(女史?)の書かれてるとおり。
0271デフォルトの名無しさん
NGNG>LISPを良く理解せずに形だけ似たようなのに仕立て上げようと
>ヘボプログラマが適当に作るとこんなのができあがります、って感じの言語です。
http://hp.vector.co.jp/authors/VA017441/lib/
ソースが付属しているので、参考までに。
0272デフォルトの名無しさん
NGNGだれか構文解析という言葉を教えてやれ
0273デフォルトの名無しさん
NGNG落せない。なんでtext/htmlなんだ。
つーか、なんだPLATHOMEって。
0274デフォルトの名無しさん
NGNG人が一生懸命つくってるのをそういうふうにするのは嫌いだな。
0275デフォルトの名無しさん
NGNG作者か?(藁
0276271
NGNG私は紹介しただけなんですけど・・・
Webで公開されているものを紹介しちゃダメなの???
0277デフォルトの名無しさん
NGNGそうだ
0278デフォルトの名無しさん
NGNG攻撃だよな?
0279271
NGNGすいませんでした。
0280デフォルトの名無しさん
NGNGそれはそうだが、
>>279
何も削除依頼せんでも。
0281デフォルトの名無しさん
NGNG2ch側の状況によるけどな。
0282デフォルトの名無しさん
NGNGなるほど、こういう計算をやっているから皆が口をそろえて
「Lispは遅い、メモリを食う」って言うのか!(w
でもさらっと目を通したところ、とりあえず
動作に関しては致命的な問題はなさそうだったぞ
(だよね?)。
作者の苦労が偲ばれ、思わず目頭が熱くなったのは
俺だけだろうか・・・
0283デフォルトの名無しさん
NGNG0284>282
NGNGところでLISP系でガベコレしない(必要ない)実装ってあるのかな?
0285284
NGNG0286デフォルトの名無しさん
NGNG0287さくしゃ
NGNG>>273 わりぃ間違えてた。
>>275 ハズレ〜
>>279 いや別に消さんでも。
>>282 ホントにこんな計算やってるLISPがあったら笑えるネ。
>>283 んなこと言われると反応しづらいじゃねーかコラ。
0288272
NGNGこんな恥ずかしいものを公開できる心理を教えてくれ
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG物作るときに不便でないですか>皆様?
いや、だめっちゅうんじゃなくて、LISPで
ゲーム作ってる人もいるし、便利だと思ってる
人がいるなら、ちょっと使える風につくろうかなぁと。
0292252
NGNGいや、今書いてるんだが、ハジメテなのも手伝って
あまり思うように逝ってないんだよね。
0293>291
NGNGCとかで組み込み関数作ってそれを呼出すだけになってしまう。
Schemeだと環境のコピー(保存)も発生するから、長々と定義書くのを躊躇したくなる。
それ以前にガベコレの問題があるからねえ・・
(大規模になると探索のコストが結構かかる)
リアルタイム処理に向いてるとは言えないかな
0294デフォルトの名無しさん
NGNGこのスクリプト言語はどうですか?
ウィンドウが扱える簡単なプログラムが作れそう
でも説明書がわけわからなくて作れない....
0295デフォルトの名無しさん
NGNGじゃ、やめとけよ
0296294
NGNGもし学ぶ価値のあるものなら頑張ろうと思うのですが....
0297>296
NGNG0299デフォルトの名無しさん
NGNG欠ける野郎はプログラミングなんかやるんじゃねぇ、と
>>295,>>297 さんは仰ってます。
0300300
NGNG0301入門者
NGNGコツについて詳しく述べられている書籍をご存知の方居られませんか?
啓学出版の、Cコンパイラ設計 という本が良いと聞いていましたが、
絶版で入手できませんでした。よろしくお願いします。
0302>301
NGNGあとはこのスレの前に方に十分紹介されてると思うけど。
0304デフォルトの名無しさん
NGNGアスキー出版からでてます。
Bison 入門
石川直太訳
大きな本屋さんなら置いてあるとおもいます。
0305300
NGNG0306>304
NGNGあれの元文書オンラインでどっかにあった様な・・
0307306
NGNG0308デフォルトの名無しさん
NGNGここ、
>アレ内容に割に高い。1500円だけど
しょうがないよ、だって読む人限られてるもん。
0309304=308
NGNG0310デフォルトの名無しさん
NGNGGNUへの寄付金も入ってるしね。
0311301
NGNG過去ログで紹介されていた本を図書館で探してみました。洋書は読めないので、和書だけですが、
・C stepupシリーズ(3) yaccによるCコンパイラプログラミング ソフトバンク
・プログラミング言語処理系 岩波講座ソフトウェア科学5
・計算機科学/ソフトウェア技術講座7「コンパイラの理論と実現」共立出版
が、ありました。まだ、ざっと目を通しただけですが、残念ながら文法定義の手法そのものについてはあまり触れられていないようです。
そこで、やはり、啓学出版のCコンパイラ設計という本を入手したいと思いまして、古本屋に行こうと思います。ここは田舎で大きな古本屋などないため、大阪まで行こうと思いますが、こういった専門書がありそうなお店をご紹介いただけませんでしょうか。
0312301
NGNG0313デフォルトの名無しさん
NGNGもう、どうでもよくなってるかもしれないけど、これ見つけました。
0314デフォルトの名無しさん
NGNGライブラリ化されてるとうれしいんですが..
どちらも C 時代なのでソースコードが汚いんですよね
0315デフォルトの名無さん
NGNG実装したけれど使うメリットがないというコメントがtarに入ってる。
lexはマルチバイトパッチのやり方やテーブル構造の工夫で
UNICODE対応は可能だけど、
ただ対応しただけではテーブルサイズが爆発的に増える。
たとえばマルチバイトパッチの仕組ではA+を(A)+に置き換え、
[AB]を(A|B)に置き換えるものがある。
またjava用のもののソースも見たけど、0x100以上のコードの
処理が実装されてなかったり、テーブルの圧縮の部分が
シングルバイトのものと同じのしか見てない。
0316デフォルトの名無しさん
NGNGほんと、これ欲しいんですよね。
だ〜れも作らないし、えっお前作れって(^^;
ひまできたら冗談抜きで作りたいんだよなぁ。
#flex の C++ 版・・・ありゃほんと〜に使えねぇ。
#作った本人も爆死してるんじゃないだろうか(笑)
#あれは、クラス化するよりも、テンプレート使って抽象アルゴリズムにするのが
#正攻法なのかもしれないと思ってます。
0317314
NGNGありがとうございます。大変勉強になります。
考えてみると yacc/bison は特にユニコードに対応する必要なさそうですね
flex のスケルトン見てみたのですが、なんて言うか・・
これって OOP じゃないような..感じです(^-^;
>またjava用のもののソースも見たけど
JFlexでしょうか? u100以上は処理しないのは keyword が実質 ASCII と等価な
マッピング部分限定になっちゃいますよね。一応、ASCII だけでも使えますけど・・
utf8 に適当に変換して騙しながら使うことになりそうです。
BMP 超えたコードが来たらこれもアウトですが...
0318314
NGNGはいです。作れるなら作りたいんですけど
時間と才能と経験がほしいところです... (^^;
理想としては flex source -> intermediate code になって
flex object がそれ読んで処理してくれれば.. って感じなんですが..
0319名無しさん@1周年
NGNGどうやって、スクロールさせるの?
0320デフォルトの名無しさん
NGNGWin95/98のコンソールは、スクロールできません。
エラー出力が見たいなら、ファイルに出力を書き込んでからそれ見てちょ。
WinNT、Linuxとかなら標準エラー出力をファイルにリダイレクト。
Win95/98はリダイレクトできないので、ソースの中でPrintStream
開いて、System#setErr()で標準エラー出力をそっちに変更しちまえ。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGjavac -J-Djavac.pipe.output=true Foo.java > error.txt
0323デフォルトの名無しさん
NGNGhttp://gaogao.moemoe.gr.jp/main.html#id6did4
> DMonkey
> Delphiアプリケーションへの組込みを目的としたスクリプトエンジン
JavaScriptのサブセットだそうです。ソース付き。
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG構文解析器は兎も角、字句解析器は自力で作っても大して
時間変わらないんじゃない?極端に複雑なのは別にして。
C言語くらいのなら数時間あれば一通り作れるでしょ?
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGすごい、私もできないことないと思うけど、数時間で作れとか言われたら
血尿でるかも。
0328デフォルトの名無しさん
NGNG字句解析器ならすぐ作れないか?
仕様はK&Rでも見ればいいし、lexerは決まりきった書き方があるし。
とはいえ、設計から完成までで数時間で作れといわれたら丁重にお断りするけど(笑
実コーディング時間が数時間なら同意。
0329デフォルトの名無しさん
NGNGlexがやってるのと同じように1文字読むごとに状態遷移して、ってのは無理だけどね。
一度数字がきたら、A〜F以外の非数字が来るまで数字として読む、シンボルの先頭に
許される文字がきたら空白や記号を読むまで、シンボルとして読む、って感じで。
漏れも字句解析は手書きだよ。日本語を扱えるようにするにはこれが一番。
0330デフォルトの名無しさん
NGNG全然C言語がわかってない。
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG字句解析器と構文解析器の違い知ってる?
0334デフォルトの名無しさん
NGNGなどと言わない方が賢明です。(藁
0335デフォルトの名無しさん
NGNG同意。
0336デフォルトの名無しさん
NGNG<数字> ::= 0|1|2|3|4|5|6|7|8|9
0337デフォルトの名無しさん
NGNG鬱駄根用
0338デフォルトの名無しさん
NGNG<数> ::= <数字>*
336さんが書かれたような表記をよくみます。これって
どのように読むのでしょうか?
0339デフォルトの名無しさん
NGNGEBNF 表記
結合規則
優先順位
lex yacc bison
などで検索>>338
現行の言語の仕様書や本とかには必ず付いてると思いますが。
0340デフォルトの名無しさん
NGNG<数>は<数字>の後に*がついたもの????
頭痛い
0341デフォルトの名無しさん
NGNG繰り返しだよバカ
0342デフォルトの名無しさん
NGNGおもたよ。
「山カッコ 数字 山カッコ閉じ スター」ってかんじでしょうか
0343デフォルトの名無しさん
NGNG<数> ::= <数字>{<数字>}
<数> ::= <数字>|<数> <数字>
どれがいいのですか
0344デフォルトの名無しさん
NGNG*は0回以上、+は1回以上の繰り返しじゃなかった?
0345デフォルトの名無しさん
NGNG3つ目はそのままでは実装しにくい。
0346345
NGNG0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNG0349困憊羅
NGNG0350デフォルトの名無しさん
NGNGあるよ。
このスレの過去ログ参照
0351困憊羅
NGNG29 desuka?
0352デフォルトの名無しさん
NGNGって本がまさにそれ>351
0353age
NGNG0354デフォルトの名無しさん
NGNG0355おしらせ
NGNGこのサーバーから降ろしてくれと言われたので近々公開停止になります。
利用禁止ではありません。
ミラーしてくれる人がいたら[email protected]まで。
0356デフォルトの名無しさん
NGNGこんな誰でも作れる程度のものを公開するなよ
0357デフォルトの名無しさん
NGNG具体的にどんなコードをはけばいいんですか?
0358名無しさん
NGNG1+2*3は ADD(1, MUL(2, 3))という構造、
IF COND THEN STMT1 ELSE STMT2は
IF(COND, STMT1, STMT2)
トレースのやり方は
入門書に有るけど、
X ::= A B;
というパターンの定義があると
スタックにAとBが乗っかると
Xに変換するという仮想機械を造って実現する。
2つ目の条件式
Y ::= X B
でABBがスタックにあると最終的にYという結果になる.
続きがいるならまた後で。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNG構文解析は構文木作って終わりだよね?
0361デフォルトの名無しさん
NGNG構文解析の結果が木になるとは限らないぞ。
たまたま木になる文法の言語かどうか?ということだ。
たとえばForth系言語だと木じゃなくフラット構造にしかならない。
木をバイトコード(フラット)形に展開する手順を
ユーザーがやってくれるようなもんだからな。
木になる文法のほうが人間様にとってはふつー快適だとは思われるが。
0362デフォルトの名無しさん
NGNG木になる文法、言い換えれば構造化された文法かね。
0363デフォルトの名無しさん
NGNGニモニックとオペランドという構造もってるから。
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNG汗は、1行の範囲内では構造を持った文法だ、とでも
呼ぶべきなのかも。
上下方向は…ありゃアセンブラという言語(?)から見れば
あくまでセマンティックの問題でしかないよねえ?
どこへどう飛ぶかは100%プログラマの責任であって
「アセンブル」エラーで教えてくれたりはしないという。
>>364
言語処理系作るの、マヂ、楽よ。
厨房の夏休みの自由研究の題材でもいいくらいに、楽。
他にも楽な言語は多いだろうけど、
構文というものを"いっさい"処理しなくていい言語なんてのは
Forth系くらいしかないんじゃないかな。
0366デフォルトの名無しさん
NGNGForthってどういうコードになるんですか?
後置記法って事しか知らないから、簡単に解析きぼん
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG実用レベルの汎用言語を作るのは難しいが、
機能を絞った処理系なら本当に楽だぞ。
lex+yacc使ってインタプリタで最適化なしとか。
0370デフォルトの名無しさん
NGNGForthってどういうシンタックスになるんですか?
後置記法って事しか知らないから、簡単に解説きぼん
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGひたすら「オペレータ」つまり単語を並べる。それだけだ。あれの文法は。
それを計算機(言語処理系)が順に処理する。それだけだ。
だからlexは使うとしてもyaccは要るかどうか怪しい。
1 2 add print ってのはそれぞれ、
1を記憶する(記憶場所としては御存知Stackを使う)
2を記憶する
1つ前の記憶と2つ前の記憶を取りだし、足し、記憶する
1つ前の記憶を取りだし、画面出力する (printってのは標準OPじゃないが、説明用
って意味。機械はそれぞれを順に実行するだけ。
味噌は、「どの単語がどの場面で出たか?」なんてことを
機械はいっさい感知(&関知)してない、ってことだ。
ふつーの言語は関知する。*がポインタなのか掛け算なのかとか、
,が引数区切りなのかそうじゃないのかとか、を考える。
で、PSには、それが無い。そういう意味ではアセンブラと同じだ。
なにがどんな順で出たかの責任はプログラマが負う。
{ 1 2 > } { 1 print } { 2 print } if
{と}は、実行ブロック(実行可能配列ってのが正式名称。
つまりプログラムも所詮はOperatorの配列に過ぎぬ。
実行可能だというフラグがONになるだけ)としての
切りだし処理を開始する/終了する、という、これまた単なるOP。
ifは、3つ前に記憶したブロックを評価し、
真なら2つ前のブロックを、偽なら1つ前のブロックを、評価する
という、これまた単なるOP。
それ以外のヒネリは、いっさいなし。
/aaa 1 def
/bbb {1 print} def
defは、2つ前のシンボル名で、1つ前の値を、「辞書」に登録するというOP。
aaaというシンボル名で1を登録。
bbbというシンボル名で{1 print}という実行可能配列を登録。
/aaa 1 def
aaa print >>>>> 1
3 dict begin /aaa 2 def print end >>>>> 2
aaa print >>>>> 1
dictは容量n個の辞書を作って記憶するOP。
beginは1つ前の記憶を取りだし辞書Stackに記憶するOP。
endは辞書Stackのtopの辞書を捨てるOP。
Stackが1つ増えた(辞書Stack)だけで、ローカル変数も実現。
名前(変数名?)解決の規則は、辞書をStackのTopから順に下に
検索するというもの。TOPで空振りしたら2つ目に当たる。
言い忘れたがStackは、OperandStack(さっきから記憶記憶と書いてるあれ)
と辞書Stackが有る。他にGraphicに特化したStackもあるが本質じゃないんで割愛。
0373デフォルトの名無しさん
NGNG結局、コンパイル(?)されると、
プログラム全体がソース見たマンマの順序の
巨大な実行可能配列になる、と考えるとすっきるする。
バイトコードならぬオペレーターコードとでも言うのかな。
ん?おぺこーど?
まぁただ、{}ぐらいは実行時じゃなくコンパイル時に解釈する
ようにしたほうが、実装は楽かな。
そうすると結局コンパイル結果は、ひたすらまっすぐなコード配列、
ではなくて、時折サブルーチン呼び出しの枝が伸びた
木のような形のコードツリーが、内部的に出来あがる。
木といっても構文木の木とは全然違う形&意味だ。
構文木は実行順序に対して垂直に刺さった木(の根?)みたいな感じ
だが、上記コードツリーは実行順序に沿わせる向きに寝かせた木
という感じだ。
それと今更だが、というか見れば判るが、
実行可能配列つまりルーチンもまた
FirstClassObjectになっているわけだ。
実行の区切りが見えない(あくまでOPの処理内容に依存)ので
やりたくはないが、死ぬ気でやろうと思えば恐らく
Lispと同じ位(ってLispは知らぬのだが)の
記述能力はあると思われ。
0374デフォルトの名無しさん
NGNG形としては、
(func param param ...)
基本的にこれしかない。
syntaxも例えばifなら
(if test-expr true-expr false-expr)
つまり先頭がfuncやifの様なシンボルで、
それが何かに関連付けられていればその文を実行できる。
関数だとparam部分が全て評価されてから関数に渡るけど、
ifの様なsyntaxの場合は部分的に評価される
test-exprを評価し、真ならtrue-exprが評価される偽ならfalse-expr
無名関数
((lambda (x y) (+ x y)) 1 2)
=>3
これは、2引数を取る無名関数。
(lambda (x y) (+ x y))がfuncに対応し、1 と 2がparamに対応する
(define func (lambda (x y) (+ x y)))
と定義すれば
(func 1 2)
3
で普通の関数と同じ結果になる
あとはこれの応用。
処理系はforthに次いで簡単に書ける。
0375デフォルトの名無しさん
NGNGまぁそう言うな。PSだって知らぬ人多いだろう。
Lispほど知る必要無いというのもある意味真実だが(藁
前置か後置かの違い、
前置を実現するためのカッコが有るかないかの違い、
その2つ程度なんだろうな、LispとPSの差は。
両者の中間みたいな感じの言語を
作ることは{できる,試みる意味(藁)は有る}か?ってのが
今ちょっと感じている疑問というか興味。
どうなんだろう?ていうかナニをもって中間なのかも
よく判らないのだが…
>無名関数
{add print} 1 2
1 1 rot ####Stack上の積み順を「回転」させるOP。これで無名手続きがTOPになるよね?
execute ####StackTopのポインタ(?)を「実行」するOP。
こんな感じか。Stack処理手順を手作業しないとならんのは
ちとダサイところ。
0376デフォルトの名無しさん
NGNGlispは他にリスト操作もあるからね。quoteの概念を理解できるか
どうかってのがある。(使い続けていれば自然に身につくけど)
>>375
繰返しは
{test-expr} {body-expr} while
ですか?
「{test-expr} が真の間 {body-expr} を繰り返す」
と書けますね。(これがMIND?)
>両者の中間みたいな感じの言語を
間をとると中置記法?
lispは式をリストと見なす事ができるので、中置記法は後づけで作れます。
forth系でのやり方は知りませんが、多分同様な事が可能でしょう。
所でforth系はスタックを直接操作するからgcみたいな機構は必要無い?
作りたくなってきた。
0377デフォルトの名無しさん
NGNGたしかforthだとimmediate wordってのがあって、
これはcompilation mode(だと思った)でも動作する。
それ以外のwordは、compilation modeだとそのword自体が走るんじゃなくて
そいつへの呼出にcompileされる。
: func (: はcompilation modeに入るword)
1 2 +
; (; でcompilation modeを抜ける)
0378デフォルトの名無しさん
NGNG見つかった処理系は
Portable Forth
GNU ANSI Forth
SCMForth (Schemeで書かれたサブセットらしい)
あとはPostScriptで検索した方が早いかな?
0379デフォルトの名無しさん
NGNGhttp://www.taygeta.com/forth/
0380デフォルトの名無しさん
NGNGhttp://www-lab.ee.uec.ac.jp/text/forth/
0381デフォルトの名無しさん
NGNGPSでリストの代用になりそうなものを探すとすると
配列と辞書くらいかな。サイズ2の配列か辞書を作ればいい。
まぁ言語が直接支援してくれないんで辛いけど。
同様に、Objectの代用になりそうなものも
配列か辞書だな。勿論これも直接は使い勝手悪いが。
>{test-expr} {body-expr} while
んな感じ。whileそのものは無いけど
似たようなのは有るし当然自作も可能。
>間をとると中置記法?
なんか違うような気がする(^^;
>所でforth系はスタックを直接操作するからgcみたいな機構は必要無い?
Stackゆーても(PSは)Stackに記録される値はあくまでPointerなので
あるObject(文字列にせよ辞書にせよ配列にせよ)が
複数箇所(StackやArrayやDict)から同時に参照されることは有るし、
そういう意味ではリファレンスカウントだけじゃ循環参照が云々…
とかいうアッチ方面の問題は、同じように全部抱えてると言えます。
面倒ならboehmGCだな(藁
0382デフォルトの名無しさん
NGNGそれって、インタラクティブに(BASICみたいに)ソースを
1行づつ入力&実行するモードと、そうでないモードとを
うまく使い分けるための機能、でもあるわけですよね?きっと。
直接関係ないがPSにはbindというOPが有るらし。
/aaa { 1 2 add foo } bind def
と書くと、1つ前の実行可能配列の中の
アドビ(藁)定義済みOPを、その名前への参照じゃなくて
実行実体(?)への参照に置換してくれるそうだ。
ここではaddがソレだな。
これで実行が少し速く効率的になる、らし。
定義済みOPをどっか別のReadOnly辞書で一元管理してる模様。
まぁ類似実装系を自作するときには、面倒なら省ける機能の
筆頭でもあろうけど(藁
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385377
NGNG> それって、インタラクティブに(BASICみたいに)ソースを
> 1行づつ入力&実行するモードと、そうでないモードとを
> うまく使い分けるための機能、でもあるわけですよね?きっと。
いや、Forthにはインタラクティブかどうかって区別はほとんどなかっ
たような。
immediate wordっていうのは何をするためのものかというと、例えば
ifならまず条件ブランチ命令をおいて、そのアドレスを記憶しておく。
そのあとthenで条件ブロックが終ったところでブランチ命令のところ
に終端までのオフセットを書き込む。
つまりほんとにコンパイラのコードジェネレータと同じようなことを
したりするためのもの。
> アドビ(藁)定義済みOPを、その名前への参照じゃなくて
> 実行実体(?)への参照に置換してくれるそうだ。
つまりデフォルトでlate bindingなのをその時点でbindしちゃうわけ
ね。Forthはlate bindingじゃないし、前方参照も許してないからそう
いうのはないけど。
Forthの実装もいろいろで、小さいwordはその場にインライン展開して
しまうのとかもあったはず。
おもしろいのは、m68000用でipにA7レジスタを使うやつ。各wordの終
りにはrts命令がおかれてる。
0386デフォルトの名無しさん
NGNGこれの文法がよくわかりませんでした。
そこで、問題
(a) if (b) else (c) then (d)
(a)〜(d)は式とします。
例えば、(a)〜(d)にそれぞれ何が入るんでしょう?
また、条件式と関係の無い式を(a)〜(d)の中から選びなさい。(15点)
0387デフォルトの名無しさん
NGNG(b) (a)が真のときに実行される式
(c) (a)が偽のときに実行される式
(d) 条件式と関係の無い式
0388デフォルトの名無しさん
NGNGやっぱり条件式はifの前に書くんですね。
thenの位置が謎ですが。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNGやれ倍精度整数だ実数だとかいいだしてから、ちょっとうざくなってきた
インタプリタもワードを並べて置いただけの頃は数バイトで済んでたのにね
何やかんや言っていても、私は今でもあこがれてるな
http://www.forth.org/
FIGなんてまだあったんだなぁ
0391デフォルトの名無しさん
NGNGほぼ同じ見方ができるけど、
C言語 a(b(c())); lisp (a(b(c)))
forthはスタックが丸見えだからc b aという感じに記述するから違和感あり?
0392デフォルトの名無しさん
NGNGforthは境目がないのが痛い。
どっからどこまでをどう括って解釈すべきか?は、
あくまでコンテクストと意味に依存するから、
コードを理解できるかどうかは
ほぼ語彙の知識の有無に依存しちまう。
人間様には痛い。
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGコールバック関数の辺りとかはどうやってるの?
例えばWNDCLASSに登録するコールバック関数とか。
やっぱり内部で専用に作ったCのコールバック関数を用意してるのかな?
0395デフォルトの名無しさん
NGNGどの処理系?
まあ、処理系がサポートしてその部分を隠してるなら、何だかの方法で
フックしておく必要はあると思うけど・・・
内容としては若干スレ違い気味?
0396デフォルトの名無しさん
NGNGえーと、WindowsのGUIをサポートしてる処理系の事です。
(メジャーなスクリプトや言語の処理系はほとんど対応してると思いますけど。)
CALLBACKやWINAPI(__stdcall)の関数を引数のつじつま合わせて呼び出すのって、
Cでそのままの型でテンプレート持っておくか、アセンブラで書くしか無いですよね?
Cの関数にしちゃうと、コールッバックの形だけ関数定義が必要になってしまうんで、
他にいい方法が無いか探してます。
アセンブラでやるしかないですかね。
LRESULT CALLBACK WndProc(HWND hwnd, UINT m, WPARAM w, LPARAM l)
というコールバックだったら
引数は、
8[esp] ;hwnd
12[esp] ;m
16[esp] ;w
20[esp] ;l
戻り方は、
ret 16
としないといけないみたいなので、引数やret xxxの決定をどうやって
動的にやるのかがわかれば良いんですが。
0397デフォルトの名無しさん
NGNG何をやりたいのかサパーリ分からん
0398デフォルトの名無しさん
NGNG多分、GUIの作成をサポートした処理系のことを言ってるんだと思うけど、
スクリプトで動的に生成されるプロシージャーは全ウインドウ共通にする。(ウインドウのタイプごとに分けてもいい)
内部で処理したいメッセージ等は共通のプロシージャーに直接書く。
HWNDをキーとしたハッシュテーブルを作っておき、CreateWindowしたあとに戻り値のHWNDと必要なデータ(多分メッセージがきたときのスクリプトの飛び先の情報なんかになるかな)とともに保管する。
どのウインドウからのメッセージなのかは第一引数のHWNDでわかるから保存しておいたハッシュのデータをもとに適切な処理をすればいい。
(ボタンなどの子ウインドウからのメッセージの場合はWM_COMMANDのlparamがメッセージの送り元になるので注意。)
こんな感じでどうでしょうか
0399398
NGNGスクリプトで動的に生成されるプロシージャーは
↓
スクリプトで動的に生成される"ウインドウの"プロシージャーは
0400デフォルトの名無しさん
NGNGdel方面から話題2つ。
1:delにおける解決方法
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm
2:delにおける独占方法(わら
この特許にひっかからないようにヤらないと駄目だな
http://www.borland.co.jp/news/patent.html
0401デフォルトの名無しさん
NGNG混乱してませんか?
とりあえず簡単なインタプリタ(コンソールベースがいいと思う)を作ってみてはどうでしょう。
コンパイラであれば、その部分はテンプレート的に生成しておいて、あとで命令スケジューリングして
依存関係を考慮しつつ並べ替えます。
スクリプトの場合は考える必要はないです、やり方は 398 さんのやり方が妥当だと思います。
>>400
あなたも混乱してません?発言がdel厨房っぽいぞ(藁
0402401
NGNG0403401
NGNG0405デフォルトの名無しさん
NGNGATLで似たようなことやってるよ
0406デフォルトの名無しさん
NGNGてゆーかまんまdel亡です。
delにおいてくだんの問題はこう解決されてる、っていう頁ね。
>>404-405
特許頁見たら、del発売の頃から申請して
今ごろやっと通ったという特許らしい。
とはいえ、ふつー誰でもやる技法だと思うんだがな。
ヘジ(delを作った人らしい)もヤキまわったか(わら
0407396
NGNG汎用性を考えて、コールバック関数のアセンブラコードを動的に生成する事を
考えています。
例えば、RegisterClassをインタプリタで実行するときに必要な、
WNDCLASS構造体のコールバック関数を設定する時、
インタプリタ言語側のシンタックスで
LRESULT func(HWND, UINT, WPARAM, LPARAM);;
という型の関数が必要である事を処理系に伝えます。
処理系側で、コールバック関数のテンプレートをヒープにコピーして
インストラクションコードを追加/書き換えた物を登録する。
という方法です。
(でもアセンブラスキルはいまいちなので、完成するかどうかは判りませんが。)
なるべく同期処理を行なわずにスレッドセーフにしたいのもあります。
>>398さんの方法も考えたんですが、汎用性が無くなるのが嫌なんです。
>>401
コンソールベースのインタプリタはもう存在します。
DLLを動的にロードしてAPIを直接扱ってGUI対応するのが目標です。
0409デフォルトの名無しさん
NGNGそんなんじゃ出来ないから質問してるんじゃないの?
0410401
NGNGという事と
型からどのようにスタックフレームが決定されるのか
という問題ですね。
この辺になってくると、Windows の知識がかなりいりそうですね。
自分はこのへんになってくるとゲーム屋のMIPS屋なので
ウインドウズは Windows は GDI かじった程度なので知識量不足です。
このへんはウインドウズの低レベルインターフェイスの
詳しい人が出てくるのを待ちますか・・・(^^;
お役に立てなくてすみません。
>>アセンブラコードを動的に生成
ちなみにコードの自動生成はあんまりお勧めできないです、
近年のCPUの状況を考えると・・・
テーブルジャンプしたほうがいいとかいう事になるかもしれません。
なぜかといいますと、インストラクションキャッシュとデータキャッシュは、
まず間違いなく分かれていますから、生成したコードを実行するには
キャッシュを一旦全部メインメモリーにフラッシュして再度読み込みしないと
いけません、8K〜16Kbyteをメインメモリに書き込むとなると
これはかなりタスクスイッチ並に嫌なものがありますので、
できれば最終手段にしたほうがいいのでは、と感じています。
もしも、どうしてもやりたいならば、次の様にしてみることをお勧めします。
ret_2: ret 2
ret_6: ret 4
ret_8: ret 6
...
とコードどを全部あらかじめスタテックに生成しておいて、これにテーブル
式でジャンプしてみてください、このほうがはるかに効率が良いはずです。(多分)
0411396
NGNG伝わりませんでしたか?
例えばRegisterClassに登録するコールバックと、
EnumWindows、EnumChildWindowsに設定するコールバックの関数の型は、
それぞれ違いますよね?(EnumWindowsとEnumChildWindowsは同じですが。)
また、将来新たに作られたり、ユーザー側が作ったDLLのコールバック関数も、
型が同じとは到底思えません。
その全てのコールバック関数の動的対応をどうするか、について質問しているのですが。
0414396
NGNGその方法は衛生的で良いですね。
まだ引数をどうするかの問題が残ってますが。
それと、書き換えは遅くなる可能性があるんですね。勉強になりました。
でも一度作って、それを使いまわす状況ならいいでは?
とも思ったんですが違いますか?
0415401
NGNG多分OKだと思います。
スクリプト中のどこかにまとめて宣言しておいて、
起動前に全部作ってしまうのがいいかも知れませんね。
0416396
NGNGそうですか。
とりあえず作ってみます。
みなさんありがとうございました。
0417デフォルトの名無しさん
NGNG無理矢理キャストするというのは駄目かな?
0419396
NGNG(まだEnumWindowsでしかテストしてないですけど。)
これの実装、コード量の割にかなり辛かったです。
(アセンブラをあんまり触わってないのが原因ですが。)
とにかく、DLL-APIの直呼出しと、コールバックが使える様になった事で、
かなり表現の幅が広がった様な気がします。
0420396
NGNGそれにしても、winapiインクルードファイルの変換は大変ですね。
今の所メッセージは全部DefWindowProcに渡してるからいいけど、
インタプリタ側で処理を追加していくと、かなり遅くなりそうです・・。
というわけで、お答え下さった方々、ありがとうございました。
0421デフォルトの名無しさん
NGNGHSP用のloadlib.dllのソースが任意のdllの関数を呼び
出すためにマシン語使ってたな。
0422VB厨房
NGNGhellプ(for ActiveServerPages)
0423VB厨房
NGNGそれっぽいやつヨロピク
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG思いっきりスレ違い、スクリプトすれかVBスレに逝きなはれ。
0427デフォルトの名無しさん
NGNGC/C++は#ifndef#define#endif、マクロ定義
Pascal/perl/lispなどはuseとかrequireとか。
やっぱ後者の様にロードされてなかったらロードするって処理を
言語側でやった方がわかりやすいのかな。
こう考えるとC/C++のマクロって汚いですね。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG管理に、違う名前空間を使うか、グローバル変数として持つのか。
ぐらいの違い?
ふつーの変数にしとけば、プログラム側で覗けるから
便利なんじゃない?(前例が無ければ後者がお勧め)
どちらにしろ特別な処理はあんま増やさない方が良いよ。
0430デフォルトの名無しさん
NGNG二重ロードされても問題ないような文法にしてしまうとか・・・(藁)
それは、ともかくとして
インクルード宣言作りは「ファイル分離の目的」というのを明確にするべきではないだろうかと最近考えてたりします。
C++ のテンプレートなどは、綺麗に分離されない文法なので、ソースがあるべきところと宣言のあるべきところがゴチャゴチャになってしまいます。
#まあ、自己責任で出来ないことはないんですが・・・
作る言語の構造を考えて、これはどのようにコードが分類されれば、綺麗に整頓できるかが分かれば、インクルードの形式もそれに伴って綺麗な形の物を考える事ができると思います。
先に構造ありき、次に分類方法を考えて、それができたらインクルード方法と思います。
0431デフォルトの名無しさん
NGNGCINTの作者とか苦労してそうだね。ハゲてるし。
0432デフォルトの名無しさん
NGNG(hageはともかく)同意。
NULLとかの誤解も多いし。
あのプリプロセス処理は早めにつぶすべきだったと思う。
確かに便利だけど、代替手段は他にもあったと思う。
0433デフォルトの名無しさん
NGNGマクロの実装は大変か?
たいしたことないと思うが。手を抜きすぎて不便なのはわかるが。
0434デフォルトの名無しさん
NGNGこれはマクロが完全に言語の一部だから。
0435427
NGNG後者で作ってみます。名前空間の独立は考えていないので、
グローバル変数か何かに、load情報を記録していくことになりそうです。
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNGオレはハゲてないよ。
0438デフォルトの名無しさん
NGNGすまん、はげそうです
0439デフォルトの名無しさん
NGNG作者を写したmovieが入っているのだが、ハゲていたな。確かに。
0440デフォルトの名無しさん
NGNGそういうこと言わない、気にしたらストレス溜まってハゲが加速する。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGyacc/lexでファイル終端の構文エラーを検出する方法を教えて下さい。
line : hogehoge semicolon {}
| error semicolon {}
;
こう書くと semicolon が無いとうまくエラーになってくれないので
終端の semicolon の無い行のエラーが検出できなくて困っています。
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG0445442
NGNGありがとうございます。
お教えのとおりやってみたらできました。
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG↓
トークンに分割
↓
中間コード生成
↓
実行
↓
(゚д゚)ウマー
0448デフォルトの名無しさん
NGNGでも無関係な友人がハゲていってる様です。
どうすればいいでしょう?
0449デフォルトの名無しさん
NGNGスクリプト屋同様ヤバイです。
以前使ってたハツモールヘアグロアーSは効きましたよ。
今なんとか大丈夫、でもまたデコあたりが・・・
もうハゲ・ズラ板プログラム技術出張所ですな(藁
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGここのリンク良かった
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html
0452デフォルトの名無しさん
NGNG(参考になるかはともかく)けっこう日本語のページあるみたいだけど
http://www.google.co.jp/search?hl=ja&safe=off&q=ANTLR&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGすまぬ、そのへんは見ました。
0455デフォルトの名無しさん
NGNGなにがわからないんだ
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNGhttp://www.southern-storm.com.au/treecc.html
暇つぶしにこれをつかってみます。
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNGおまえが作れ
0465デフォルトの名無しさん
NGNGオマエモナー
0466デフォルトの名無しさん
NGNG0467ひlrm;ろゆき@菅lrm;直人
NGNG0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG0471名無し
NGNGそのへんのことについてくわしくのってる書籍はありますか?
0472デフォルトの名無しさん
NGNGとりあえず、K&R持ってなかったら買う。
仕様載ってるから。
その後、自分の気に入ったのを買う。
人からすすめられたやつもいいかもしれないけど、
なるべく、自分に合うやつがいいとおもう。
一回どっかで立ち読みでもするといいよ。
でも、コンパイラ本って少ないんだよな・・・
0473デフォルトの名無しさん
NGNGを始めに読むのがいいかも?。
情報科学こんせぷつ8 コンパイラの仕組み
と上の本を併用ってのは?
2冊で1万だし。
コンパイラの構成と最適化、は最適化が気になり始めてからのほうが
いいと思う。
0474471
NGNG0475デフォルトの名無しさん
NGNG>とりあえず、K&R持ってなかったら買う。
>仕様載ってるから。
Cコンパイラ作りたいって人間に「仕様載ってるから」って
理由でK&Rを進めるのかよ(*´Д`*)
0476デフォルトの名無しさん
NGNGC の構文が BNF で書いてあるから結構使えるよ。
0477デフォルトの名無しさん
NGNGそれ以外の理由「でも」薦めるべき、という意味なら賛同するが、
それ以外の理由「で」薦めるべき、というなら賛同しない。
仕様書をパスして作ったんじゃ最早Cじゃないので。
Cもどきを作るというなら話は別だが、471はCだと書いてるね。
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGBNFだけでコンパイラは作れません。
0480476
NGNGというかコンパイラ作りたい人がK&R持ってないとは思えなかったりして。
0481デフォルトの名無しさん
NGNGCコンパイラ作るのにK&Rを勧めるのは悪いとは言わないけど、
あまりに初歩的すぎるから、驚いたんだよ。
K&Rに載ってる情報量じゃ、それこそCもどきしか作れない。
0482デフォルトの名無しさん
NGNG>K&Rとドラゴンブックでいいでしょ。ダメ?
だめだね。
0483デフォルトの名無しさん
NGNGドラゴンブック読んでる人間はこういう発言はしないと思われ。
0484デフォルトの名無しさん
NGNG0485名無しさん
NGNG0486デフォルトの名無しさん
NGNG0487名無しさん
NGNGPascalでPascal書いてる。
「P4-Pascalの言語処理系」(共立)
0488デフォルトの名無しさん
NGNGアセンブラでアセンブラを作れる。
0489デフォルトの名無しさん
NGNG今更Pascal「ごとき」低レベルな言語を書いてもレベルが低いと
言っているようなものだね。
JavaならOS非依存だからコンパイラなど作る必要なし。
もっとレベルの高い会話をしろよ。
0491デフォルトの名無しさん
NGNGネタでしょう・・・
もし、ネタじゃないなら、この板も落ちたもんです・・・
0492デフォルトの名無しさん
NGNGあからさまにdel厨を煽っています。無視しましょう。
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG>>492
それにすら成ってないと思うのに一票。PascalとCは同程度。
むしろ、色々な面について
(コンパイラを作るのが楽な)簡単な言語のほうが「良い」わけだから、
華々しさフクザツさを競うほうがドキュ。
>>491
ネタだとしても489は諧謔性が低すぎます。笑いも取れないネタに価値なし。
そういやJavaBytecode用のアセンブラ、ってのも誰か作ってたよな(藁
0495デフォルトの名無しさん
NGNGいったい誰が使うのでしょう・・・
http://sourceforge.net/projects/jmk
0496デフォルトの名無しさん
NGNGAnt があるしねえ。
Ant の便利クラス作りまくりアプローチは好きでなかったりするが。
0497デフォルトの名無しさん
NGNG解説のページってありませんか。
0498♯6411
NGNGコンパイラなんてつくれないでしょー
漏れ的には超初心者なんて自称してる限りは
無理無理と思われ。
0499デフォルトの名無しさん
NGNGよいですか。
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG大学入れ。
0502デフォルトの名無しさん
NGNGyacc,lexはまぁどうにか覚えるとして、498のように
データ構造がほげららというなら、「デザインパターン」
の、Visitor, Composite のあたり。ネタではなくマジ
です。
0503デフォルトの名無しさん
NGNG僕は、高専に入るつもりだけど・・・
0504デフォルトの名無しさん
NGNG別の言語に翻訳するコンバータをつくるのが楽で楽
しいカモよ>>497
0505名無しさん
NGNG0506497
NGNGないでしょうか?
0507名無しさん
NGNGもう少し基本的なお勉強を・・・
0508♯6411
NGNGマジアドバイス。ホントに超初心者なら、
まずはいろんなコンバータつくってみるってのは
どうかな? 言語トランスレータに限らず、
その手のものはいろんな意味で勉強になるから。
なぜならば、人様のファイルフォーマットを捌く
ってことは、データ構造の勉強になるのだよ…
0509%%%
NGNG0510497
NGNGもっと基本的なことを学んでからコンバータというものを作ってみよう
と思います。
0511デフォルトの名無しさん
NGNGそれで問題ないと思う。
0512♯6411
NGNG>>509
つくりたがる人間も決して多くないし、
いざ造ろうとするとそれはそれでいろんな
知識が要求されて大変だからね。
漏れは10年以上前、工房出たばっかりのときに、
当時の上司にyacc本渡されて、それで
自分の人生が1/8くらい決まったもんだしなー。
一時期は赤いドラゴン本読みふけってたし。
それでも、マシンコードを吐くコンパイラは
未だ掻いたことなし。スクリプトインタプリタは
大量生産できるようになったけどね。
0513デフォルトの名無しさん
NGNG自作言語->Cのトランスレータ作ったら良いと思う。
0514デフォルトの名無しさん
NGNGデザインパターンってのは、上の書き込みだと書籍の名前だよ。
yaccの雑誌だと、「yacc/lex 五月女健治 啓学出版 1992」
ISBN4-7665-1140-9 が異様に親切で簡単でかなりおすすめ
できるんだが間違いなく絶版だろうなぁ・・。
0515デフォルトの名無しさん
NGNG−プログラムジェネレータ on UNIX−
五月女健治 著
ISBN4-924998-14-1
http://www.catnet.ne.jp/t-press/yacc.html
0516デフォルトの名無しさん
NGNG同じもの??
0517514
NGNGスマソ
0518デフォルトの名無しさん
NGNG>
>絶版.
>入門者にとって分かりやすく,特にyaccでのエラー処理に関して詳しい.
>改訂されたものが,テクノプレスから出ている.
改訂らしい。
ソース
http://www.ulis.ac.jp/library/Kanpo/Vol14No3/nakai.html
0519デフォルトの名無しさん
NGNG制御構造あたりは簡単に作れそう。
Schemeは継続と末尾再帰があるから、大変かな。
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG0522♯6411
NGNG絶版になってしまったので、yaccスキー連中が
右往左往するハメに陥ってたわけだな(w
ところで、漏れが最初手にした書籍は、
啓学出版なんだけど、五月女さんじゃなかったん
だよなー。誰だっけ? 誰かフォローきぼんぬ。
0523デフォルトの名無しさん
NGNGhttp://sysneitf.hoops.ne.jp/books2/QueryAll35.html
Introduction to Compiler Construction With Unix
http://www.amazon.com/exec/obidos/ASIN/0134743962/103-5033895-5249448
Out of print!
0525pf
NGNG0526デフォルトの名無しさん
NGNG今日池袋のジュンク堂にあった
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
01/08/28 21:47ID:o3vII6Bsアセンブラまでじゃなくて、ちゃんと機械語までの変換
を解説した本が欲しいのですが・・・
0531デフォルトの名無しさん
01/08/28 21:58ID:aZXv.NLA意味不明。
Intel行け。
0532デフォルトの名無しさん
01/08/29 00:02ID:SXxGnN5kなるほど。
0533デフォルトの名無しさん
01/08/29 01:31ID:GIhJkjc.VisualC++とかならasm/codファイルの出力とか参考になると思うよ。
0534デフォルトの名無しさん
01/08/29 02:31ID:M4BjMY5w湯淺 太一 著
http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/shokodo/index.html
http://www.shoko-do.co.jp/infobooks/ISBN4-7856-2050-1.html
http://www.yfcbookshelf.com/compiler's%20books4.htm
0535デフォルトの名無しさん
01/08/29 07:07ID:JQLDr6soありきたりな内容だな
0536534
01/08/29 12:35ID:LA57eUsQ>>534
は、
>>530
へ。
機械語まで・・・ってのがよくわからんけど。
本の説明こぴぺ。
>具体例を示すためにC言語とPentiumプロセッサ(アセンブリコードが
>比較的読みやすい)を主たる対象とした.
0537530
01/08/30 17:54ID:s3V0FXOwその本は持ってます。Pentium用だし、作者が好きなので。
でも、なぜかアセンブラを生成する所までしか解説してないんですよね。
movのフォーマットだけははじめの方に解説されてました。
ちゃんと1と0の列の機械語まで変換してexeを生成したいのです。
インテルのサイトはいい文献がたくさん転がってましたが、
命令のフォーマットの解説は残念ながら見つけられません
でした。
0538デフォルトの名無しさん
01/08/30 18:02ID:.S8.cB/wftpからもぐっていけばpdfでそれぞれのCPUに対応したリファレンスが置いてあるよ。
0539デフォルトの名無しさん
01/08/31 02:19ID:JrJLvbeM0540530
01/09/06 00:15ID:igcvqESo80386なのでちょっと古いですが、
Intel 80386 Programmer's Reference Manual
www7.informatik.uni-erlangen.de/~msdoerfe/embedded/386index.htm
のChapter17に非常に詳しい解説がありました。
0541デフォルトの名無しさん
NGNG既出っぽいけど、KEIO SFC の計算機口論の授業のページ。
コンパイラの基礎だな。
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG13. Garbage collection
http://www.cs.princeton.edu/~appel/modern/toc.html
0544デフォルトの名無しさん
NGNGそれはタイガーブックだ。ついでに、タイガーブックは米国のamazonで評判悪いぞ。
0545デフォルトの名無しさん
NGNGhttp://cseng.aw.com/book/toc/0,3830,0201100886,00.html
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGなるべくシンプルなのが良いんですが
0548♯6411
NGNG中間コードが処理系内部で閉じてるんだったら
なんでもいいんでは? あえてバイトコードに
こだわる必要なし。
ちなみにgccは木を作ってるね。
0549デフォルトの名無しさん
NGNGなんでもいいって、なんかあるでしょう?
木とか、そんな解答じゃなくて、
もっと具体的なやつ教えてください。
0550rr
NGNGスタックとオペラントとジャンプの羅列
0551デフォルトの名無しさん
NGNGJavaVMの仕様書
0552デフォルトの名無しさん
NGNGターゲットとなる全てのプロセッサのマニュアル。
プロセッサが1種類だけなら中間コードなんていらん。
0553デフォルトの名無しさん
NGNGシンプルなの、つってんじゃん。
バカ?
0554デフォルトの名無しさん
NGNGあまりいきがるなよ。
0555デフォルトの名無しさん
NGNGシンプルだろ。
0556デフォルトの名無しさん
NGNGhttp://www.sex-jp.net/dh/02/
http://www.sex-jp.net/dh/03/
http://www.sex-jp.net/dh/04/
0557デフォルトの名無しさん
NGNG金持ち(ビルゲイツ並み)になるための良い方法はないでしょうか?
なるべく楽なのが良いんですが
0558デフォルトの名無しさん
NGNG人間失格
そして・・・
age
0559デフォルトの名無しさん
NGNG読ませたりしてバグを探したりすると思うんですが、
そういうテスト用コードは、どこに行けば手に入れられるでしょうか?
言語はCです。
0560デフォルトの名無しさん
NGNGなんか出来の悪いDSPなんかだと 特殊な処理は特定のメモリ番地に書き込む事で発動される
なんてのが大量にあるよね
割算用のアドレスがあってそこに書き込んでから何ステップ後に読むと割算結果が得られるとかね
これ、使う方はなんかキツイんだよね。
を加算とか論理演算でもやられると読む方は嫌になるかもね
;1+2
mov (AddSrc),#1
mov (AddDst),#2
NOP
mov reg,(AddDst)
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNGgcc の test suite でも使ったら?
0563デフォルトの名無しさん
NGNGなんとか動いてはいるのですが、食わせるスクリプトによって
fatal flex scanner internal error--end of buffer missed
といったエラーがでます。
Flexの吐いたコードから発生しているエラーと思われるのですが、
このエラーはいったい何なのか教えていただけないでしょうか。
使用しているFLEXはversion 2.5.4です。
0564デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGってマイナーでしょうか?
よく"\r\n"や"\n"直接書くかわりに定数にしてるんですが。
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG0570エロゲープログラマー
NGNG0571デフォルトの名無しさん
NGNGほかにも沢山あるけどな。
0572デフォルトの名無しさん
NGNG式とかはなんとなく判るんですけど、繰返しや条件文って
どうなるんでしょう?
ラベルとか飛び先を用意しないと駄目ですか?
>a + b
push a
push b
call +
>if (t) a else b
push t
test
jmp label_a
label:a
a
jmp label:ifend
label:b
b
label:ifend
0573デフォルトの名無しさん
NGNG蛇足の助言。ifみたいな制御機能は、マシン自体に実装せずに
それ自体をライブラリにしてしまう、という手もある。
SmalltalkやPostScriptがやっている。
「関数ポインタ」みたいなものをFirstClassObjectとして扱えるような
言語仕様であるということにしとくと、結構幸せになる。
0574572
NGNGなるほど。
ちょっと見えてきました。
0575デフォルトの名無しさん
NGNGたぶん、ゲームエンジンに食わせるバイナリーを
作成するためのコンパイラがだとおもいますが、
lex yacc が一般的だと思いますよ。
少し難しいですが、がんばってくださいね。
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNGフリーつーかライセンスはあるよ?
それと、片手間でlex/yaccのソース見てもわかんないと思うよ。
この場合は、既存のツクール使うのが正解と思うけどなあ。
0578576
NGNGCよりpascalの方が得意なので。
0579専門学生学校
NGNG学校の課題でADVを作っていますが、バイナリーを直接いじっています。
ソースコードからバイナリーを制作するツールはいつか作りたいと思っていますが、
むずかしくって、作れません。
だれかイイ知恵を下さい。プリーズ。
0580デフォルトの名無しさん
NGNGインタプリタから作るといいよ
1行入力して文を解釈するってやつ。
最初は条件文とgotoだけ。
0581Hの専門家
NGNGm文字列
s選択肢1,選択肢2,選択肢3
とかみたいに。
アリスのシステムも2文字だったけど、
あれってこれと同じ方法だと思います。
0582いま言語つくってる人
NGNG1)トークン分割モジュールを作る。
2)文字列をコマンドIDと数値へと変換するモジュールを作る。
3)コマンドIDの列を実行するモジュールを作る。
この3ステップで簡易インタプリタを作るところから始めるといい。
この程度でも次のようなスクリプトが作れる。
Def Input1 null
Begin FugaFuga
showMessage "なんたらかんたら"
waitInput Input1
ifEqualGoTo Input1 KEY_1 Hoge
ifEqualGoTo Input2 KEY_2 HogeHoge
End
Begin Hoge
showImage "KEY_1_Pressed.bmp"
showMessage "KEY_1 を押したね?"
exit
End
Begin HogeHoge
showImage "KEY_2_Pressed.bmp"
showMessage "KEY_2 を押したね?"
exit
End
0583いま言語つくってる人
NGNGインデントが消えた・・・。
Def Input1 null
Begin FugaFuga
showMessage "なんたらかんたら"
waitInput Input1
ifEqualGoTo Input1 KEY_1 Hoge
ifEqualGoTo Input2 KEY_2 HogeHoge
End
Begin Hoge
showImage "KEY_1_Pressed.bmp"
showMessage "KEY_1 を押したね?"
exit
End
Begin HogeHoge
showImage "KEY_2_Pressed.bmp"
showMessage "KEY_2 を押したね?"
exit
End
0584デフォルトの名無しさん
NGNGコマンドIDの列って、、
変数とユーザー関数定義を実装するにはそれなりのセンスが
必要だと思うけど。
0585いま言語つくってる人
NGNGそうかい?
パフォーマンスを度外視すれば
コマンドID列を保持する vector をラベルでキー付けして
STL の map に突っ込むだけで御仕舞い。
STL の使い方が分からなくても
自作の可変長配列に線形探索程度で挿入・検索をやっても
それなりに使えると思うよ。
念のために言っとくと、
スクリプトの各行の先頭単語はコマンドIDのラベルを表し、
以後行末までの空白で区切られたトークンはパラメータを表してる。
この程度ならセンスと言うほどのものは必要ないと思うがなぁ。
0586デフォルトの名無しさん
NGNG本気で言語を作る気があるなら、まず最初にLispを作れ。
初心者でも、やる気があるやつがかかれば、5日で作れる。
0587デフォルトの名無しさん
NGNGそれはLISPをある程度知ってる人が前提。
初心者に5日は無理。
でも今時の若い人は気力と強引さでカバーするかも?
0588いま言語つくってる人
NGNG素晴らしいものだとは思うけど
それだけに最初に知ってしまうと
他の言語と疎遠になってしまいがちじゃないかな。
漏れはLisperじゃないけどそういう言語に思える。<Lisp
0589デフォルトの名無しさん
NGNGSchemeはSICP読んでる、レベル。
Schemeもどきの末尾再帰の最適化とかは無し、継続もなし、
マクロは未定、って感じでいいか?
0590デフォルトの名無しさん
NGNG0591589
NGNGそのうちマーク&スイープとかについてヘルプ出すかも。
その時はよろしく。
0592デフォルトの名無しさん
NGNGLispの概略は3時間もあればつかめるだろ。
>>588
言語としては終着点でも良いけど、構文解析がかなり楽な部類だから、
Lispから初めて感じをつかむべきだ、といってるんだが。
別にフルセットのSchemeやCommonLispである必要は無いんだし。
GCだって搭載しなくても構わない。
0593589
NGNGちゃんと思いつかなかったので、ふて寝。
"test\\"とかがちゃんと認識出来ない。
厨房過ぎる>自分
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNGなんてね。
0597専門学生学校
NGNG1文字命令というのが一番簡単そうなのでやってみます。
DirectDrawでゴリゴリ動かすのはわかるんですが、
コンパイラーを作る本は難しくってよく理解できませんでした。
ヒントをヒントを有り難うございました。
0598589
NGNG今からやってみます。
そうか、状態遷移でやればいいんですね。
バックスラッシュがあったら遷移させて、次の文字はそのままコピー、と。
適当に静的に確保した配列にstrcatしていく、とかいう駄目な仕様に決定。
文字列の最大の数が決まってしまいますし、reallocやる気も無いです、はい。
どうせならDFA書いて、正規表現に変換、とかやる方がいいかな?
まあいいです。面倒なのでとりあえず普通に遷移をflexで書いてみます。
<INITIAL> "\"" {buf[0] = '\0';BEGIN(STRING)}
<STRING> [^\\]* strcat(buf,yytext);
<STRING> "\\" BEGIN(ESCAPE)
<ESCAPE> . {strcat(buf,yytext);BEGIN{STRING}}
という感じですかね?
DFAは
4
" ↑" \
1--->2------>3
↑ |.
+-------+
という感じでしょうか。誰か正規表現変換、やってください。
これでスペースがずれてたら鬱だ。
0599589
NGNG%{
char buf[1024];
%}
%s STRING BACK
%%
<INITIAL>"\"" {buf[0] = '\0';BEGIN(STRING);}
<INITIAL>"(" fprintf(stderr,"'('\n");
<INITIAL>")" fprintf(stderr,"')'\n");
<INITIAL>[1-9][0-9]* fprintf(stderr,"int,yytext=%s\n",yytext);
<INITIAL>"0" fprintf(stderr,"int,0\n");
<INITIAL>(0|[1-9][0-9]*)\.[0-9]+ fprintf(stderr,"double,yytext=%s\n",yytext);
<INITIAL>[^(0-9"\n \t][^ \t\n]* fprintf(stderr,"symbol=%s;\n",yytext);
<STRING>[^\"\\]+ {strcat(buf,yytext);}
<STRING>"\\" {BEGIN(BACK);}
<STRING>"\"" {fprintf(stderr,"buf=%s\n",buf);BEGIN(INITIAL);}
<BACK>. {strcat(buf,yytext);BEGIN(STRING);}
%%
int main(){
yylex();
return 0;
}
こんな感じです。
次はyaccに進みます。
0600600
NGNG0601デフォルトの名無しさん
NGNG音楽用MIDIシーケンサのスクリプトに採用されてる事例がある。
ミュージシャンは理解するのか?
0602sage
NGNGウィングルーヴすげーよ。
しかも俺はそれを最初にみたのは
オランダのサイトだったゾ。からきし言葉
わかんなかったけどな。
ダイレクトサウンドもまだ全盛じゃ
なかったころだったし、結構儲けただろうな
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNGTokenizerに任せる部分と、Parserに任せる部分の切り分けが良く分からない。
文字列("[^\"]*")なんかはTokenizerに任せちゃってる例が多いんだけど、
Tokenizeの意味を考えると、
DQUOTE/STRINGに分解してParserに任せる方が正しい気もするし。
皆はその辺、どうやって決定してるの?
(手動で書き起こすの前提です)
0605589
NGNGただ、primitiveな演算は今の所+とlambdaのみ。
クロージャ回りで大苦戦しました。
environmentは線型リストの線型リスト、
id作成も線型リスト、cons等も通常の構造体をmallocで生成、
GCはリファレンスカウント、という厨房コーディングです。
面倒なので、(define (text x) ...)の形式はサポートしない予定。
(define test (lambda (x) (+ x 3)))とかは当然出来ますが。
doubleとintをサポートしてみたら、+のコードが長くなって鬱。
もう少し真面目に作っても、確かに5日あれば終わりそうです。
0606589
NGNGその正規表現だと、\\"でおわらない予感。
というチャチャは置いといて、今日の朝から遊びで作ったSchemeでは、
\"((\\.)|([^\\"]))*\" return STRING_LITERAL;
とかなってる。
"の回りの遷移なんてたかだかDFAなんだから、lexの方で処理するのが正しい気がする。
他の人の意見きぼん。
ちなみに#や'は字句、とみなした。
どちらもLispでは構文にかかわってくる事なので。
結局こんな感じ。
%{
#include "y.tab.h"
%}
%%
[ \t\n]+ /* space */
\;[^\n]*\n /* comment */
' return QUOTE;
\"((\\.)|([^\\"]))*\" return STRING_LITERAL;
\( return LPAR;
\) return RPAR;
[1-9][0-9]* return INT_LITERAL;
0 return INT_LITERAL;
(0|[1-9][0-9]*)\.[0-9]+ return DOUBLE_LITERAL;
[^(0-9"\n \t#'][^ \t\n)]* return IDENTIFIER;
\# return SHARP;
%%
0607589
NGNGGCの勉強します。
どこかに単純な線型リストにGCを適用する例、
とか無いですか?
作りかけをアップしておきます。
内容は見るに値しませんが。
http://www.geocities.co.jp/SiliconValley-SanJose/8306/lisp.tgz
defineとlambdaと+だけ出来ます。
Lisp系を初めて作る奴が、一日かけて適当に組むとこういうのが出来る、
という事で。
0608デフォルトの名無しさん
NGNG使用リストと、変数格納イメージがないと。
0609589
NGNG除けば理解したが、Cのスタックの下限を得る方法を知ら
ないので挫折。
上限は最後に定義したローカル変数、とかでいいのかな。
という訳でScheme厨房の私には、5日で実装、は無理そうです。
適当な処理系を覗くと、mainの(void *)&argvをbottomに使ったり
してるようですが、そういう物なんですか?
確かに割合い最初の方にスタックに積まれる物な気はしますが...
それとコピーイングとマーク&スイープ、どっちがScheme向きですか?
0610デフォルトの名無しさん
NGNGCのスタックをスキャンしてるのか?
どこが変数で、どこがPCとか正確には見てないだろ?
だったらconservativeにやるしかないから、
コピーGCは無理と思われ。
ところで、lambdaさえあればリストも整数演算も作れるぞ。
defineなしで再帰もできるよ。
0611デフォルトの名無しさん
NGNGScheme向きってのは特に無いと思うけど。
小さく作るならマーク&スイープで十分。
コピーはフラグメントが発生しない利点があるが、
普通に作ると遅い。これは実験済。
でも配列を大量に使う場合はコピーの方が良いかもね。
2つを組み合わせるって手もある。
インクリメンタルやジェネレーションなどは慣れてから。
0612デフォルトの名無しさん
NGNGlambdaだけで再帰は無理でしょ。一応set!も無いと。
(でもSICPにはlambdaだけで済ます方法が載ってたりする。)
0613デフォルトの名無しさん
NGNGできるもん!
(((lambda (le)
((lambda (f)
(le (lambda (x) ((f f) x))))
(lambda (f)
(le (lambda (x) ((f f) x))))))
(lambda (fact)
(lambda (n)
(if (zero? n) 1 (* n (fact (- n 1))))))) 10)
=>362880
0614デフォルトの名無しさん
NGNGそうそうこういうやつ(w
よくやるよね。
0615デフォルトの名無しさん
NGNGむー、漏れの経験ではコピーの方が何倍も速いがなー。
ヒープがいっぱいだと別だが。
いずれにせよジェネレーションGCの方が桁違いに速い
と思われ。
0616デフォルトの名無しさん
NGNGinternal-define or letrecをこう言う風に変換する
マクロがあると面白いかもしれない。(変換結果が)
0617609
NGNG>>610
はい、Cのスタックスキャン、です。ついでにレジスタも。
PC等は見てないです。setjmp使う軟弱な奴。
conservativeにやるつもりだったのですが。
それだとコピーって使えないんですか。
よくしらんドキュソなもんで。
なお、再帰、普通にdefineがあるので実装してみたいのだけど、
ifやら条件式やらを実装していないので無限ループしか試せず。
つまらんです。
なお、関数のCの方での登録回りは、適当なハッシュとか作らなかったので、
いちいち登録する都度ifが増える、という終わった実装になってます。
続きを真面目にやるならハッシュ書くけど、、、
ハッシュ書くの、もう飽きた。
なお、id生成が線型リスト辿ったりする終わり気味実装。
やっぱりインタープリタ作るのは面倒臭いYO!
0618609
NGNGつかんのですが、もつかないのですが、皆さんはどう
やってるんですか?
リファレンスカウントとかなら簡単に出来たのですが。
0619デフォルトの名無しさん
NGNGスタックやレジスタの中の良くわからん値を
ポインタと見なしちゃったとき、コピーGC
だとその値を書き換えちゃうだろ。
GCのデバッグはね〜。難しい。
0621デフォルトの名無しさん
NGNG下の定義の後、
(((c-fact (c-1+ (c-1+ (c-1+ c-0)))) (lambda (x) (+ x 1))) 0)
=>6 になるはず。(長文すまそ)
(define c-true (lambda (x) (lambda (y) x)))
(define c-false (lambda (x) (lambda (y) y)))
(define (((c-if p) then) else)
((p then) else))
(define (c-not p)
((p c-false) c-true))
(define c-0 c-false)
(define c-zero? c-not)
(define (c-1+ n)
(lambda (x) (lambda (y) (x ((n x) y)))))
(define ((c-+ m) n)
((m c-1+) n))
(define ((c-* m) n)
((m (c-+ n)) c-0))
(define ((c-cons m) n)
(lambda (z) ((z m) n)))
(define (c-car p) (p c-true))
(define (c-cdr p) (p c-false))
(define (U p) ((c-cons (c-cdr p)) (c-1+ (c-cdr p))))
(define (c-1- n) (c-car ((n U) ((c-cons c-0) c-0))))
(define c-1 (c-1+ c-0))
(define (c-fact n)
(((c-if (c-zero? n))
(lambda (x) (c-1 x)))
(lambda (x) (((c-* n) (c-fact (c-1- n))) x))))
0622620
NGNGcore吐いて落ちた(<ーへぼい処理系だ...)
0623デフォルトの名無しさん
NGNGGCをマルチスレッドで走らせたりしてるわけ?
0624デフォルトの名無しさん
NGNG>>622
ああ、(define (fn body))の書き方なしなんだっけ。
んじゃ、
(define c-true (lambda (x) (lambda (y) x)))
(define c-false (lambda (x) (lambda (y) y)))
(define c-if
(lambda (pred) (lambda (then) (lambda (else) ((pred then) else)))))
(define c-not (lambda (pred) ((pred c-false) c-true)))
(define c-0 c-false)
(define c-zero? c-not)
(define c-1+ (lambda (n) (lambda (x) (lambda (y) (x ((n x) y))))))
(define c-+ (lambda (m) (lambda (n) ((m c-1+) n))))
(define c-* (lambda (m) (lambda (n) ((m (c-+ n)) c-0))))
(define c-cons (lambda (m) (lambda (n) (lambda (z) ((z m) n)))))
(define c-car (lambda (p) (p c-true)))
(define c-cdr (lambda (p) (p c-false)))
(define U (lambda (p) ((c-cons (c-cdr p)) (c-1+ (c-cdr p)))))
(define c-1- (lambda (n) (c-car ((n U) ((c-cons c-0) c-0)))))
(define c-1 (c-1+ c-0))
(define c-fact
(lambda (n)
(((c-if (c-zero? n))
(lambda (x) (c-1 x)))
(lambda (x) (((c-* n) (c-fact (c-1- n))) x)))))
0625620
NGNGえーと、C側の話で、関数の呼び出しの中で、一時的にローカ
ル変数に保持されてる奴ってのがスタック見ないと回収されて
しまう気がするのですが。
>>624
そのまま食わせたら、落ちたのでまたバグかー、
とか思っていたら、インデントが全角スペースだったんですね。
そりゃそうか。
で、実行したら、なんか解釈はされたけど、値は出力されず。
あれ?なんか処理が返ってこない...
デバッガなりprintfで追うのは、もう眠いので明日にします。
とりあえずテストの為にscmで動かしたら普通に動いた。
何やってるのかはまったく理解してませんが。
0626625
NGNGバグかーってのは自分の書いた処理系の、って話しです。
0627デフォルトの名無しさん
NGNGRubyみたいに、拡張ライブラリをCでかけるようにする、とかで無い限り、
一度メモリにフラッシュしてからGCかけて、もう一度読み出すようにすればいいと思うんだが。
勘違いしてる?
0628デフォルトの名無しさん
NGNGあんた、スゴすぎるよ・・
0629628
NGNGError: Illegal function (10)
ときたよ。
0630デフォルトの名無しさん
NGNGguileだとちゃんと動いたよ。
(((c-fact (c-1+ (c-1+ (c-1+ (c-1+ c-0))))) (lambda (x) (+ x 1))) 0)
が24になった。
コピペしくじったんでは?
0631628
NGNG0632620
NGNGどうやって?
eval_sexp(struct obj *s_exp){
struct obj *o_car,*o_cdr;
o_car = car(s_exp);
o_cdr = cdr(s_exp)
:
:
}
というコードがあったとする。このo_carやo_cdrがeval_sexp
から抜けると解放されるには、スタック見るしか無くない?
フラッシュ、っていうのをどうやるのか理解してないのだが。
0633620
NGNGタグ使う方法を試してみてます。
外部にgcマーク用のビットマップを持つ、というのが、
どういう感じになるかはわかりませんが、やってみます。
0634デフォルトの名無しさん
NGNG例えば1024個のセルが収まるメモリブロックに対して、
128byte(1024bit)のビットマップを用意するという事だと思う。
各ビットは1つのセルに対応する。
でもなあ・・各メモリブロックに対応するビットマップを
探索する処理って効率よく書ける?
0635633
NGNG>128byte(1024bit)のビットマップを用意するという事だと思う。
組んでる途中ですが、おそらくそういう事っぽいですね。
ただ面倒なので
char bitmap[][1024]って感じにしちゃってますが。
union obj heap[slots][SLOT_SIZE];
という感じだとして、
for(i = 0; i < slots;i++){
if(ptr >= (char *)&heap[i] && ptr <= (char *)&heap[i] + SLOT_SIZE){
return [i,(ptr-(char *)&heap[i])/sizeof(union obj)];
}
}
って感じでbitmapの添字は取れるかなぁ、とか思ってますが。
甘いか?
0636635
NGNGchar bitmap[1024]の間違い。
実際は、
char bitmap[slots][SLOT_SIZE];
という感じ。
0637デフォルトの名無しさん
NGNG仮定:
consセルのページにはconsセルしか入っていない。
ページサイズ 2^P バイト(2^Pバイト境界にアライン済)、
ページ間は不連続
セルのアラインメント 2^A バイト
ページの先頭にはbitmapへのポインタ(またはハンドル?)が入る。
#define PAGE_MASK ((1 << P) - 1)
#define BIT_MASK ((1 << A) - 1)
void mark(obj *o)
{
if (IS_CELL(o)) {
cell *base = (cell *)(((unsigned long)o)&~PAGE_MASK);
int offset = o - base;
char *mark_byte = *(char **)base + (offset >> A);
int mark_bit = (1 << (offset & BIT_MASK));
if (! (*mark_byte & mark_bit)) {
*mark_byte |= mark_bit;
mark(CAR_UNSAFE(o));
mark(CDR_UNSAFE(o));
}
} else ...
}
バイトマップにするともう少し速い。
ページの先頭にbitmap自体を入れるのはやめた方がよい。
(ダイレクトマップトキャッシュだとひどいことになる。)
0638637
NGNGそれに、offset計算の時にoのタグを剥がしてない。
欝だ氏の雨
0639635
NGNGマーク&スイープ、通常の使用の分には結構早いですね。
文字列は、セルに入れるのは通常のmallocで確保してるので、
あまり文字列がたくさんすぎて、しかもセルがたくさん余っていると
malloc失敗するけどGC起動されない、とかもあるかも。
うーむ。やっぱり文字列の領域もgcで管理するべきか?
まあ素人でも5日で終わる、ってのは本当かも。
今日で2日目だか3日目だかだし。
Scheme実装って面白いですね。
consセルをどこまで切り詰めるか、とか工夫のしがいがあるし。
>>637
やっぱりconsセルの領域はわけた方がいいですか...
一緒にしてしまった。
0640デフォルトの名無しさん
NGNGsweepは速いよね >ビットマップ
>>639
やっぱりconsセルの領域はわけた方がいいですか...
一緒にしてしまった。
大きさが同じオブジェクトなら混ぜても別に不都合はないと思われ。
フリーリストも一緒にしちゃえば問題なし。
0641デフォルトの名無しさん
NGNGScheme実装はココからが面白いところ。
継続を作らずしてSchemeに非ず。
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNGyaccの使い方って事なら
本が山ほどある。
bisonのオンラインドキュメント
でも可。
それともパーザジェネレータ自体を
作りたいの?
0644635
NGNG結局define回りのシンタックスシュガーとか、
+-*/とか、比較演算とか、それっぽいのを一通り実装
した辺りで終了。継続までは手が出ず。
set!も実装してない。
http://www.geocities.co.jp/SiliconValley-SanJose/8306/lisp2.tgz
においとく。
まあSICP厨房な俺だと5日で完成は無理だった、という事で。
tagged pointerに初めて手を出したのと、GCもリファレンスカウンタ
じゃない奴は始めて組んだので、そこらへんで予想よりも手間取った。
GCのデバッグはもうやりたくない(T_T)
R5RSとか探したりとかもしてたので、実際はもうちょっと進むと思われ。
やっぱりForth系の方が楽ですねぇ。
これからジェネレーショナルなGCにでも手を出すか、中間
コード生成して末尾再帰の最適化やるか、って方向だとは
思うけど、、、
まずは継続でも実装してみるかもしれんけど、そろそろ飽
きるかも。とりあえず勉強にはなりました。
いろいろ教えてくれたこのスレの人々に感謝。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNG問2
a = 5+(6+(7+b));
をコンパイルした結果はどうなるかを、自分の頭で考えて示せ。
a = 0+(1+(2+(3+(4+(5+(6+(7+b)))))))-(0+(1+(2+(3+(4+(5+(6+(7+b))))))));
は、どうなるだろうか? 自分が、どのように考えて、その結果を出したのか、そして、それをアルゴリズムにするにはどうすれば良いのかを考えよう。
ヒント
まず式を木の形に書いて、構造を調べる
push, pop を使ってスタックを使う方法もある
実際のコンパイラの出力と比較してみよう。
--------------------------------------------------------------------------------
問2
上のプログラムをIntel CPU上で、gcc -O -S test.c を使ってコンパイルすると最適化がかかる。最適化した場合としない場合で、どのような違いが出るか? (ヒント diff を使うと簡単...)
問1で、これらの結果を実際のアセンブラで実行しテストするには、どうすれば良いか考えて実行せよ。
これらの命令が実際に生成されるCのソースコードを考えて、それをコンパイラに通し、実際に命令が生成されることを確認せよ。(ただし、データのアドレスは、変わっても良いとする)
0647デフォルトの名無しさん
NGNG宿題スレでやれよ。
答えてやるから。
0648デフォルトの名無しさん
NGNGhttp://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/00-10-30/lecture.html
ここからのコピペと思われ。
0649647
NGNGああ、なるほど。
という事は646は自分で勉強でやってるのかな?
話題提供なら、
movl b %ebx
addl $7 %ebx
add $6 %ebx
add $5 %ebx
movl %ebx a
って感じか?
0650デフォルトの名無しさん
NGNG問
HSPで
a = 2 + 7 * 2
をコンパイルした結果はどうなるかを、自分の頭で考えて示せ。
HSPが、どのように考えて、その結果を出したのか、そして、それをアルゴリズムにするにはどうすれば良いのかを考えよう。
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG足し算の優先順位って、知ってる?
コンパイラなら、定数の畳み込みぐらいして欲しいのだが。
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG検索しろ厨房&もう寝ろ。
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNG他にもいっぱいあるよ。
memory to memoryもあるし、
SICD machineとか、
chemical abstract machineとか、
categorical abstract machineとか、
while-if machineとか、
・・・
0658デフォルトの名無しさん
NGNG○SECD
0659あ
NGNGできれば、具体的
0660♯6411
NGNGターゲット依存な部分が大きいので
具体的に掻くと逝ってもなあ…
最適化を考えなきゃ、スケジューリングなんて楽勝だぞ(w
0661659
NGNGできればスケジューリングについてわかりやすく書いてある書籍
またはあなたのバイブル教えて!
0662デフォルトの名無しさん
NGNGMINIX本には、ラウンドロビンか何かの実装ならそのまんま
のってた気がするが。あれじゃ駄目?
他にもオライリーかなんかのC++の組み込みの、
ダニの本だと、組み込み用のへぼいスケジューリング
のコードがのってた気がする。
0663♯6411
NGNGhttp://wwwsoc.nacsis.ac.jp/ssj2/
0664あ
NGNGOreily の本は薄く、読みやすそうで気になってました。
スケジューリングについて調べるために、購入して読んでみます。
0666デフォルトの名無しさん
NGNGHSP製だった>VB製だった
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGMINIX本とは?
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG0671659
NGNG主記憶から 演算器までの過程での内部命令のスケジューリングの
ことです
具体的にどういう処理をやっているのかよくわかりません
0672669
NGNG逝ってくる。
0673デフォルトの名無しさん
NGNGちょっとここじゃ解説しきれない。
アーキテクチャの本読め。
「スコアボーディング」「トマスロのアルゴリズム」
「アウトオブオーダ実行」「リザーベーションステーション」
「リオーダーバッファ」とか載ってるヤツを。
日本語だと「スーパースカラプロセッサ」M.Johnson(日経BP社)
あとはインテルのマニュアル読め。
0674デフォルトの名無しさん
NGNG>ちょっとここじゃ解説しきれない
さわりで良いから解説きぼん。
0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNGwww.intel.comの下アサリまくれ!オモシロイから。
0677デフォルトの名無しさん
NGNGどのような情報が必要ですか?
0678デフォルトの名無しさん
NGNGネイティブってことは、86系に限ればPentiumの命令セットとか、
そういう資料なんじゃないの?
あとAPIの呼出し規約とか。
EXE/DLLのフォーマットとか。
0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNGとりあえず、COMモデルのコンパイラを作ってから
Windowsへ移行した方がいいぞ。
もうやってるんだったら、余計なこと言ってごめんね。
0681デフォルトの名無しさん
NGNGCP/M形式のものか?
それとも、Component Object Modelベースのコンパイラ?
わけわかんねー。
0682デフォルトの名無しさん
NGNG0683Ss
NGNGが必要らしいのでダウンロードしたいのですが、
>2のHPにいってもどれなのかわかりません。
どれをダウンロードすればいいんですか?
初心者ですみません。
0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGCygwin 版ではない Win32 native の lex, yacc もありますよ。
http://unxutils.sourceforge.net/
flex.exe が lex, bison.exe が yacc 互換のプログラム。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNGCOMモデル=CP/M形式のコンパイラのことだろ。
アロケータが必要ないし、
APIの事を必要とせずに作れるからだろ。
多分680は全てを一からスクラッチすることを念頭に置いてると思われ。
0688デフォルトの名無しさん
NGNGアロケータじゃなくてリロケータだろ
0689デフォルトの名無しさん
NGNGソフトをGPL以外のライセンス(ソースが非公開とか)で配布することは
可能ですか?
0690デフォルトの名無しさん
NGNG>>689
OK
GPL の法的根拠は著作権ですが、著作権法では、アルゴリズムやそこに書かれた情報などは保護対象
ではありません。そのソースコードで使われているアルゴリズムが特許で保護されていたり、ソースコード
を入手するにあたって機密保持契約などを結んでなければ問題なしです(NDA と GPL が両立するかどう
かは、また別の問題)。
0691デフォルトの名無しさん
NGNGGPLのソフトのソースを別の言語に移植したものって、ライセンスは変更可能なのか?
たとえば、C言語で作られたものを、pascalになおしたとか。
# 当然、実際そんなことがあるとすると、ベタ移植ではなく機能アップするだろうが
0692デフォルトの名無しさん
NGNGむり
0693デフォルトの名無しさん
NGNG自分が著作権を持ってるソースの場合、それとも GPL で流通しているソースを移植した場合
の話?
0694Ss
NGNGありがとうございます。
さっそくダウンロードしたんですが、
使い方がいまいち・・・
どっか解説とかしてるホームページとかありますか?
初心者でほんとスイマセン。。
0695デフォルトの名無しさん
NGNGはい。 >>3
後は、オライリーから出てる Lex&Yacc 本買うか、
小さ目の処理系のソースコードを読むかだね。
0696デフォルトの名無しさん
NGNG良いページを発見。
ttp://www.oishi.info.waseda.ac.jp/~oishi/interpreter/ma.html
早速解析してたら、CINTなるCインタプリタがソース公開されてると聞いて
そっちにも手を出してます。
CINTをユーザープログラムに組み込む方法を探してます。
書籍では1冊あったんですが、HPでは英文しか見当たらないようですね・・・(T^T)
ぼちぼち読んでみますが、何かご存知でしたら情報共有しましょう!
過去ログにもCINTはあんまりないようですし。(←需要が無い?)
sage
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNG0699696
NGNGを元に見よう見まねで電卓を作ってみる。++,+=,16進数等を追加。
http://page.freett.com/pluteus/works/bin/calc.lzh
まだif文などにバグあり。
switch〜case文、break文、continue文、配列変数なども実装したいけど、
どこかにソースないですかねぇ?
0700700
NGNG0701デフォルトの名無しさん
NGNGサンクス。
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNGPerlにもRubyのHacking Guideのような、ソース読解の
手引きのようなものがあるとうれしいのですが、、、。
どなたか、ご存知の方いらっしゃいますか?
(スレ違いかもしれませんが)
0704kumiko
NGNGエラーのラインを見ても、何もありません。
どんな事が考えられるのでしょうか?
教えてください。
0705デフォルトの名無しさん
NGNG???スレ違いか?
↓こっちの方がよくない?
***すれ立てるまでもない質問はここで 第6刷***
http://pc.2ch.net/test/read.cgi/tech/1004183881/
0706デフォルトの名無しさん
NGNGってすると
gawk: cmd. line:1 '$1==TEST
gawk: cmd. line:1 ^ Invalid char ''' in expression
とエラーが返ってきます。
なぜでしょうか?教えて下さい。
0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん ? ◆LpRapTLM
NGNG↓
static void
__yy_memcpy (to, from, count)
char *to;
char *from;
unsigned int count;
{
(snip ;-)
}
こんな関数があって、インタフェースがキモイです。(涙)
なにかパラメタとか弄らなきゃいけないでしょうか?
0709デフォルトの名無しさん
NGNG昔のコンパイラを通すためなのかな?
0710デフォルトの名無しさん
NGNG(イヤミとかじゃ無くてホントに知りたいだけ。最近の人は知らなくて当然だと思うし)
俺は全部ANSIにして、そのあとC++に書き換えたよ。
GNUって、どれもソース汚いよねぇ。(暴言?)
ていうかコーディングはともかく、IFDEFの嵐がかなわん。
0711_
NGNG0712デフォルトの名無しさん
NGNG本格的にbisonの出力を読んでみたいひとは別として
普通はそのままか、簡単なフィルタを通すだけでに
つかうだろうね。
>>710 みたいに書き換えることも考えられるけど
そうすると文法ファイルを書き換えるたびに出力ファイルを
書き直さないといけない。
0714デフォルトの名無しさん ? ◆LpRapTLM
NGNG>>709
>古いK&Rのころの書式?
>昔のコンパイラを通すためなのかな?
吐かれたソースのコメントにも「互換性のため」
みたいなことが書いてありました。
K&R なのかぁ…。
K&R の C は忘れちゃっていました。
Panafacom A-30 を使わなくなって以来、触ってないので。ゴメソ
>>710
>ていうかコーディングはともかく、IFDEFの嵐がかなわん。
あー、漏れ的には IFDEF のほうに共感。ていうか
クロス開発なので、自分で IFDEF 増やしてます。(激鬱
さらに IFDEF 増やす方向で (劇毒
bison.simple あたりを弄ってみることにします。
0715デフォルトの名無しさん
NGNGもう何がなんだかわからん状態ですが何か?
0716デフォルトの名無しさん
NGNGCVS いれてブランチ切れば?
0717_
NGNG0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG日本の情報産業の未来は暗いな。
つーわけで、さらにage。
0720デフォルトの名無しさん
NGNGあれって新しいパラダイム変化を起こせるんだろか。
0721デフォルトの名無しさん
NGNGだったらスレをモリアゲテ・・・
0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGプリプロセッサ書けば早いと思う。
0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNGhttp://www.google.com/search?num=100&hl=ja&ie=utf8&oe=utf8&q=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91lisp&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG現役で使われている Fortran や C だって何年前の話だか。
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGと手作業でやって正規表現を認識するプログラムを作りました。
(flexだとまさに一瞬・・・)
プログラムのテストをしっかりやりたいのですが、
正規表現から生成される文字列を自動作成するには?
0731デフォルトの名無しさん
NGNGleftpos/followposを追えばなんとかなりそ。
できたらダウンロードしに行くわ。
0732デフォルトの名無しさん
NGNG良い教材があったら教えてください。
0733デフォルトの名無しさん
NGNGLシステムの記号置換規則で実行可能なコード列を作るということですか?
まさかLシステムで生成可能な記号列を再帰関数とかで作るという話ではないですよね。
前者なら興味アル!
0734デフォルトの名無しさん
NGNGttp://www.comp.pu-toyama.ac.jp/~nishida/Pubresult/pllangj.html
ttp://www.comp.pu-toyama.ac.jp/~nishida/Sotuken/plsystem.html
Lシステム自体は実用的な範囲で、生物系のオブジェクトの生成なんかに
使われるのは知っているけれど、
言語自体に採用して便利になるのかよくわからん。
だもんで、思い切って話題振ってみたの。
0735デフォルトの名無しさん
NGNGcygwinのbisonでy.tab.cファイルつくったあと、
gccでコンパイルしようとしたんですが、
undefined reference to 'yyerror'ってのがでます。
これは何がまちがってるんでしょうか?
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGありがとうございまふ
0738735
NGNGundefined reference to 'WinMain@16'ってのは
main関数がないということでしょうか?
0739デフォルトの名無しさん
NGNG0740735
NGNGどうすれば(゜□゜)???
0741デフォルトの名無しさん
NGNG0742735
NGNGcan not find -lyに・・・・
なんでだー
0743デフォルトの名無しさん
NGNGyyerror(char *s)
{
printf("%s\n", s);
}
0744735
NGNGこんどはundefined reference to 'WinMain@16'
が!
もうわからん。
0745デフォルトの名無しさん
NGNGまずは標準出力だけのプログラムでやっとけ。
0746_
NGNG0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNGまだキミにはプログラムを作る以前の知識が足りない模様。
たとえば、「WinMain」で検索するとか、やってみたかい?
それがどういう物かを調べてみなよ。
0749735
NGNGかいたら
解決しました。
おさわがせしました。
0750デフォルトの名無しさん
NGNGfatal flex scanner internal error--end of buffer missed
lex&yaccプログラミング a nutshell
にflex2.3.7のエラーメッセージというのが
載っていて、
flex自身が使っているflex字句解析ルーチンで、致命的な内部エラーが発生した。
解決方法: システムのソフトウェア管理者に報告する。
だそうです。
0751厨房です。
NGNG試しにサブセット(実数、構造体、typedef、型変換など無し。関数の引数も無い)を
再帰的下向き法で作ろうとしたのですが、失敗しました。
前にPascalのサブセット(コンパイラの教科書に載っている程度のおもちゃ)を
作ったことがあったので、簡単かなと思ったのですが、甘かったです。
まず、構文解析部の型定義(宣言子)の複雑さ、char *(*(*array[10][5])())(); など
ネストした構造を解析して、型リストを記号表に登録するのにかなり苦労しました。
記号表もほんとはハッシュを使うべきなのでしょうが、静的配列で逃げました。
しかし、そこまでは泥縄式になんとか作ったのですが、式の木を作る段階になって
投げてしまいました。
演算子(代入式からprimaryまで)ごとの構文解析部はなんとか構文図に従って
できたのですが、木を作るときの型チェックなどのやりかたがわからなくて。
特に配列とポインタの相互変換や、代入時の「左辺値」のチェックなどが。
もっとも、自分がC言語自体について厨房だったせいもありますが。
int array[][10] が許され、int array[][] は許されないとか、
"abc"[5] という表現はOKだとか、今までわかりませんでした。
この時点で挫折したので、当然、文の解析やコード生成までたどり着けませんでした。
やっぱりCのコンパイラって難しいと思いました(少なくとも僕には)。
ANSI互換のを作れる人が神様に思えます。
どなたか(もちろんサブセットでもいいので)作成したことのある方、
ヒントやポイントを教えていただけたらと思います。
最近、gccやlccやcint、bcc(linux8086)などのソースを見たのですが、難しくて
あまりわからなかったです。(この中ではbccが比較的コンパクトでした。)
0752デフォルトの名無しさん
NGNGほんとかよ・・・
いまCもどきのコンパイラつくってるけど、すっげーむずかしい。
現役プログラマーの人たちって
みんな簡単につくれるものですか?
0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNGでも、自分の書いたコードが、なんでちゃんと動くのか(特に構文解析)は、よくわからなかった(うはは
コード出力のところは、.objのファイルフォーマット読んで、面度くさくなってやめたよ。
>>751は、コードの動きが読めないと納得しないタイプなんじゃないかな?
>char *(*(*array[10][5])())(); などネストした構造を解析
これを意識してるくらいだからね。
たとえば ( ) は、優先順位を変えるだけ(関数の()は別ね)だから、ツリーにしたときにいなくなっちゃうもんだし、
ネストがいくら深くなっても、基本的にやることは優先順位と方向の表にしたがってツリーを作るだけ。
>"abc"[5] という表現はOKだとか
これも、ポインタ式と整数式の組み合わせなんだから、当然おっけ、っていうかこれを気にする必要は無いんだよね。
で、インデクシングはポインタ式と整数式の組み合わせだってわかってれば、5["abc"]も(文法的には)おっけってのも、
知らずに実装できるわけだ。
なんか、考えすぎで行き詰まったようなかんじがするなぁ。
(あ、俺用語がおおくてゴメソ)
0755デフォルトの名無しさん
NGNGああ俺も似たようなこと思った、
単にまだ抽象的な構造を脳内に描く能力が
足りないだけじゃないかなあと。
やってればそのうちできるようになるよ。
0756デフォルトの名無しさん
NGNG今更Cコンパイラのサブセット?(爆笑
おいおいおい、せめて並列コンパイラの大域最適化ぐらいに話題のレベル上げろよ。
ホントだせーな。恥ずかしいよ、コンパイラの開発にやってたもんとしては。
>>751
お前は処理系の開発うんぬんよりも、先にK&Rのカス本でも読んで逝ってしまえ。
全くどこの会社だよお前。C言語もろくにできないカス。
今更Cのサブセット?ゴミ増やしてどーすんだよ。ばーか(w
>>752
コンパイラ開発はカスとプログラマを峻別する試金石なんだよ〜。
お前もカスレベル?(w
>>754
今更ドラゴンブックかよ。それ読んでお前もサブセット?しかもインタプリタ?
おいおいゴミを増やすなっつーの。お前だけで十分よ。
Cコンパイラやるなら最低でもデータフロー解析ぐらいやれって(w
この季節、女もいねーオタカスどもはヒサンだな(ワラ
0757デフォルトの名無しさん
NGNG以上、ホームグラウンドの話題になって急にいきがる自己陶酔型冬厨の見本です。
又は、ネタの見本としてもお使いください。
0758デフォルトの名無しさん
NGNGまぁ、簡単というのはそれまでの知識や経験によりけりだと思うんだけれども
たとえば折りはC->アセンブラ変換とかPASCALアセンブラ変換なら
やれないことはないと思う
がobjファイル(Win)への変換とか具体的なEXEへのリンクは
ちょっと調べないとわからん...というか今はしらん。
で実際コンバータレベルでも作ったとして
結構文法処理は厳密にできるかわからん。ようは規格をチェックするのが大変だから
結局独自仕様になっちゃう
でも例えばこれがボードPCだったとしたら基本的なマシン語構造がわかっているから
できるかもしれないなと思う。
でもだれかがもう作っているなら金を出してそれを買うな。
NASMは確かソースがあるから
C->アセンブラ
アセンブラ->バイナリ
というのが0からコンパイラ作る場合作業分担しやすい方法だと思うけれど
OSがほとんどAPIもってるから効率よく実行できるサブセット型は意外と速いかも
つーかプログラムはやればできっかも知れないけれど
仕事だったら仕様書とかドキュメントとか著作権や特許の調査とか
検査成績書とか
そっちのほうが疲れるんじゃないのか?
0759デフォルトの名無しさん
NGNG>恥ずかしいよ、コンパイラの開発にやってたもんとしては。
おまえは日本語を勉強しろ。
0760デフォルトの名無しさん
NGNGもうすぐ1年か
0761デフォルトの名無しさん
NGNGなんでオマエがはずかしがるのか
0762デフォルトの名無しさん
NGNG>759 → >756
0763厨房2
NGNG0764冬房=1
NGNG0765764
NGNG0766デフォルトの名無しさん
NGNG完成されております故、いまさらコンパイラの開発程度で粋がっているのは
程度が知れるデございます。
0767デフォルトの名無しさん
NGNGちょっと興奮しただけだと思う。大目に見よう。
0768正月房
NGNGPascal,Modula,Eiffel系の言語処理系作ってみる、っつう学習方法がある.
有名どころでは、Knuth 本の PL0 や、それを日本語で焼きなおした本もあった.
あと、構文解析については、ドラゴン本きっちり読んで理解して実践までできる
奴ぁー一握りだと思われ.
もっと薄い本(漏れは培風館の「コンパイラ」)読んで理解して、
実装はYacc/Bison任せにしたほうがよさそう.
0769正月房
NGNG× Knuth本のPL0
○ Wirth本のPL0
0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG0772デフォルトの名無しさん
NGNG構文解析の話にグローバルオプティマイズの話で割り込むあたり、ちょっとかわいいなって思ったんだけどな。
0773756
NGNGおいおいおい、カスの証明だなお前ら。その「基礎理論」でグローバルオプティマイザでも
作ってみろよ。俺が作り上げたようにな。
まったく、何もできねーんなら黙ってな。オバカさん(w
つーか、お前らゴミ書きのある部分は俺の処理系の恩恵受けてんだから
はいつくばって感謝でもしてりゃいーんだよ。
0774デフォルトの名無しさん
NGNGレベルが低いとわめかれてもどうしようもない。
ただ一言レベルが高くてよかったねとしか言いようが無い。
話が合わないのが嫌なら出てけば?
煽ってもつまらないでしょ。
0775デフォルトの名無しさん
NGNG>>756
仕事に疲れているならこの板にでも行ってなごんでくれ
http://ton.2ch.net/bird/
0776デフォルトの名無しさん
NGNGっで >>756 のいう並列処理系最適化って、
何を勉強すれば作れるの?
0777776
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1005408405/
0778デフォルトの名無しさん
NGNGどうも、並列分散処理での最適化って、計算の目的に特有のものか、あとは、
配列の計算の最適化(グローバルではないだろうな)くらいしか見つからないんだ。
もうちょっと探してみるよ。
つか、スレ違いだな。
0779デフォルトの名無しさん
NGNG戯れてみたいテーマではある。
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGもうちょっとレベル下げて技術話でもしてくださいよ。
せっかく専門の人なんでしょうから……。
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784ほえ
NGNGいわゆる GNU Extension Language Plans というやつですが、結局そういう言語ってできたんでしょうか?
たとえば Rush とかもあったような気がするんですが、結局この話はどこに流れていったのでしょうか?
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNGguileのことか?
0787デフォルトの名無しさん
NGNGここのスレタイトルは「相談室」だよ。
子供電話相談室に「夕日はどうして赤いの?」って質問してきた子供に対して、
「今時夕日がどうして赤いかなんて低レベルな質問するなんて笑わせるぜ、
黒点活動と磁気嵐とについて研究してきた俺から見るとな!」
って突っ込み入れているようなもの(藁
だいたいコンパイラ屋なんて縁の下の力持ちなんだから、だまって精進して、
わかる人に「いい仕事してますねぇ」って認められても「仕事ですから」って
職人気質で答えていれば、かえって尊敬されるのに。
0788ほえ
NGNG> guileのことか?
そう、それでした、GIMP にも使われているそうですね。
Scheme を中間言語として…なんていうアプローチもあったようですが。
ていうか、guile の一環として多言語からのコンバータみたいなものもあるのかも。
コンバータというか、guile でパーサとかを作っちゃうとかみたいな。
面白そうなのでちょっとマニュアル(あんまり整備されてないけど)読んでみます。
Scheme スレの方が適切なきがしてきたので逝きます。
0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG>よってリファレンスカウントでは生じるようなメモリリークが発生しない。
ObjectPascalの文字列や動的配列とかはリファレンスカウントで自動的に
メモリ管理されているけど、不完全ということ?
誰か解説してください。
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNGつまりA->B->C->Aで参照関係の在る場合。
文字列だけなら真のGC不要。
あと、ObjectPascalどころか、STL/MFCもリファレンスだと思った。
0793ほえ
NGNG> 循環参照だけだろ。リファレンスで不都合が生じるのは。
なるほど、リファレンスカウントでは問題が生じますね。
それが生じるプログラム書いたこと無かったから、問題として認識してませんでした。
0794デフォルトの名無しさん
NGNGって、こういうこと?
a := obj new; // obj:1
b := a; // obj:1+1=2
c := b; // obj:2+1=3
a := c; // obj:3-1+1=3
a := nil; // obj:3-1=2
b := nil; // obj:2-1=1
c := nil; // obj:1-1=0
不都合って何?
0795デフォルトの名無しさん
NGNGa:=obj new; b:=obj new. c:=obj new;
a.ref:=b; b.ref:=c; c.ref:=a;
みたいにすると、それぞれ参照カウント2になって、
a:=obj new; b:=obj new; c:=obj new;
ってすると、最初の3つのobjは参照カウントが1になったまま、GCされない、ってかんじで、どでしょ?
0796ほえ
NGNGmark and sweep だと最初の3つのオブジェクトはみなしごになるので
GC の mark から外れて sweep されてなくなる、ってことですね。
0797デフォルトの名無しさん
NGNGGCされるけど、参照カウントだと、カウントが0になってない
からGCされない、ってことです。
0798デフォルトの名無しさん
NGNG廃棄予定のデータを、メモリ管理機構がきっちりつかんでいて、
仮想記憶がふくれあがる&GCがやけに遅い、っていうことも、
一般にはありがちだわな。
0799デフォルトの名無しさん
NGNGデータ・オブジェクトの寿命特性を考慮した、
Generation GCつうやつに切り替えたつう話だそうです。
0800デフォルトの名無しさん
NGNG最近出た新しいのってないの?
0801デフォルトの名無しさん
NGNG0802ほえ
NGNGなしってことは、明示的に消滅させるってことですか??
0803デフォルトの名無しさん
NGNGそう。
0804デフォルトの名無しさん
NGNG松下のGCとか?
0805デフォルトの名無しさん
NGNG明示的に消滅させそこねた場合はどうするの?
0806デフォルトの名無しさん
NGNGもう見てらんない。
Delphiでも使ってなさいってこった。
0807ほえ
NGNG松下のって…何?
0808ほえ
NGNG多分、メモリリーク発生。
C で malloc したけど free しなかったのと同じ。
C++ で new したけど delete しなかったのと同じ。
0809デフォルトの名無しさん
NGNGそんなこと行ってたらCも使えなくなるでしょ。
GCってそんなに便利か?
むしろ失うものが大きすぎる。
0810デフォルトの名無しさん
NGNG厨房はすっこんでろ
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGPanasonicのGC
0813デフォルトの名無しさん
NGNGRuby に関していえば、保守的 GC のおかげで
C で拡張ライブラリ書くのがかなり楽。
0814ほえ
NGNGゲームキューブ…………か……
0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNGそれリファレンスカウンタだろ
0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNGでお勉強中です。
ちょっと書き換えただけで
"lexer.l", line 19: unrecognized rule
って起こられます。なにがいけないのでしょうか?
{ident} {strcpy( &yylval.strval,yytext);return IDENT;}
この行でエラーだそうです。
よろしくご教授お願いします。
%{
void yyerror(char*);
#define YY_SKIP_YYWRAP
int yywrap() { return 1; }
#include "parser.h" /* parser.hは bisonが生成するファイル */
%}
delim [ \t]
ws {delim}+
letter [A-Za-z]
digit [0-9]
ident {letter}{{letter}|{digit}}*
number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?
%%
{ws} { /* ここでは何もしない */ }
{number} { sscanf(yytext, "%lf", &yylval.dval); return NUMBER; }
{ident} {strcpy( &yylval.strval,yytext);return IDENT;}
[+\-\*\/\(\)] { return yytext[0]; }
"\n" { return EOL; }
. { yyerror("不正な文字です。"); return EOL; }
%%
0819デフォルトの名無しさん
NGNGじゃないの?
0820デフォルトの名無しさん
NGNGご指摘のとおりでした。どうもありがとうございます。
0821デフォルトの名無しさん
NGNGでダウンロードしたファイルのANSPARSE.Yをwin2kのbisonにかけているのですが、
ansparse.y:159: type clash (`' `name') on default action
ansparse.y:160: type clash (`' `name') on default action
ansparse.y:209: type clash (`' `name') on default action
ansparse.y:255: type clash (`' `name') on default action
ansparse.y:303: type clash (`' `name') on default action
というエラーがでてきて困っています。
意味がわからないのですが、対処法はないでしょうか?
0822デフォルトの名無しさん
NGNGdefault action ってことは、暗黙のアクション
$$ = $1
を使っていて、$$ と $1 の型が違うんじゃない。明示的に空のアクション {} を書いてみたら。
0823デフォルトの名無しさん
NGNG暗黙のアクションがあったわけですね。なるほど。
明示的に空のアクションを作ってとりあえずエラーを回避できました。
たすかりました。
それにしてもCのパーサーややこしいです。初心者にはつらめ・・・
0824821
NGNGで得たyaccソースのアクション部にコードを生成するコードを埋め込んでコンパイラ作りたいと思っているのですが、
これは通常の方法なんですか?
いまいち、具体的にどのようにコードジェネレータを作ればいいか悩んでいます。
なにかヒントはないでしょうか?
0825デフォルトの名無しさん
NGNGTeXで「�V」を表示させるコードを教えてください。
よろしくお願いいたします。
0826デフォルトの名無しさん
NGNG出入り禁止にされたくなかったらマルチポストはやめるんだな
0827デフォルトの名無しさん
NGNGここの板のレベルは低いね。
もういいよ。やれやれ…
スレたてねーだけ感謝してくれ。
0828デフォルトの名無しさん
NGNG必ず「レベルが低い」という文句が入るのが興味深いね。
日本語のページからTeX ローマ数字を検索しました。 約134件中1 - 50件目 ・検索にかかった時間0.43秒
http://www.google.co.jp/search?num=50&hl=ja&q=TeX+%83%8D%81%5B%83%7D%90%94%8E%9A&lr=lang_ja
スレ違いなので終了
0829デフォルトの名無しさん
NGNG簡単Cもどきコンパイラつくってるけど、
すっげえムズイ・・・・
こんなの最初につくった人はすげえ
0830デフォルトの名無しさん
NGNGすれ違い氏ね
0831デフォルトの名無しさん
NGNG公開されているコンパイラのソースを実際に読んでみることを勧める。
(gccなど大きくて複雑なものは勧めない。が、自信があるなら別)
ドラゴンブック等などの参考書を読んだだけではわからない所は多いと思う。
>>824
学習用であれば、コードジェネレーターはレジスタ割り当てを考慮しないスタック使用のテンプレート変換でも
0832デフォルトの名無しさん
NGNGint型の計算と条件分岐やらループができた。
ムズかしー
0833デフォルトの名無しさん
NGNG#include <afxcoll.h>
を入れただけで、エラーがいっぱいでてきます。いったい何なんでしょ?
0834デフォルトの名無しさん
NGNGコールバックで詰まってしまった・・・
0835デフォルトの名無しさん
NGNGアセンブラ使うしかないか。
0836デフォルトの名無しさん
NGNGつか、コールバックをスクリプト側にディスパッチする方法なのか、
スクリプトの文法構成をどうしようか、という話なのか、どっちよ?
0837デフォルトの名無しさん
NGNGどのスレか忘れたけど。そのときは
@r:ret
@r4:ret 4
@r8:ret 8
って感じのリターン分岐を作ってやった方がJITでやるよりも
効率がいい、見たいな話だった。そういうこと?>834
0838yacc聞いてもいいですか
NGNGyaccで、
expr : expr1 expr2
と書いて、expr2の処理を先に実行させる方法があるでしょうか。
その結果をexpr1の処理の中で使いたいんです。
0839デフォルトの名無しさん
NGNGもしコールバックをスクリプト側にディスパッチする話なら
GNU ffcall
が役に立つのでは?
ffcall,alloc_callback
とかで検索してみてちょ。
0840デフォルトの名無しさん
NGNGexpr2 : hogehoge ...
の{}の中でフラグでも立てて、どっかに結果をしまっとけば?
0841デフォルトの名無しさん
NGNGGPLに汚染されるよ
0842yacc聞いてもいいですか
NGNGレスありがとうございます。そのようにしたいのですが、
expr1のアクションの方が、expr2のアクションより先に実行されてしまい
ますよね。
0843デフォルトの名無しさん
NGNGスキャナがトークンを返したところから expr : expr1 expr2 までのとこ、
具体的におしえて欲しいなり
0844yacc聞いてもいいですか
NGNGどうも、お世話になります。これは、MIDIデータを表現するMuse
http://village.infoweb.ne.jp/~atomic/soft/software.htm
の文法解釈を行おうとしているものです。
lex/yaccは、TP Lex/Yaccを、コンパイルはDelphiを使っています。
問題は、onpu : tone_or_waon len_set のところです。
tone_or_waonの中にも、len_setがあって、1番下の行でemptyの場合にはそれ
以前に記憶した変数onpuLenを適用してしまうのですが、そうではなく、
tone_or_waonの後ろにあるlen_setの結果を適用したいのです。つまり「問題
はここです」と書いた1つ下の行のonpuLen := $2;を実行したあとに、
tone_or_waonの中身を解釈したいのです。
%start muse_data
%token <ShortString> TONE_NAME ONPU_LEN
%token WA_REPEAT
%left '^' '~'
%left '`'
%token <Integer> OCTAVE_REL OCTAVE_ABS DIGIT
%type <ShortString> muse_word onpu waon tones tone_in_waon tone_or_waon renpu
%type <Char> waon_start waon_end renpu_start renpu_end
%type <TOnpuLen> len_set len_or_empty
muse_data : muse_word | muse_data muse_word;
muse_word : onpu | octave_descripts;
octave_descripts : {{無関係なので省略}} ;
onpu : tone_or_waon len_set { { 問題はここです。}
onpuLen := $2;
writeOnpu($1, onpuLen);
};
tone_or_waon : TONE_NAME | waon ;
waon_start : '[' { waonStart; };
waon_end : ']' { $$ := ']'; };
waon : waon_start tones waon_end { $$ := $3; }
| WA_REPEAT {無関係なので省略};
tones : tone_in_waon | tones tone_in_waon ;
tone_in_waon : TONE_NAME len_set { writeOnpu($1, $2); }
| octave_descripts ;
len_set : len_or_empty
| len_set '^' len_set { 省略 }| len_set '~' len_set { 省略 }
| len_set '`' DIGIT { 省略 };
len_or_empty : ONPU_LEN { 省略 }
| /* empty */ { $$ := onpuLen; };
0845デフォルトの名無しさん
NGNGやった事ないわ、ごめん。
len_setがemptyにマッチしないようにして、
onpu : tone_or_waon {音符の保存}
| tone_or_waon len_set {音符+len_setを保存}
ここではwriteOnpuを呼ばない
で、次の構文にマッチしたら、取っておいた音符情報を保存、くらいしか思いつかないや。
0846デフォルトの名無しさん
NGNGlex&yaccプログラミングとかいう本が図書館にあったので読もうとしてみた…
が、1ページでやる気をなくす。
0847yacc聞いてもいいですか
NGNG考えていただいてありがとうございます。
結局、lexで語順を入れ替えて渡すように改造中です。
0848デフォルトの名無しさん
NGNGS式で書けばいいじゃん。括弧だらけになるのは慣れれば問題ないよ。
エディタも助けてくれるし。
まあ、XMLでもいいけどさ…
0849デフォルトの名無しさん
NGNG「記号」と一口に言っても、各種リテラル、クラス名、変数名、メソッド名と
いろいろ種類があるわけで、これを名前空間毎に分けて管理して、さらに
生存期間とスコープについても考慮しなきゃいけない。
つーわけで頭ん中がオーバーフローっす。
概要でもいいし、この辺について詳しい記述がある解説書でもいいんで、
何かポインタちょうだい。
0850デフォルトの名無しさん
NGNGLISP作ってみれば一発でわかるよ>849
0851デフォルトの名無しさん
NGNG早速のレスありがと。
でも、オレ頭堅い人なんでlisp/schemeはちょっと苦手なんだよね
(継続とか、概念がわからん)。lispのインタープリタ作ればわかる
という、その所以についてもうちっと教えてくれない?
0852デフォルトの名無しさん
NGNG何をしたいのかわからないけど、頭硬い人にLISPは無理。
まあ、LISPのシンボルとスコープの概念を理解できれば
名前空間その他なんて屁の河童です。
0853デフォルトの名無しさん
NGNG黒豹本にその辺のPerlでの実装方法が載っていたような。
0854デフォルトの名無しさん
NGNGどうも、今度本屋行ったら探してみるよ
やっぱ本一冊でコンパイラ作るのは難しいのかなー
0855853
NGNG(Perlで記号表を書いている訳ではない)あまり参考にならないかも。
Perlってこの辺グチャグチャだし。
0856デフォルトの名無しさん
NGNGここではそんなの覚える必要無いじゃん。
0857デフォルトの名無しさん
NGNGいまいち文意が読みとれんのだけど、Perlのための記号表を
他の言語(Cなど)で書いてるってこと?もしそうだったら
読む価値あるのではないかと思うけど。
>>856
確かに。schemeなら多少わかるんでソース付きのインタープリタ
探してみようかしら。
0858デフォルトの名無しさん
NGNGa.y b.y common.l という感じで作ってます。
字句解析は共通の common.l でやりたいのですが、
例えば a.y, b.y でそれぞれ %token STRING とやっても、
STRING が a と b で同じ値になるとは限りませんよね。
とりあえず対応表を作ってやってるんですが、
こういう場合のスマートなやりかたはあるんでしょうか。
0859858
NGNG%token STRING 300
とかできるんですね....
逝ってきます..
0860デフォルトの名無しさん
NGNG自己解決厨 (・∀・)イイ!!
0861デフォルトの名無しさん
NGNG厨とまではいかないだろ
0862デフォルトの名無しさん
NGNG早速調べてみたんですが、検索しても「BNF文法を使って・・・」とは書いてあるんだけど、
肝心のBNF文法について記述されているものが見つかりませんでした。
x : expr + expr
| expr - expr
みたいなものを連ねていけば良いのはわかるんですが、、、
すみませんが、「BNF文法」について解説しているHP等紹介して頂けないでしょうか?
0863デフォルトの名無しさん
NGNGBNF記法で検索すると、幸せになれるかも。
BNF「文法」じゃなくて「記法」ね。
0864858
NGNG>>859 の方法でとりあえず動くようにはなったんですが、
そのままだと定数 300 を a.y b.y 両方に書くことになって
保守性がアレなので、なにかいい方法ないでしょうか。
外部プリプロセッサ(m4等)はできれば避けたいので...。
0865デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNG1冊書籍を注文してみました。「lex & yacc」ってやつです。
>>863
発見しました。ありがとうございます。
0868デフォルトの名無しさん
NGNG明快な解答とは行かないまでも、指針みたいなものがあるHPってないかな?
英語でもOK(っていうか最初から日本語は期待してない)なんで、知っている人がいたら教えてね。
0869デフォルトの名無しさん
NGNGこんな感じの
http://www.cs.utexas.edu/users/boyer/ftp/nqthm/trsecd/trsecd.html
0870age
NGNG0871デフォルトの名無しさん
NGNG何故「誰かいませんか?」とき(略)
0872デフォルトの名無しさん
NGNGSECDR Schemeというのがあって、
これは末尾再帰を付加したSECDマシンの拡張を使ったScheme処理系らしいです。
これを作ったのは日本人です。
マシン自体の日本語での説明はあまりなかった気がするけど
ソースがわかりやすかったんで参考になるかと。
昔、niftyで落とせました。
0873デフォルトの名無しさん
NGNG0874_
NGNGa = 1 + 2とか整数だけの式は思ったより簡単に処理できましたが
.演算子とかクラスが入ってくるとどう処理していいのか分からなくなります。
objはObj型のインスタンスで
Obj型のインスタンスを返すFunc()メソッドを持っているとして
a = (obj.Func()).Func();
これってどう処理したらいいのでしょうか。
ノードひとつひとつに型を保持したらいいの?
うーん、こういうのもlispで作ったほうが分かりやすいのなら
作り直おそうかな。。。
0875874
NGNG0876デフォルトの名無しさん
NGNG0877874
NGNG. --- instance
|
. --- instance
|
var
こんな木構造のノードが・・・って分からないですね。。。
すみません、やっぱlispにしてみます。
0878デフォルトの名無しさん
NGNG>a = 1 + 2とか整数だけの式は思ったより簡単に処理できましたが
簡単に処理できた、とは?
a = 1 + 2
の式ではどんな出力になったの?
0880874
NGNG今CLOSの本読んでたんですが、find-classとslot-valueを同時にやろうとして混乱してたみたいです。
lispの表記って気持ち悪いですけど、この表記で考えるとすっきりしますね。
0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG独りでインタプリタ作りますた
とか
一週間でコンパイラ作り上げますた
とか強者はいないのか?え?
0884デフォルトの名無しさん
NGNG俺は違うけど、そういう人はごろごろいると思われ。
でもあまり書き込まない。
0885デフォルトの名無しさん
NGNGそうそう、自慢するような事でもないし。キミも作ってみ。
0886デフォルトの名無しさん
NGNG気持ち悪いのは最初だけだよ(ケケケ
0887デフォルトの名無しさん
NGNGLisp/Scheme スレの過去ログでそんな話題がちらほらあったよ。
C で 2000 行くらいのインタプリタのサンプルもあるから試してみれば?
0888>>883
NGNG糞コードになって飽きてやめた。
ifとgotoとgosubとforとかしかないN88似のBASIC
そのときはネット環境になかったし、資料も手元になかった。
変数の名前はどうしたらいいのか1週間悩みつづけた(藁
自慢するほどのものではないのでクレと言われてもageません。
0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNGアレ、意外に速いよ
オレのクソインタプリタよりも(w
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNGVMの命令実行部はswitch-caseかthreaded-codeのどちらで
処理した方が速いのでしょうか?
それとも差は余りないのですか?
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNGhttp://www.complang.tuwien.ac.at/forth/threading/
0898デフォルトの名無しさん
NGNGthreaded-code
って何?
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG間接ジャンプできるとする。
void *p = &lab;
lab:
...
goto p;
みたいに。
while (1) {
switch (*pc++) {
case OP1:
/* OP1命令の処理 */
break;
case OP2:
/* OP2命令の処理 */
break;
...
}
}
とするかわりに、処理ルーチンの入口番地をVMの命令コードにしてしまうと、
while (1) {
goto *pc++;
label_OP1:
/* OP1命令の処理 */
continue;
label_OP2:
/* OP2命令の処理 */
continue;
...
}
}
と書ける。さらに最適化すると、
label_OP1:
/* OP1命令の処理 */
goto *pc++;
label_OP2:
/* OP2命令の処理 */
goto *pc++;
...
みたいになる。これが(direct) threaded code。
関数ポインタを使うのと比べて、returnの処理がいらない。
0901デフォルトの名無しさん
NGNG>gotoのラベルをvoid *型変数に入れて
もうこの時点で理解不能。
いや、理解はできるけどラベルを変数に〜って、できたっけ?
0902デフォルトの名無しさん
NGNGこれの利点は関数呼び出し程のコストが掛からない、ってか?
0903s
NGNGhttp://www.empathy.com/pccts/roskind.html
に、Jim Roskindというヒトが書いたC++のソースのyaccによるパーサ(でいいよね?)が
あるようです。
templateには対応してない(らしい)ですが。
言語・環境は問わないんで他にC++を解析するようなモノを
どなたかご存知ありませんか?
C++のソースのparsingについては
かなり難しいらしいが
現にdoxygenみたいなのもあるんだし。
0904デフォルトの名無しさん
NGNGC++3rdにBNFでの記述無かったか?
0905s
NGNGそういえばそうですな・・・
みんなそうしてるんだろうか。
がんばってみるか〜
g++のソースは読めたもんじゃなかったし
0906デフォルトの名無しさん
NGNGdoxygenってソース公開されてないのか?
doxygenで目的が達成できるなら、そのソースを取ってくればいいと思うんだが。
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG結局そうやって集めて何に使うのかね。
目的と手間考えたらアホらしくなるんじゃないかと。
特にC++の場合。
0909s
NGNG>908
結構需要はあるとオモーウヨ
VC++のIDEについてるクラスブラウザの
もっと正確で使いやすいのを作りたい。
結構身の程知らずだけど・
反応が少ないのはやっぱりスタンダードなのが無いからかなぁ
とりあえずdoxygenのコードを漁るか・・・
0910s
NGNGFAQだったとは・・・
>[33.10] Is there a yacc-able C++ grammar?
0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG作って公開してくれ。
0913s
NGNG「cfrontは使い物にならない」との指摘を
外国のどっかの掲示板で受けている人を見かけたヨ
ってかグローバル変数のコンストラクタ関係の所為でC++−>Cの変換が出来ないと
聞いた(確か。
0914デフォルトの名無しさん
NGNG命令はmov,add,subだけでAXレジスタonlyで
コメント書けなくてエラーチェックもしてないけど・・・(w
結論=使えない俺
0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNGc++のプログラムエントリをcのそれにそのままマップするとそうなるけど、
cのプログラムエントリでコンストラクタを起動するように書けば問題ないだろ?
0917s(スレ違いスマソ
NGNGあと例外処理とか・・・が無かった気が?<-cfront
よく覚えてない。
0918デフォルトの名無しさん
NGNGgccをコンパイルしたほうが早い。
0919デフォルトの名無しさん
NGNGどんな環境でもCコンパイラさえあれば済む時代がありえたってのに・・
─────金のせいですべてが捻じ曲げられた未来が、ここにはあった。
0920デフォルトの名無しさん
NGNG複数のファイルに分かれているものを、どうやって一箇所に集める?
0921デフォルトの名無しさん
NGNGんー、確かに無理っぽい。
Javaみたいにコードががクラスの中にしかなければ
(使うクラスは全て分かるから)Singletonパターンで
初期化ルーチンを呼べば良いが、クラスと関係ない
初期化コードは呼び出しようがないな。
例えば、
#include <class1.h>
Class1 c(100);
しか書いてないファイルがあったとして、この初期化
コードをmainから呼ぶようにする方法がない。
0923デフォルトの名無しさん
NGNG>どんな環境でもCコンパイラさえあれば済む時代がありえたってのに・・
なぜgccをつかわないのですか?
0924デフォルトの名無しさん
NGNGc++って中間ファイル(*.o)を吐き出すのも仕様に含まれていたっけ?
そうでないなら、その機能を省略して、実行ファイルかライブラリ
を直接吐く(1つのcソースにまとめちゃう)仕様にしても問題ないと思うんだけど。
0925デフォルトの名無しさん
NGNGライブラリを使うには、いちいちソースからコンパイルし直すわけ?
開発中に1行なおしたら全部ビルドし直す?
そんな不便なもの誰が使う?
0926デフォルトの名無しさん
NGNGその意味でも遅いし native コンパイラでないと使えない最適化手法がある
から、オブジェクトコードの質も悪い。
0927デフォルトの名無しさん
NGNGそら、そうだが。
cfrontで完全なc++は一応実現できるんじゃないかってことだ
0928デフォルトの名無しさん
NGNGもしそうなってたらC++の普及には逆効果だったろうけど。
0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNGlongjmp使って。
0931919
NGNG発想とかも出てきてたんじゃないかって事なんだけど。
今のC++と同じものをめざすって意味じゃないよ。
速度にしたってインクリメンタルコンパイルとかあるじゃないか。
おまえら、もっと想像力を働かせろ!
0932デフォルトの名無しさん
NGNGスタック巻き戻し(ローカル変数のデストラクタ呼び出し)はどうするんだ?
PC (プログラムカウンタ) とデストラクタを呼び出す変数の対応表を記録しておく
のが一般的だが、その手法って C コンパイラを介すと使えんよな。
0933デフォルトの名無しさん
NGNGスタックをスキャンしてヒープにコピー。
0934デフォルトの名無しさん
NGNGローカルなデストラクタ呼び出しが必要なところで必ず
setjmpしておき、throw時にはそのチェーンを1つずつたどって
デストラクタを呼び出していけば良いんでは。
あるいは、PCのかわりに「位置ID」整数をコンパイラが割り当てて
(文字列でも良いけど)、それと変数の対応表を作っておく。
実行時には位置IDを自分で作ったスタックに積むか、チェーンにする。
0935デフォルトの名無しさん
NGNG> 実行時には位置IDを自分で作ったスタックに積むか、チェーンにする。
それは、さすがにパフォーマンスに与える影響がクリティカルな気が。
0936デフォルトの名無しさん
NGNG「遅くても良いからとにかく実現できるか」という文脈だから…
0937デフォルトの名無しさん
NGNG>Class1 c(100);
>しか書いてないファイルがあったとして、この初期化
うーん、そんなのプリプロセス段階で
mainに写し書いちゃえばいいんでは?
デバッガで挙動が違うって文句は来そうだけど。
そういう仕様です、でいいじゃん。
>>932
オブジェクトかブロック毎に隠しリンクでも持たせておいて、
スタック巻き戻しをする前に例外をキャッチするところまで
デストラクタ関数を起動する。だめ?
0938デフォルトの名無しさん
NGNG>>937
>うーん、そんなのプリプロセス段階で
>mainに写し書いちゃえばいいんでは?
だから分割コンパイルは無理だよね?という話。
それをあきらめればできるってのは分かった。
>オブジェクトかブロック毎に隠しリンクでも持たせておいて、
>スタック巻き戻しをする前に例外をキャッチするところまで
>デストラクタ関数を起動する。だめ?
>>934 とどう違うの?
0939937
NGNG0940デフォルトの名無しさん
NGNG> だから分割コンパイルは無理だよね?という話。
オリジナルの cfront は nm (オブジェクトファイルからシンボル情報を抽出する
コマンド) を使ってシンボル情報を抽出、その情報を使って非ローカルオブジェ
クトのコンストラクタを走らせるコードを生成してたんじゃかった?
0941デフォルトの名無しさん
NGNG__ファイル名_init()
とかの名前にしておいて、それを呼び出すとか?
Unix依存だがそれなら可能かな。
0942デフォルトの名無しさん
NGNGそれならnmなんていらないじゃん。
標準的なCでできるってことだね。
0943デフォルトの名無しさん
NGNGいや >>941 の方法だと出来ないでしょ。
0944デフォルトの名無しさん
NGNGなぜ?
ファイルがリネームされたときとかの話?
0945デフォルトの名無しさん
NGNGスタートアップルーチンを走らせる手段がない。
0946デフォルトの名無しさん
NGNGその時にスタートアップルーチンを動的に
作れば、っていう話だと思っていたのだが。
0947デフォルトの名無しさん
NGNGライブラリも。
0948デフォルトの名無しさん
NGNGそっか。ライブラリね。
トリッキーなライブラリの作り方をすれば
何とかなりそうな気もするが、nm使った方が楽だな。
じゃあ、
1.まずmain()の前に__init_all()を呼び出すスタートアップルーチンを
用意しとく。
2.可能な限りリンクしてみる。
3.__init_xxxx()という関数名をnmで探す。
4.それらを呼び出す__init_all()を作ってリンク。
で、完成。
__init_xxxx()の間の依存関係は、
1.xxxxにmangleしておいて、__init_all()で正しい順で呼ぶ。
2.各__init_xxxx()が判断して「後でもう一回呼べ」という値を返す。
__init_all()の中で、そういうやつがいなくなるまで繰り返し呼ぶ。
0949房々
NGNG0950デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNGGW厨万歳
0954デフォルトの名無しさん
NGNG次スレ立てろ >> 961
0955デフォルトの名無しさん
NGNGもう少しなんだ・・・・
2chよ!私は帰ってきた〜!!
0956デフォルトの名無しさん
NGNGhttp://www.cs.princeton.edu/~appel/modern/java/
http://www.cs.princeton.edu/~appel/modern/ml/
http://www.cs.princeton.edu/~appel/modern/c/
0957デフォルトの名無しさん
NGNGML版がメインでCとJavaは誤植だらけという噂を聞いたので
ML版を読んだよ。ML版については、とってもよかった。Java
版とC版の真実は知らない。
0958デフォルトの名無しさん
NGNGMLの日本語版ってあるの?
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNGその逆って出来ないんですか?
0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNGもちろんできるよ。
たとえば x86 の浮動小数点コプロセッサはスタックマシンだけど、ふつーの C 言語
などで書かれた式(変数を自由に使える高級言語は、いってみればレジスタ数無制
限のレジスタマシン用アセンブラみたいなものだよね)をコンパイルできるでしょ?
ただし、純粋なスタックマシン、即ちスタックトップしか見えずにスタックトップとその
下のものを入れ替えたりできないマシンだと、極めて非効率で実用に耐えない筈。
0963914
NGNG徹夜明けなんで来てます来てます、ピピピ(´∀`;)
0964デフォルトの名無しさん
NGNG0965914
NGNG今日はmovのword ptr とbyte ptr修飾子?もサポーテッド、OK!
0966デフォルトの名無しさん
NGNGS->S1 D S.v=2*S1.v + D.v
S->D S.v=3*D.v
D->0 D.v=2
D->1 D.v=1
のグラマーで、左再帰を削除して、syntaxとsemantic ruleに直して、
S.vというグラマーを作らないといけないのですが、どのようにして
つくったらいいでしょうか?ヒントだけでもいいので教えてください。
お願いします。
0967デフォルトの名無しさん
NGNGてことで、>>968 よろしく
0968デフォルトの名無しさん
NGNG>そろそろ次のスレ立てるか・・・
言ーだしっぺの法則つーことで、あとよろしく。
0969967
NGNGつか、残り31レスどうしようか・・・
0970デフォルトの名無しさん
NGNGアセンブラマクロのdbはどうやって実装しようか?
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNGそんなところで躓くなよ
0973967
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1021136715/
立てたよ。疲れた。
以後、上のスレでお願いします。
0974KOKUYO
NGNG第1引数を探索して取り除くように拡張した関数はどうやって
作ればいいんですか?
あと、二重以上のリストを第一引数として受け取り、
深さ1のリストとして返す関数はどうすればいいんですか?
動作例)(makeflat '(a(b c)((d(e)f)g)h))
→(a b c d e f g)
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG途中で DAT オチするのがオチかもしれんが。
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG09851000
NGNG0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG10001000
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。