「コンパイラ・スクリプトエンジン」相談室 3at TECH
「コンパイラ・スクリプトエンジン」相談室 3 - 暇つぶし2ch357:デフォルトの名無しさん
04/01/28 08:54
>>355
すんまそん、あっちで聞いてきました

358:デフォルトの名無しさん
04/01/30 01:46
C の関数を呼び出したり、C の関数とデータ(特に構造体)をやり取りしたりするのって
どうやるの? 宜しかったらポインタを教えて下さい。

359:デフォルトの名無しさん
04/01/30 02:31
インラインアセでpushpopするだけ

360:デフォルトの名無しさん
04/01/31 00:59
>>359
今日読んだソースがそんな感じでした。何やってるか全く分かりませんでしたが・・・。
アセンブラ勉強するしか無いのか。

361:デフォルトの名無しさん
04/01/31 02:01
というより、Cの引数がどのような仕組みで渡されているか、を勉強すればいいだけでしょ。

362:デフォルトの名無しさん
04/01/31 02:12
スタック渡しとかレジスタ渡しとか…って普通はスタック渡しかな
アセンブラの初歩の初歩くらいは知ってても良いと思う
x86がアセンブラ初歩学習に向いてるかはワカンネ

363:デフォルトの名無しさん
04/01/31 14:27
でももうちょっとマシなインターフェースはあって良い気がする

364:デフォルトの名無しさん
04/01/31 17:47
互換性が・・・

365:amazonよりお知らせ
04/02/01 04:35
誠に申し訳ありませんが、以下の商品の発売日が変更となりました。

Alfred V. Aho (著), その他 "21st Century Compilers"

現在、この商品は発売準備が進められている状況でございます。お客様のご
注文は、商品の発売までこのまま継続させていただきます。この商品が入荷
された時点で、Amazon.co.jpサイトの「アカウントサービス」に表示された
商品の注文内容が「近日発売」から最新の在庫情報へと更新されますので、
ご参照ください。


366:1
04/02/02 08:53
わ。今気付いた。
俺がスレ建てた数日後に別の所でテンプレ纏めてた人いたんだ。

プログラミングの言語ってどうやって作るの
スレリンク(tech板:138-151番)

詳しくは見てないけど、個人的に追加したのもあるって事なので
次スレ建てる人は見ときましょ。

367:名無し@沢村
04/02/02 11:12
おまいらよ~、マシン語のサイトこっちに移動したからな。

URLリンク(hp.vector.co.jp)

↑だんだん充実してきたぞ。世界一くらいにな~♪見ちみれ。

368:デフォルトの名無しさん
04/02/03 22:19
コンパイラにおいてオートマトンは何のために利用されるか?
という質問をされたら何と答えたらいいと思いますか?

369:デフォルトの名無しさん
04/02/03 23:32
>>368
まあ、どんなプログラムもオートマトンの一種ですからね。


370:デフォルトの名無しさん
04/02/04 14:17
石の中にいる

371:デフォルトの名無しさん
04/02/04 16:47
まぁ字句解析と文法解析とでも答えておけばいいんだろうね。
それで相手がどう思おうと、人生には大した影響ないだろうし。

372:名無し@沢村
04/02/04 19:37
オートマン=自動人間

373:デフォルトの名無しさん
04/02/04 19:38
マトン=羊肉

374:デフォルトの名無しさん
04/02/04 20:03
トマト=トマト

375:デフォルトの名無しさん
04/02/04 21:30
オートマトンじゃなく人に進化して♪

376:デフォルトの名無しさん
04/02/04 22:02
はは、懐かしい。
初めて聴いたときには「こんな単語、一般人はわからねえだろ」と
突っ込んだ記憶がある

377:デフォルトの名無しさん
04/02/04 22:05
オー!(感嘆
トマト(トマト見つけた
ン!(まい(美味しい

378:デフォルトの名無しさん
04/02/04 22:12
自動羊肉

379:デフォルトの名無しさん
04/02/04 22:15
もう意味がワカラン

380:デフォルトの名無しさん
04/02/05 06:38
糞スレになってまいりました

381:デフォルトの名無しさん
04/02/05 07:06
368は土下座して謝れ

382:デフォルトの名無しさん
04/02/05 11:18
>>378
どっかの(嘘)用語解説かなんかで

勝手に鍋へ飛びこむ羊のこと

って書いてあったよねぇ。


383:名無し@沢村
04/02/05 19:32
オートマトン=自動羊肉

URLリンク(hp.vector.co.jp)

384:デフォルトの名無しさん
04/02/05 22:35
うぜえバカ
URLはるなバカ
おこるぞバカ

385:名無し@沢村
04/02/05 23:16
>>384

きんたまのぉ~おっちゃんがぁ~くそ屁をこいた~糞こいたぁ~

URLリンク(hp.vector.co.jp)

386:デフォルトの名無しさん
04/02/06 00:54
つまるところx86アセンブラとDOSコールだよな、これって

387:デフォルトの名無しさん
04/02/06 05:18
コンパイラはいいとして・・・
Windowsの実行ファイルのフォーマットって解りますか・・・?
バイナリ見る限りMZっという文字が入ってるのは解るのですが・・

388:デフォルトの名無しさん
04/02/06 06:37
そういう情報は自分も知りたいんだけど、資料がなかなか集まらない。
ヘッダの構成はわかったとしても、そこにどういう値を入れるのか
はっきりしないことが多いし。

つーか、PEフォーマットとかCOFF obj形式とかの解析スレ立てない?
外部アセンブラやリンカに頼らずに自分でexeファイルを作れる様に
なる目的で。アセンブラスレとは内容的にかち合わないし。
スレタイは
「.EXEや.OBJを手作りするスレ」
とか。


389:デフォルトの名無しさん
04/02/06 06:40
>>388
「機械語プログラミング」にオブジェクトファイル形式も
入るんじゃないの?

390:名無し@沢村
04/02/06 06:52
>>387
「MZ」という文字はDOSの受け皿のことだよ。
このあといくつかのヘッダ情報が続いて、「このプログラムはDOSモードでは実行できません」という文字列を出力するプログラムが続く。
そしてその少し下の見ると多分「PE」という文字があるだろ?「PE」でない場合もあるがね。
そこからやっとPEファイル(GUIの実行ファイル)のヘッダが始まるのだよ。
つまりういんの実行ファイルはPE形式なんだ。
PE形式については、2、3日以内に、おれのサイトで全仕様を公開するから、楽しみにねぇ~♪

URLリンク(hp.vector.co.jp)



391:デフォルトの名無しさん
04/02/06 07:08
>>388
「機械語プロ~」だと範囲広すぎです・・
ちなみにインストラクションコード手書するとかが目的なわけじゃなく、
(コードの手書きは資料も揃ってるしそんなに難解でもない、)

純粋にそういうコードを単体で動かすために必要な、
MZ~から始まる実行ファイルやリンカに食わせるCOFFデータ
の方の話がしたいので。


392:デフォルトの名無しさん
04/02/06 07:11
>>391
ここでは駄目。

393:デフォルトの名無しさん
04/02/06 07:13
binutilsのソースを読めばいいじゃん。
ただの単発質問スレだろう、それじゃ。

394:デフォルトの名無しさん
04/02/06 07:20
>>393
GNUのクソコードを読む暇はさすがにないと思うぜ(w


395:デフォルトの名無しさん
04/02/06 07:24
>>394
殆どこの板を使った事のないド素人はすっこんでろ

396:デフォルトの名無しさん
04/02/06 07:26
exeの構成
----------------------
DOS 2.0 Section
----------------------
PE Header
----------------------
Section Headers
----------------------
Image Pages
----------------------


397:デフォルトの名無しさん
04/02/06 07:28
coffの構成
----------------------
MS COFF Header
----------------------
Section Headers
----------------------
Image Pages
----------------------

398:デフォルトの名無しさん
04/02/06 07:31
>>387 >>388
ここは見ての通り厨の溜まり場なので、
とりあえず↓に移動して聞いたほうがよいかと

機械語なら俺に質問しろ!
スレリンク(tech板)


399:デフォルトの名無しさん
04/02/06 07:49
Linkers & Loaders なんかでちょっと書いてあったかなー。
でもあれは広く浅くだから大して参考にならないか。
日本語で読めるものとしてはただ一つと言っていいソッチ方面への入門書だけど。

PEの資料へのリンク↓
URLリンク(wiki.osdev.info)

ってか、沢村がマトモな事言ってるのにスルーされてて笑ったw

>>390
がんがれー。
英文丸写しでなく日本語のを頼むぞ!

400:デフォルトの名無しさん
04/02/06 08:36
こっちのスレも使える。
Linker && Loader
スレリンク(tech板)

401:デフォルトの名無しさん
04/02/06 12:46
MSによるPEフォーマット仕様書(日本語)
URLリンク(www.interq.or.jp)

402:デフォルトの名無しさん
04/02/06 13:16
>>401
げ、こんなページがあったとは・・・

403:デフォルトの名無しさん
04/02/06 14:26
どっからこんなもんを。
>>401すげー。

以前はMSDN Onlineで公開されてたのか?

404:デフォルトの名無しさん
04/02/06 15:31
>>401
初めてみたぞ。 GJ!


405:デフォルトの名無しさん
04/02/06 17:26
ていうか普通にMSDNに日本語資料あるし

406:デフォルトの名無しさん
04/02/06 17:46
貧乏人にはMSDNなんて読めねえと思いますが

407:デフォルトの名無しさん
04/02/06 18:02
貧乏人向けMSDN
URLリンク(www.microsoft.com)


408:デフォルトの名無しさん
04/02/06 18:04
おまいらどうでもいいけどスレ違いですよ

409:デフォルトの名無しさん
04/02/06 18:28
今までの糞レスに比べたらだいぶマシだろうが(w

410:デフォルトの名無しさん
04/02/06 18:31
そして誰もいなくなった・・・

411:デフォルトの名無しさん
04/02/06 18:43
>>407
そこは知ってますが、
どうやっても>>401の様な情報には辿りつかなかったです・・

412:デフォルトの名無しさん
04/02/06 19:16
日本語MSDN Onlineにはその情報無いね

413:デフォルトの名無しさん
04/02/06 19:31
イエロー人種にはあえて多くを教えないとか
差別されてるんじゃないか?(w

414:デフォルトの名無しさん
04/02/06 19:32
いや、MSDN買えってことだろ

415:デフォルトの名無しさん
04/02/06 19:34
人種制限か。
アメ公ならやりそうな事だな。

416:デフォルトの名無しさん
04/02/06 21:48
単にMSKKが無能揃いなだけだろ。>>413-415を否定する根拠もないがな。

417:デフォルトの名無しさん
04/02/06 22:53
字句解析
文字をハッシュで調べる
・変数、関数名、キーワードを判別
ハッシュのない場合
・数値
・変数名
・関数名
をSwitch分で単語に区切る


構文解析
区切った単語を木で別ける
キーワード文(IF文等が正しいか評価する)

意味解析
木で別けた文を
計算式、評価式が正しいか・・・

目的語の変換
・Data
・PRORAM
 ・RPOC
  引数
   StackPointを設定する
  戻り値(相対的
  返り値(相対的)
・相対的なラベルを設定する

リンカ
・関数
・グローバル変数
・相対的なラベルを絶対値にする

418:デフォルトの名無しさん
04/02/07 02:52
独り言はスルーか。

419:デフォルトの名無しさん
04/02/07 02:59
GCC frontend弄ってる人いない?

420:名無し@沢村
04/02/07 21:13
おい、おまーら聞け、おれのマシン語のサイトにPEフォーマットの仕様をUPしたからな。
恐ろしすぎるぞ!!おまーら↓

URLリンク(hp.vector.co.jp)


421:デフォルトの名無しさん
04/02/08 11:50
むしろlibelfの使い方が知りたい。

422:デフォルトの名無しさん
04/02/09 00:52
質問させてください。
LLとLRの解析処理の違いは何となく理解できたのですが、
記述能力という面でどういった違いがあるのでしょうか?
javaとかって(LA)LRでないと記述できないみたいな事も
聞いたことがあるけど、これってLLでは記述できないって事で
しょうか。


423:デフォルトの名無しさん
04/02/09 01:38
>>422
LL(1)で書けるかどうかはわかりませんが、
ANTLRというパーサー生成系で書かれたJavaの文法がありますから
LL(k)で記述可能なのは確かです。




424:デフォルトの名無しさん
04/02/09 07:50
>>420
無駄ではなーい。
乙。
各ページにTOPへのリンク付けて、ロボット検索でどっかのページへ直接着いた時にも
他のページへ辿れるようにしとけー。

425:デフォルトの名無しさん
04/02/09 13:27
>>423
ANT"LR"ってLR系かと思い込んでました。
LL(k)だったんですね。ありがとうございました。



426:デフォルトの名無しさん
04/02/11 22:07
一般的なコンパイラやスクリプトでは、
yacc&lexのソースコードは何行ぐらいになりますか?


427:デフォルトの名無しさん
04/02/11 22:18
千差万別。

428:デフォルトの名無しさん
04/02/12 00:05
いきなり質問すみません。
以下のコードを最適化(局所的に?)するとどーなるんですか?
低レベルかもしれませんが私にはさっぱりです。

for(i = 0; i < 100; i++)
  a[i] = b[i] * c[k]-b[i];


429:デフォルトの名無しさん
04/02/12 00:07
とりあえずstrength-reduceだな

430:デフォルトの名無しさん
04/02/12 00:41
>>428
c[k]がループ不変なので外に出す。

もっと気合いがはいってるコンパイラなら、
a[i]=b[i]*(c[k]-1)
に変換したあと (c[k]-1)をループ外にくくり出すくらいはやるかな?
そしてinduction variableを消す。

ck_1 = c[k] - 1;
ap = a; bp = b;
for (i = 0; i < 100; i++) {
 *ap = *bp * ck_1;
 ap++; bp++;
}

あとはループunrollingとかforをdo-whileにおきかえるとか。


431:デフォルトの名無しさん
04/02/12 01:03
>>426
手元にあるANSI Cのyaccによる定義。ソースが766行(宣言部と文法定義のみ)。
終端記号、還元規則の数などは:

83 terminal symbols
80 nonterminal symbols
224 productions
364 states

フリーな言語処理系はたくさんあるから、入手して眺めてみては?


432:デフォルトの名無しさん
04/02/12 01:06
>>430
c[k] が定数となるのは a と c が重なっていない場合のみ
なので、無条件にループ外に追い出すことはできない。

仮に c[k] がループ不変であるとすると、教科書的には
これが最適ではないかな。ただし、ターゲット CPU に
とって、最速かどうかは別の話だが。

ck_1 = c[k] - 1;
for (ap = a, bp = b, ae = a + 100; ap < ae; ap++, bp++)
 *ap = *bp * ck_1;

433:428
04/02/12 01:17
>>430
ありがとうございます。
たぶん気合はいってないコンパイラなんでc[k]がループ不変だから外に出すってことは

t=c[k];
for(i = 0; i < 100; i++){
  a[i] = b[i] * t-b[i];
}

これでOKですか?




434:デフォルトの名無しさん
04/02/12 01:32
↑…よく読め…あと式に全角使わない (´・ω・`)

t=c[k]; → t=c[k] - 1;
a[i] = b[i] * t-b[i]; → a[i] = b[i] * t;



435:デフォルトの名無しさん
04/02/12 01:40
COFFの仕様の日本語のドキュメントってどこにある?

436:430
04/02/12 02:32
>>432
おお、そうですね。aliase問題をすっかり忘れていました。


437:デフォルトの名無しさん
04/02/12 02:40
>>435
タイミング的にD言語スレの人だよな?
どっちでもスレ違いになっちゃうけど、
とりあえず向こうにレスしておいたYO。

438:Amazon.co.jp よりお知らせ
04/02/12 02:58
誠に申し訳ございませんが、大変残念なご報告があります。お客様のご注文内容のうち、
以下の商品については入手できないことが判明いたしました。

Alfred V. Aho (著), その他 "21st Century Compilers"

お客様にこの商品をお届けできる見込みでしたが、現時点ではどの仕入先
からも入手できないことが判明いたしました。お客様のご期待に背くお知らせ
となりますと共に、お客様にご迷惑をおかけしたことをお詫びいたします。

ガ━(゚Д゚;)━ソ!


439:デフォルトの名無しさん
04/02/12 08:15
ワラタ

440:デフォルトの名無しさん
04/02/12 13:36
>>438
注文しなおせw
今はちゃんと「予約する」になってるから。

441:デフォルトの名無しさん
04/02/12 13:39
駄目元で黒猫にも頼んでみたら
絶版モノでも結構しつこく在庫捜してくれたよ>猫


442:デフォルトの名無しさん
04/02/12 15:12
>>441
いや、絶版じゃなくて「まだ出版されてない」本なんです。

>>440
2004年8月1日に伸びてますね。気長に待つしかないか。


443:デフォルトの名無しさん
04/02/12 17:03
parrotの追っかけをやってる人はいませんか?

444:デフォルトの名無しさん
04/02/12 17:08
2005年1月に延びましたよ…。残念ながら。
URLリンク(www.aw-bc.com)

ISBN: 0-321-13143-6
Publisher: Addison-Wesley
Copyright: 2006

となっているのは2006年まで延期するという布石かな

445:デフォルトの名無しさん
04/02/12 17:24
だーーーなんじゃそら。
ホントに出版されるんだろうなあ・・・

446:デフォルトの名無しさん
04/02/12 17:43
クラスってどうやって実装すりゃいいの?関数は
わかるんだけどクラスがさっぱりわからん

447:デフォルトの名無しさん
04/02/12 18:56
ああ?

448:デフォルトの名無しさん
04/02/12 20:35
>>444
ガ━━ΣΣ(゚Д゚;)━━ン

449:デフォルトの名無しさん
04/02/12 23:29
yacc&lexは知らないけど、
java.io.StreamTokenizerは便利だと思った。
URLリンク(java.sun.com)

450:デフォルトの名無しさん
04/02/12 23:42
Cライブラリにもこういったtokenizerはあるよな
自作する人もそれなりに居るだろう
で、それに満足できなくなったらlexに進むってわけだ

451:デフォルトの名無しさん
04/02/12 23:45
strtok は作りがよろしくないからねえ。

452:デフォルトの名無しさん
04/02/13 06:52
>>446
vptrで検索。

453:デフォルトの名無しさん
04/02/13 13:19
Boost.Spirit
URLリンク(spirit.sourceforge.net)

いい時代だ

454:デフォルトの名無しさん
04/02/13 13:57
そこのc.zipって、プリプロセッサ入ってないんだから
full ANSI C とはとても呼べたもんではないよなあ
Cはプリプロセッサがないと魅力半減だし

455:デフォルトの名無しさん
04/02/13 14:53
>>454
ラッパーのスクリプトでも書けばいいんじゃないの?

456:デフォルトの名無しさん
04/02/13 15:14
>>454
つうか、プリプロセッサは
あるものを使えばいいんじゃないの。
プリプロセッサまで自作する意味ってある?

457:デフォルトの名無しさん
04/02/13 15:15
>>455
書き方わかんないから
最後まで責任とってほしいよ
なんなんだよあの中途半端さは

458:デフォルトの名無しさん
04/02/13 15:16
>>456
馬鹿かおめえは
んなこといったらc.zipの存在そのものが
まるっきり無意味じゃねえかよ

459:デフォルトの名無しさん
04/02/13 15:36
>>458
プ
本気でそう思ってるの?

460:デフォルトの名無しさん
04/02/13 16:34
>>454 同じページにwaveがあるだろうに。


461:デフォルトの名無しさん
04/02/13 16:53
>>459
ほんとに馬鹿まるだしだな
哀れでしょうがないぞ
頭大丈夫かい?

>>460
何なのか説明しろよ。

462:デフォルトの名無しさん
04/02/13 17:26
>>461
Spirit で記述された C/C++ プリプロセッサ。
つーか、ドキュメント嫁

463:デフォルトの名無しさん
04/02/13 18:20
spilitだかsplitだか非常にまぎらわしい

464:デフォルトの名無しさん
04/02/13 18:31
と思ったらspiritか
漏れの目が腐ってるだけでした

465:デフォルトの名無しさん
04/02/13 19:18
boostのソースは吐き気がするよ。
これほんとに使ってる奴いるの?

466:デフォルトの名無しさん
04/02/13 19:21
そう思うよな、でもどうやら仕事じゃあ使えないと話にならないらしい。
boostとかLokiを採用してるプロジェクトなんて見たこと無いんだけどさ。

467:デフォルトの名無しさん
04/02/13 20:02
人間には言語の限界へと向かって突進しようとする衝動がある

                     ウィトゲンシュタイン

468:デフォルトの名無しさん
04/02/13 20:16
boost含んだコード納品するなんて機会あるんか?

469:デフォルトの名無しさん
04/02/13 20:45
この人等はboostで何かいやな思いしたのかな。
boost知らなくてバカにされたとか?

470:デフォルトの名無しさん
04/02/13 21:07
まわりがboostの話ばかりしててついて行けなくてストレス溜まったとかな

471:デフォルトの名無しさん
04/02/13 21:18
そんなあなたには Let's boost がおすすめ。
URLリンク(www.kmonos.net)
日本語解説でわかりやすいよ。

ここみて必要性を感じなければ使わなければ良いだけの話。
ましてや他の人がboostを使ったコードを納品する機会が
あるかどうかなんて知らなくていいでしょ。

472:デフォルトの名無しさん
04/02/13 21:34
boostにはiostreamクラスの演算子オーバーロードのような
構文そのものの意味を変えてコーディングするスタイルを
強要するライブラリ(spiritとか)があるから
なんかあんまり好きになれない。

473:デフォルトの名無しさん
04/02/13 21:43
>>472
基本的にはやりすぎだと思うけど、boost::filesystem の
パス結合演算子を「/」にした辺りはなかなか面白いと思ったり。

Boost っていろいろごたまぜだから、
俺は気に入ったところだけつまみ食いという感じ。

474:デフォルトの名無しさん
04/02/13 21:50
おまえらスレ違い

475:デフォルトの名無しさん
04/02/13 22:04
すまん、ナチュラルにテンプレートスレかとおもてたよ。

476:デフォルトの名無しさん
04/02/13 22:04
すまん、ナチュラルにテンプレートスレかとおもてたよ。

477:デフォルトの名無しさん
04/02/14 17:09
>>431
ご親切にありがとうござい居ます。
やはり、かなりの数のシンボルが有るんですね。


478:デフォルトの名無しさん
04/02/14 21:24
lispでは新しい構文を定義するのは普通だけど

479:デフォルトの名無しさん
04/02/15 21:03
lisp はクソ。マクロは可読性を下げてユーザビリティがイクナイ。
) より end のほうがユーザビリティがイイんだよ。ボケが。

480:デフォルトの名無しさん
04/02/15 21:12
よそでやれ
どうしても此処でやりたきゃ、可読性の悪い理由書け >>479
そうすりゃ、言語仕様やらの話題になる。

481:デフォルトの名無しさん
04/02/15 21:26
コンパイラってアセンブラ吐く所まで作れば良いの?
それともオブジェクトコード作ってリンクする所まで?

482:デフォルトの名無しさん
04/02/15 21:26
言語設計と言語処理系の話は分けるべき?
それとも不可分と考えるべき?

483:デフォルトの名無しさん
04/02/15 21:57
言語によってはコンパイラだけで完結出来なかったりするんだよなー。

484:デフォルトの名無しさん
04/02/15 22:04
J*V*厨の香りがプンプンするな

485:デフォルトの名無しさん
04/02/15 22:12
そなん?
C++とかコンパイラだけしか見ないって条件だと殆ど無理じゃね?

486:デフォルトの名無しさん
04/02/15 23:55
>>481
アセンブラを呼出してオブジェクトにすればいい。
ただし権利関係やソースのフォーマット等で既存のが使えない場合は
アセンブラも自前で作らなきゃならない場合も多い。


487:デフォルトの名無しさん
04/02/16 06:41
lispはあれでいいんだよ。読みやすさをちょっと犠牲にしただけで
物凄いメリットが生まれたんだから。

488:デフォルトの名無しさん
04/02/16 13:01
ゲーデルの証明が理解出来なかったカッコ嫌いLISP嫌い厨


489:488
04/02/16 13:19


490:デフォルトの名無しさん
04/02/16 14:07
>>488-489
ワロタ

491:デフォルトの名無しさん
04/02/16 14:37
Lispさんは悪くない。
Paul Grahamの文章を読んで勘違いしたLisp厨が悪い。

つかPaulはさっさとArcを世に問えよ、と。

492:デフォルトの名無しさん
04/02/17 14:42
)とendを置き換えるプリプロセッサ(sed使えば一行で書けるなw)を使えば糸冬了(<-何故か変換できる)。

493:デフォルトの名無しさん
04/02/17 18:01
endだらけになってもっと悲惨

494:デフォルトの名無しさん
04/02/17 19:59
( )を{ }に置き換えたらC言語っぽく見えますか?

495:デフォルトの名無しさん
04/02/17 23:02
Lispスレで聞いてくれ。

496:デフォルトの名無しさん
04/02/17 23:31
>>494
curl という(ダウンローダじゃないよ)のがあったな。確か昔スレたったと思う。
Arc は使ってみたいね。[] 萌え。Lisp は適度に [] を入れれば結構読み易くなりそうな
気がするんで期待してます。

いつか Scheme コンパイラ作ってみたいな。

497:デフォルトの名無しさん
04/02/18 13:37
俺は()&前置記法で統一されているのがベストと思う。

498:名無し@沢村
04/02/18 22:06
おれのマシン語のサイトに掲示板ができたぞ!
ほんにおまいら~♪

URLリンク(hp.vector.co.jp)


499:デフォルトの名無しさん
04/02/19 01:58
既出だけど、TinyCC って面白そう。

URLリンク(fabrice.bellard.free.fr)
URLリンク(2.csx.jp)

500:デフォルトの名無しさん
04/02/20 02:46
500ゲト。

URLリンク(i.loveruby.net)
ついに来た。

501:デフォルトの名無しさん
04/02/22 08:31
URLリンク(home.in.tum.de)
URLリンク(www.cobalt.co.jp)

just a memo.

502:デフォルトの名無しさん
04/02/26 15:07
クラスベースよりプロトタイプベースの方が実装ラクだな
メタメタしなくていいしw

503:デフォルトの名無しさん
04/02/26 20:38
スクリプトで、 printfとかを実装しようとすると、
たんなるラッパーでは通用しませんよね?

やはり、これって自前で実装しなければならないんでしょうか?


504:デフォルトの名無しさん
04/02/26 20:41
いいえ

505:デフォルトの名無しさん
04/02/26 20:57
Perlは色んな関数自前で用意することが多いよな。

506:デフォルトの名無しさん
04/02/26 21:06
>>503
可変長引数の処理ができれば
実装しなくてもvprintfかvsprintfでどうにかなりそうだけど

507:デフォルトの名無しさん
04/02/26 21:12
>>506
C言語の仕様だけで任意の可変長引数を作り出すのってできたっけ?
スタック弄らないとだめ?

508:デフォルトの名無しさん
04/02/26 21:15
>>507
できる。stdarg.hの説明でも見れ。

509:デフォルトの名無しさん
04/02/26 21:24
>>508
URLリンク(www.catnet.ne.jp)
には出来ないって書いてあるみたいだけど?

なんか間違ってる?

510:デフォルトの名無しさん
04/02/26 21:30
>>509
あー、そっか。
実行時は確かにできないや。スマソ。
素直にスタック弄ってくらさい。

511:デフォルトの名無しさん
04/02/26 22:06
やはり出来んみたいね!
スタックいじるのって禁じ手かも。


512:デフォルトの名無しさん
04/02/26 22:10
>>509
15.13あたりかな?
やはり、printfのwrapperは無理みたい。


513:デフォルトの名無しさん
04/02/26 22:11
移植性考えればスタック弄るのは止めた方が良いと思う。

514:デフォルトの名無しさん
04/02/26 22:28
移植性つってもpushの順番程度の違いでしかないがなあ

515:デフォルトの名無しさん
04/02/26 22:40
スタックとは限らない。

516:デフォルトの名無しさん
04/02/26 22:49
お遊びでつくるプログラムに、移植性の必要は皆無。

517:デフォルトの名無しさん
04/02/26 22:49
>>503
スクリプト言語での1回のprintf呼びだしを、
1回のCのprintf関数呼びだしで実現しようとすると大変だが、
引数をひとつずつ処理して、何度もprintf呼べばいいんでない?



518:デフォルトの名無しさん
04/02/27 08:06
>>517
フォーマットを解析する必要があるので、
移植性は優れるが手間は余計にかかると思われ。


519:デフォルトの名無しさん
04/02/27 11:33
yacc/lex,bison/flexの話題もこっちでOKですか?

520:デフォルトの名無しさん
04/02/27 13:35
>>519
OK


521:デフォルトの名無しさん
04/02/27 18:43
Windowsで汎用的なスクリプト用途考えると、
VBScriptみたいにCOM扱えないと話にならない気がする。
と、VBScript書いてて思った。
でもCOM扱うの面倒なんだよな。
自作の言語をWSHに対応させたって人いる?
たぶんえらい手間掛かってると思うけど。

522:デフォルトの名無しさん
04/02/27 21:23
させようとしたことはあります。
が、IE中でscriptタグで動かすと凍るのであきらめた。
コンソールからだと、WScript.CreateObjectが上手く行く時と行かない時があったような、記憶はある。
だいぶ前の話です。

523:デフォルトの名無しさん
04/02/28 06:12
DMonkeyってwsh対応してなかったっけ

524:デフォルトの名無しさん
04/02/28 13:46
>>517
Good Idea!

ただし、scanfには使えない可能性が...


525:デフォルトの名無しさん
04/02/28 13:52
直接pushで積んだ方が楽だし変な不具合もない。
なんつうか、潔さ?

526:デフォルトの名無しさん
04/02/28 21:47
>>525
GCCでもできますか?


527:デフォルトの名無しさん
04/02/28 22:12
できますが?

528:デフォルトの名無しさん
04/02/28 23:17
>>524
format I/Oの処理は、printf(3)に下請させる場合でも、
format指定と引数の方が合ってるかどうかなど、
適切なチェックを行わなければ、処理系の状態がおかしくなってしまうので、(e.g. core dump)
言語の仕様として、C風の書式処理じゃなくて、C++風にした方がいい。


529:デフォルトの名無しさん
04/02/29 00:06
C++形式はアホとしかいいようがありませんな。
言語側の都合というか。

530:デフォルトの名無しさん
04/02/29 00:45
>>527
どのように実現されるのでしょうか?
もしよろしければ、HPアドレス等お教え下さい。


531:sage
04/02/29 00:47
>>529
どのあたりがアフォですかね?


532:デフォルトの名無しさん
04/02/29 00:53
>>531
一目で書式がわからない時点で相当のアホかと。

533:527
04/02/29 00:55
>>530
インラインアセンブラ使えよ。
それだけだよ。
何を迷ってるんだが。

534:デフォルトの名無しさん
04/02/29 01:40
x86と68kとarmとppcとG3~G5くらいまで対応すれば普通の人は困らないかな?

535:デフォルトの名無しさん
04/02/29 12:38
SPARCO...

536:デフォルトの名無しさん
04/02/29 14:14
今ドラゴンブックを読んでいるんですが、
LRの構文解析は、yacc等のツールを使わないと作成できないんですか?
手動で書くと非常にめんどくさいとかいうのをどこかで読んだ気がするんですが、
なぜですか?

537:デフォルトの名無しさん
04/02/29 14:23
なぜですかって、自分で書いてみろよ(w
アホか?

538:536
04/02/29 14:28
>>537

いや、自分、まだそんなレベルじゃないので。
構文解析などはまったくわからず、ドラゴンブックの最初の一章を読んでいる途中です。

539:デフォルトの名無しさん
04/02/29 14:53
プログラム書けない情報系の学生

540:536
04/02/29 14:56
>>539
情報系ではありません。

ただし、学生ではあります。

(プログラム書けないってのは、まあ、当たらずとも遠からじと言えるかも)



541:デフォルトの名無しさん
04/02/29 15:04
>>536
まだいたのか(w
「めんどくさい」ってことは「作成できる」ってことだろ。
聞いた話とか鵜呑みにするんじゃなくて、
こういうのは自主的に確かめるとかしないと身にならないよ。

542:デフォルトの名無しさん
04/02/29 15:21
コンパイラのようなこんな人間もいるのだな。

543:デフォルトの名無しさん
04/02/29 15:32
クリリンの事かぁー!

544:デフォルトの名無しさん
04/02/29 17:48
>>536
最後まで読んでから聞け
社会に出てから苦労するぞ


545:デフォルトの名無しさん
04/02/29 21:42
allocaってどうやって実装してるの?
引数に渡す値って可変なんでしょ?
後付けでadd esp, nとかわかんの?
ソース嫁とかなしでおながいします。
サムイので

546:デフォルトの名無しさん
04/02/29 21:56
ソース嫁

547:デフォルトの名無しさん
04/02/29 22:07
サム・・・

548:デフォルトの名無しさん
04/02/29 22:11
gccだとbuiltin_allocaでinline風の処理。

549:デフォルトの名無しさん
04/02/29 22:25
どうやっても何もねーし
スタックポインタ動かす→そのアドレス返す、で終わりだろ

550:デフォルトの名無しさん
04/02/29 22:40
これだからソース嫁ない香具師は・・・・

551:デフォルトの名無しさん
04/02/29 22:54
>>545
allocaはコンパイラの組み込み関数です。

コンパイラの生成するコードが読み切れる―例えばauto変数の参照にはフレー
ムポインタのみを使い、SPは関数出口でsp <- fpのように設定して元に戻すま
で参照しない―なら、後付けで実装もできます。

でも最適化のレベルの高いコンパイラでは危険ですね。


552:デフォルトの名無しさん
04/03/01 20:45
ahhoca()


553:デフォルトの名無しさん
04/03/01 20:46
>>548
ahoca?



554:デフォルトの名無しさん
04/03/01 20:50
assoca!

555:デフォルトの名無しさん
04/03/01 20:55
>>554
asoccaじゃねーの?

556:デフォルトの名無しさん
04/03/01 23:05
alloca(n)を
sub esp, n
mov eax, esp
に展開してやればいいの?


最後に
mov esp, ebp
pop ebp
する関数なら大丈夫ってこと?


557:デフォルトの名無しさん
04/03/02 00:53
>>556
それだと危険だね。Win32だと単純にスタックポインタをいじるだけだと、
2ページ以上境界をまたいだ時に例外飛ぶよ。
他のOSは実験してないからしらん。

確か1ページずつ動かしてくコードになってたはず>_alloca()
隣のページを触った時に初めてメモリ確保するんだっけな?

558:デフォルトの名無しさん
04/03/02 18:56
>>557
え、ページなんて概念があったんですか。
ちなみに1ページって何バイトでしょうか?
その辺の情報で何か適当なWebリソースってありますでしょうか。

そういえば、自作の処理系でスタックから配列を確保すると、
16000バイト付近でおかしなことになるんですが、これも
ページと関係ありですか?
コンパイラ側でスタックサイズを確保するだけじゃだめなのか。

559:デフォルトの名無しさん
04/03/02 19:25
ごめん、ググったらx86の1ページは4kてわかりました。

今ためしにVC6で大きい配列確保するテストしてみたら、
ある大きさになったら密かに__chkstkっていうのを呼んでる。
ちょうど4kバイトを境に。
まいったなあこれ。
全く知らなかった。

560:デフォルトの名無しさん
04/03/02 19:37
つまり4kを超える固定配列をスタックに確保する場合は、
sub esp, 4096
の代わりに、
mov eax, 4096
call __chkstk
に書き換えなくてはいけないわけだ。
やだなあこれ・・

allocaだと+余分を計算しないといけない?
無条件で_chkstk呼べばいいのかな。

561:デフォルトの名無しさん
04/03/02 19:39
でもこれでスタック確保でおかしくなる原因がすっきりわかりました。
ありがとうございました。>557

562:558
04/03/03 02:41
いまどきのOSはスタックの割り当ては動的だからね。

最小限のサイズのみを割り当てて、スタックの次のページを
さわった瞬間にメモリ未割り当てのページフォルトが発生して、
そのタイミングで実際の仮想メモリを割り当てる実装になってる。
で、そのページフォルトを判定するのが隣接ページのみってこと。

フレーム割り当てのタイミングでサイズが決まってるのなら、
sub esp, 4096; sub esp, 4096; sub esp, 200
みたいな感じで展開しちゃってもいいと思うよ。

563:デフォルトの名無しさん
04/03/03 05:37
>>562
espの値を変えただけでは、ページを触ったことにはならないと思うが。

564:デフォルトの名無しさん
04/03/03 06:15
つーかさー、いい加減ソース見ろよ。
ページ処理をどーすればいいのかとかもわかるし。

565:デフォルトの名無しさん
04/03/03 07:36
>>558
ところで、自作の処理系ってアクティブ何とか?

566:デフォルトの名無しさん
04/03/03 12:21
やっぱりMacOSXみたいにスタックもallocしたほうが分り易いよな

567:デフォルトの名無しさん
04/03/03 18:12
>>562
名前557の間違いですか?
ちなみにCRTの_chkstkを呼ぶ様にして解決しました。
おかげで既知のバグがすべて潰せました。

>>564
557氏みたいなヒントがないとソースみてもわかんなかったよ。

>>565
アクティブ何とかの話はよくわかりませんが、
目標はネイティブ実行できるLISPっぽいCみたいな感です。

568:デフォルトの名無しさん
04/03/04 23:56
どーでもいいけど、
スタックとるahhocaって制限多すぎでない?

大きな自動変数は、普通process即氏けどな。


569:557
04/03/05 01:12
>>563
IA-32(+Win32?)の場合だとesp、ebpは明示的に参照しなくても
ポインタが指し示すだけでAccess Violation飛んだはず。
かなり前の記憶なんで確証ないけど・・・

>>568
用途が違う。大きなサイズが必要ならHeapを使えばいい。

関数が呼び出されるまで厳密なサイズはわからないが、
スタック食いつぶすほどのサイズにはなりえない場合とか、
シグナルハンドラから突如longjmp()されようが、絶対に
メモリリークしたくない場合などに使える。


570:デフォルトの名無しさん
04/03/05 19:07
>>569
> かなり前の記憶なんで確証ないけど・・・
明らかに記憶違い。

$ uname -ms
CYGWIN_NT-5.0 i686

$ cat a.c
#include <stdio.h>
static void *
badstack()
{
    __asm__("mov %esp, %edx; sub $0x100000, %esp; mov %esp, %eax; mov %edx, %esp");
}

int main()
{
    char *p = badstack();
    printf("%p\n", p);
    fflush(stdout);
    printf("%x\n", *p);
    return 0;
}

$ gcc a.c

$ ./a.exe
0x12ef18
Segmentation fault (core dumped)


571:デフォルトの名無しさん
04/03/05 19:40
>>570
linuxでもちょっと大きな奴渡すとすぐにsegfault!です


572:558
04/03/05 20:39
>>571
自分も最初そう思ったけど、
10分の1の0x10000にしても落ちたから違うと思う。
ポインタ変えただけじゃ駄目なんじゃないかな。
_chkstkのまわりくどいソースとあわせて考えると。

573:デフォルトの名無しさん
04/03/05 22:14
>>571
大小は関係ない。
> esp、ebpは明示的に参照しなくても
> ポインタが指し示すだけでAccess Violation飛んだはず。
というのは誤り。espを変更しただけでは落ちないで、参照したときに落ちる。

>>570のテスト内容ちゃんと見た?

574:デフォルトの名無しさん
04/03/05 22:46
>>570
つーかそれ関数すぐ戻ってるから、プログラム的に
スタックが有効かどうかというテストにはならんのでは?
badstack() {
 char baduse[0x100000];
 return baduse;
}
と同じことだし・・

575:デフォルトの名無しさん
04/03/05 23:15
あー勘違いした

576:デフォルトの名無しさん
04/03/05 23:17
なので、>>571が正解!


577:545
04/03/09 22:36
alloca実装でけたよ
疲れた

578:デフォルトの名無しさん
04/03/20 13:15
Windowsで使えるlexってないんでしょうか?
Cygwin上でうごかすのではなく、純粋にWindows用として。

579:デフォルトの名無しさん
04/03/20 13:33
URLリンク(sourceforge.net)


580:578
04/03/20 14:04
>579
ありがとう。
でも俺がいうのもなんだが甘やかしすぎでは。

581:デフォルトの名無しさん
04/03/20 18:02
>>580
何だそりゃw

582:デフォルトの名無しさん
04/03/20 19:30
>>578
こんなんもあるけどな
URLリンク(www.vector.co.jp)

583:デフォルトの名無しさん
04/03/20 20:18
579は鉄オタに優しいNHKみたいですね<あまやかしすぎ

584:デフォルトの名無しさん
04/03/20 21:46
おれはNHK料金払ってない

585:デフォルトの名無しさん
04/03/20 21:53
>>584
同じく、見てないし。

586:デフォルトの名無しさん
04/03/20 23:24
つーかNHKあまやかしすぎ

587:デフォルトの名無しさん
04/03/23 00:12
教育テレビで歌のお姉さんが胸もまれてたよ。

588:デフォルトの名無しさん
04/03/23 07:16
なんと。

589:デフォルトの名無しさん
04/04/07 19:36
yacc か bison のサンプル集みたいなサイトご存知ないですか?
ちょっと、書籍で勉強してるんですがサンプルが少なくて困ってます。


590:名無し@沢村
04/04/07 22:06
おまいらよ、超便利マシン語エディタ「Visual E++」ができたから見ちみれ!!
プログラム言語の歴史が変わった歴史的瞬間だ。

URLリンク(hp.vector.co.jp)


591:デフォルトの名無しさん
04/04/08 19:16
>>590
Windoze用かよ _| ̄|○

592:デフォルトの名無しさん
04/04/08 23:52
逆に聞くが、Windows用以外に何があるんだ?

593:デフォルトの名無しさん
04/04/10 01:45
>>592
(゚Д゚)ハァ?Macに決まってんだろ!


594:デフォルトの名無しさん
04/04/10 05:25
>>592
SPARCでSolarisかLinux。PPCでMac OS X用。
これだといじれるんだけどな。Windozeなんざ動く環境がないんで試す事すらできねぇ。

あ、StrongARMなLinuxZAURUSも有るか。

595:デフォルトの名無しさん
04/04/10 05:44
> Windoze
スペルは正しく書きましょう Windows :p

596:デフォルトの名無しさん
04/04/10 09:41
>>595
ネタだとは思うけど一応...

URLリンク(d.hatena.ne.jp)

597:デフォルトの名無しさん
04/04/10 10:37
ネタをネタで :D

598:デフォルトの名無しさん
04/04/11 11:00
最適化技法について分かりやすく説明してくれている HP ってありませんか?

599:デフォルトの名無しさん
04/04/11 19:46
yacc の勉強とかはみんなどこでやったんですか?
書籍は相当限られていると思うのですが。

600:デフォルトの名無しさん
04/04/11 21:34
yaccなんて1、2回使えばわかる気がするけど。

601:デフォルトの名無しさん
04/04/11 21:53
>>599
みんな、yacc のソースコードを必死に読んだんだよ。
そのために bison はオープンソースになっているんじゃないか。
お前も頑張れ。

因みに yacc のスキャナ自体も yacc で書かれているが
頑張れば何とかなる。


602:デフォルトの名無しさん
04/04/12 21:54
いやいや、yaccのサンプルはないの?


603:デフォルトの名無しさん
04/04/12 22:55
>>602 >>88見れ


604:名無し@沢村
04/04/12 23:12
ちんぽ

605:デフォルトの名無しさん
04/04/12 23:25
それで?

606:デフォルトの名無しさん
04/04/18 09:21
>>603
書籍はもってるらしいぞ。


607:デフォルトの名無しさん
04/04/23 00:13
gcc 3.4のC++パーサは手書きなんだと。


608:デフォルトの名無しさん
04/04/24 23:06
>>607
みんな手書きだろう?
口述パーサなんてあるか?


609:デフォルトの名無しさん
04/04/24 23:27
>>608
> みんな手書きだろう?
3.3.3まではyaccに生成させてたんだよ。
これは手書きとは言わんだろう?

610: 
04/04/24 23:48
ところで、コンパイラの仕事ってどうやって
発生するの?
どんな会社がそういった仕事の最先端を行っているの?
なんとなく興味あります

わたしはしがない下請けなので
コンパイラ、と聞くとちょいと憧れますね


611:デフォルトの名無しさん
04/04/25 12:35
知ってるけど教えてあげない

612:デフォルトの名無しさん
04/04/26 19:19
>>609
なるほど、そういう意味ね!



613:デフォルトの名無しさん
04/04/26 19:25
>>529
ほほえましいな。レス番違うし。


614:デフォルトの名無しさん
04/04/26 19:36
>>613

615:デフォルトの名無しさん
04/04/27 04:59
ワロタ

616:デフォルトの名無しさん
04/04/27 23:10
じわじわ来るねw

617:デフォルトの名無しさん
04/05/08 09:26
すんません、Exceptionのthrowとcatchって、どうやって実装されてるんですか?
なんとなく、setjump()とlongjump()をつかうんだろうなーとは思うんですが、いまいち自信ないです。
どう実装してるのかを紹介したサイトなりがあれば教えていただけますか。
#「例外 実装」とかでぐぐってもそれらしいのは見つからない。

618:デフォルトの名無しさん
04/05/08 09:44
exception setjmp longjump でググってみてみれ。

URLリンク(www.google.co.jp)

619:618
04/05/08 10:24
longjmp だった。言い訳なんかするもんか・・・

620:デフォルトの名無しさん
04/05/08 11:06
How a C++ compiler implements exception handling
URLリンク(www.codeproject.com)

621:デフォルトの名無しさん
04/05/08 12:27
>>617
ちゃんとしたcontinuationがあれば、それを使って実装すればいい。

622:デフォルトの名無しさん
04/05/09 00:19
どういう意味だ?


623:!621
04/05/09 00:48
>>622
exception を実装する為に continuation を実装するというのも本末転倒な感じが
するけど。

URLリンク(www.shiro.dreamhost.com)

624:デフォルトの名無しさん
04/05/09 19:17
longjumpは制約が多すぎないか?
スクリプトレベルでうまく動かすためには、相当なサポートコードが必要に
なると思うが…


625:デフォルトの名無しさん
04/05/16 12:21
Rubyはlongjmp使ってなかったっけか。

626:デフォルトの名無しさん
04/05/17 05:33
自分も先読みが結構必要なときの
マッチしなかったときの処理にlongjmpを使ってるよ。

627:デフォルトの名無しさん
04/05/18 09:34
>>610
ARM,MIPS,SHとかの組み込み用アーキテクチャとかなら新規開発したあとコンパイラもそれにあわせて最適化とかが必要だから仕事があるんじゃない?

628:デフォルトの名無しさん
04/05/18 21:58
Schemeでいうcontinuationの機構を作りたいのですが、
setjmpとlongjmpの他に何が必要ですか?
スタックの内容を退避しなければ駄目ってのはなんとなくわかるのですが。
インアセ使わずにC言語だけでできるものでしょうか?
とりあえずi386以降で動けばいいです。

629:デフォルトの名無しさん
04/05/19 02:28
>>628
「スタックなぞ一切使わない」というのが王道です。

すなわち、関数呼出しはCALLでなく、JMPになります。
return addressは、「次の処理の関数」として表現し、引数として渡すのです。
通常スタックフレームに置かれる変数は、ヒープに置くことになります。

関数型言語スレ(総合スレは荒れてるので、HaskellかML)
で質問すると詳しい人が教えてくれるでしょう。


630:デフォルトの名無しさん
04/05/19 19:26
ういー、むづかしそうです。
SchemeのCPSてやつですね。


631:デフォルトの名無しさん
04/05/20 02:21
「スタックなぞ一切使わない」という方法は、ここでいう (4) の前者だよね。

URLリンク(lists.sourceforge.jp)
URLリンク(lists.sourceforge.jp)

632:デフォルトの名無しさん
04/05/21 02:19
>>630
やりたいこととは違うと思うけど、Schemeを普通のCにコンパイルする方法。
URLリンク(home.pipeline.com)

- 関数呼出しはCの関数呼出しとしてコンパイルされるが、CPSなのでreturnは決してしない
- スタック領域をヒープとして用いる
- スタックがあふれそうになったら、copying GCで新しいスタック領域に移し計算を続行する
- GCのスタックを走査する部分にはCPUに依存しないので、Cだけで書ける

昔Sigplan Noticesで読んで面白いと思った。




633:デフォルトの名無しさん
04/05/23 00:00
bison / yacc の使い方の質問です。

bison とか yacc って、みんな初めは電卓作りますよね。
3 + 5 (Return)
って入力すると「画面上に」8をprintfするやつ。
これ、画面上で8を返すんじゃなくて、
yyparseの返り値とかそういう感じで yyparse の呼び出し元に
8 を何とかして知らせる方法ないですか?
ただし、グローバル変数は使わないものとして。


634:デフォルトの名無しさん
04/05/23 15:40
>>633
/usr/lib/yaccpar とか /usr/share/bison/bison.simpleを書き換える。

bisonは

#define YYPARSE_PARAM foo

を定義しておくと、void *fooが引数として渡されるから、アクションでその中に
答を入れて返すようにすればいいのでは。

プログラム中からyyparseを複数回呼出す場合は、先読みバッファの再初期化に注意。





635:名無し@沢村
04/05/24 21:41
おまいらよ、おれはつい最近つーか、たったいまさっきtcl/tkつーコンパイラの存在を知ったよ。
いまDLしてるところで、まだ開けて見てないんだが、Webでの説明を見た限りじゃなんか良さげだった。
つーか、GUIに関しては、Visual C++よりもちゃんとしたGUIアプリが簡単につくれるとのことだ。
ただ計算的な処理には不向きということだが、そこは何かC言語で書いて追加できるとのことだ。
おれはちょっとこのtcl/tkを調べてみるが、ホントにGUIに関して良さげだったら、いま開発中の「Vicual E++」は、
このtcl/tkで書き直してもいいな。Visual C++じゃエディタの予約語の色づけとかチョー面倒だしな…
そして内部のメインの処理だけをC言語で書くようにすればいいからな…
それができそうかどうかをまず調べてみようと思う。
次に調べたいことは、おれが次につくりたい高級言語に、tcl/tkはオープンソースらしいから、パクレる部分があるかどうかということだ。
ともあれ、おれのコンパイラの開発は飛躍的に前進しそうだな。
おまいらよ、おれはtcl/tkいま知ったぞ。おまいらは、tcl/tk知らなかっただろう?


636:デフォルトの名無しさん
04/05/24 22:11
>>635
tcl/tkって「チックル・チーコ」って読むんだよね?


637:デフォルトの名無しさん
04/05/24 23:11
>>635
お前だけ。

638:名無し@沢村
04/05/24 23:49
Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?
実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!


639:デフォルトの名無しさん
04/05/25 00:46
セックル・チンコ

640:デフォルトの名無しさん
04/05/25 01:35
>>638
tclsh, wish という位だから、tcl/tk は一種のシェルだよ。
C から system() でシェルのコマンドを実行するのと似た様な感じで使える。
まぁ、もちっと面倒だけど。

俺も以前 tcl/tk からパクれる所が無いかなとソース眺めてみたけど、
C で実装されている部分は低レベルな所だけだったような。

641:デフォルトの名無しさん
04/05/25 10:49
TclつったらPerlと同じくらい歴史の長いスクリプトなんだが
アホは知らなかったのね。

642:デフォルトの名無しさん
04/05/25 10:54
>>641
言語で大事なのは歴史の長さよりも話者人口だよ。
歴史の短い Java をみんなが使うのはなぜだと思う?
Algol や Prolog が滅びたのは?

643:デフォルトの名無しさん
04/05/25 12:04
今頃Tcl持ち出してくるなんて100%ネタだと思ってたんですが。
釣りだよね?親切に説明してる640が気の毒だ。


644:デフォルトの名無しさん
04/05/25 13:29
>>642
Algolはともかく、Prologは滅びてはいないだろ。
Algolにしたって、形を変えてその思想は受け継がれているわけだし。

645:デフォルトの名無しさん
04/05/25 13:53
>>642
知名度の話をしてるんだが。なにが言語で大事なのは、だ。
かってに妄想してチンコ膨らましてんじゃねーよキモイ。

646:デフォルトの名無しさん
04/05/25 19:15
642じゃないけど、
 妄 想 ま で 制 限 さ れ て た ま る か
妄想でチンコ膨らそうぜ

647:デフォルトの名無しさん
04/05/25 21:40
>>642
Tclはハード設計ツールの組込みスクリプト言語ではメジャーです。
(Tclはいやだけど、独自言語よりはましだよな)

もともとTclはアプリ組込み用だし。tclshもwishも組込みのサンプル
みたいなもんです。

648:デフォルトの名無しさん
04/05/25 22:13
でも結局、Tk のほうが Tcl よりも何倍もメジャー。

649:名無し@沢村
04/05/26 21:18
Starpack
Tcl/Tkでつくったスクリプトを実行ファイルに変換するツールだな。
が、わし英文読めんけん、このページのどっからDLしていいかわからんのよ。
このページの何行目の何という文字をクリックするとDLできるか、教えて~♪

URLリンク(www.interq.or.jp)


650:デフォルトの名無しさん
04/05/26 21:45
沢村師ねよ

651:デフォルトの名無しさん
04/05/29 19:38
ここは沢村を呪うスレとなりました。

652:デフォルトの名無しさん
04/05/29 22:11
              -=、 ̄`―''" |\ `'''―'''"   |  ||          |ヽ、_____,へ、
         ,...--、    `―‐ァ‐...::', \:::::::::::::::::::: |  ||    |ヽ、___,ヘ、| ┌──┐ i´
        ,. '  ..::....`'''‐--‐''"~...:::::::::ヽ  ` 、::::::::::::::::|  ||    | ┌─┐ i´ | |     │ |
    -=ニ"_,...、-- ヾヽ、::::::::::::::::::::::::::::::::ヽ  `、 `,::::::|  ||    | |  │ | | |      .| |
          `''‐-`ヽ.`''‐-..._:::::::〃:::l:::l`ヽ..ノヽヾ,: |  ||    | |  │ | | |____| |
     ,..-‐''''‐----'":::::::`ヽ、 /l:/|::::/l:::lヾ.‐'""' i| l |  ||    | |  │ | |.┌─‐┐┌┐.|
  __,. ' ......:::::::::::::::::::::::::::::::::::: `''1 l! l::::i lヾ|,...-==l. l:|  ||    | └─┘ | |ノ ,ヘ、 | | レ'
  `ー--‐' ̄`>   ....:::::::::::::::::ノ.._,...ヾ!ノ-':::/~   ノ i |  ||    .| | ̄ ̄|ノ  / /` .| |
       ,.. '"  ...::::::::::::::::::::::::::ヽ< ̄`>'" `ー‐‐''"ノ..|  ||     |ノ      / /  | |
-‐'"゛`''‐''" .......::::::::::::::::::::::::::::::::::::::{ `‐',ヘ |  ,..、_  .|  ||             / /   | |     /|    
....__...:::::::::::::::::::::::::::::::::::::::::::::::::::::::!、  !  ,..-`    ,. |  ||           /./   .| |   . / |
  -"--- ....___,...--- ._::::::::::::::::::::`、 `‐'    _ィ' V|  ||     ._ _/./    . | └─'´ .,)
           , '" ̄..::::::::::::::::::::::::::〉__,..w、ァ'"Vハノ |  ||      `ー─‐'´      `ー──'´
   ,..--- ....__,. ' ....:::::::::::::::::::::::::::::::::::::::::Vi,..ハ---'" |  ||
  ,. '    .....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::'、. ―   .|  ||
-=-‐-‐'゛`''‐-.._   _,..-----==-  .:::::::::::`ー.`--‐'",'|  ||



653:デフォルトの名無しさん
04/05/30 08:43
沢村が全てを台無しにしたんだな。

654:デフォルトの名無しさん
04/06/02 01:19
マルチスレッドが良く分からない。マルチスレッドなコードを生成するのには
コンパイラ側で何かしてあげなくてはいけない事があるのでしょうか。
それともランタイム環境の問題なのかな。

655:デフォルトの名無しさん
04/06/02 03:04
tls(thread local storage)なんてのが言語仕様として定義されていればコンパイラはそれを意識する必要があります。


656:デフォルトの名無しさん
04/06/02 07:57
>>655
完全にライブラリレベルなのかなと思っていたのですが、そういう訳でもないんですね。
pthread ライブラリを wrap して、他のライブラリも MT-Safe に作れば良いのかと
思ってました。どうもありがとうございます。

657:デフォルトの名無しさん
04/06/09 22:05
インタープリタなんかではスレッド作るとそのスレッド専用の VM が起動する処理系が
あるみたい。コンパイルされる言語でも、スレッド毎にランタイム環境を作ってあげれ
ば良いのかな。

658:デフォルトの名無しさん
04/06/09 22:48
>>657
コンパイルされる言語の場合は、ホスト環境のpthreadライブラリを呼び出す様に
すればいいのでは?
今後主流になると思われるSMP環境を考えたら、複数のCPUを有効に使えるかも


659:デフォルトの名無しさん
04/06/10 00:20
>>658
pthread_create() が C の関数を引数に取るので、クロージャとかを渡したい場合に
何となく面倒じゃないかなと思ってました。変数部分は引数として渡してあげれば
問題無いような気がしてきました。

660:デフォルトの名無しさん
04/06/16 10:58
bison と flex を使っています。
flex では yylval をガンガン使っています。
bison で %pure_parser したら flex が吐き出す C コードのコンパイルで氏にました。
どうすれば %pure_parser しても yylval (と同じような機能) を flex で使えるでしょうか。

661:デフォルトの名無しさん
04/06/16 16:28
>>660
自己レス
URLリンク(www.timeparadocs.net)
これで解決しますた。
が、flex のファイルに yylval.hoge と書いていたのを yylval->hoge と書かないと逝けないようです。

662:デフォルトの名無しさん
04/06/17 23:22
boostのspiritっていじって遊ぶにはよいけど、
実際問題使えるものなのかな?

663:デフォルトの名無しさん
04/06/18 16:14
boost::spirit便乗質問なんですがパースした後
parse_infoのfullを調べるとエラーが発生したか確認できますが
エラーが発生した行番号を取得するにはどうやったら良いんでしょうか?

664:デフォルトの名無しさん
04/06/18 21:33
position_iterator(勘

665:デフォルトの名無しさん
04/06/19 22:30
うわ、みてみると確かにそれらしい気配が・・・
しかし、よく意味が分からない罠・・・

666:読まずにレス
04/06/22 00:47
JJTreeでJVM上で起動するスクリプトを書くのはアリですか?

667:デフォルトの名無しさん
04/06/22 10:17
だめ

668:デフォルトの名無しさん
04/06/23 23:35
このようなコンパイラ誰か作ってもらえません?
イメージ的にはVMを介さない.NETみたいな。
開発の形態はApacheみたいに元となるものがあって
ユーザーが拡張プラグインを自由に作って公開できるようなのがいいな。

・ネイティブコードを吐く
・OSは問わない
・VMなどを介さない
・メインとなる構文はあるが、ユーザーが自由に構文を追加・変更できる。

669:デフォルトの名無しさん
04/06/23 23:38
>>668
D言語でええやん

670:デフォルトの名無しさん
04/06/23 23:38
>>668
URLリンク(hp.vector.co.jp)

671:デフォルトの名無しさん
04/06/23 23:42
>>669
D言語って名前くらいは聞いたことあるんですけど、
>>668で書いたようなことを実現しているんでしょうか?

672:デフォルトの名無しさん
04/06/24 00:03
Lisp系を使えばいいんでないかとオモタ

673:デフォルトの名無しさん
04/06/24 00:15
>>668
このようなコンパイラ誰か作ってもらえません?

というクレクレな割に

> ・ネイティブコードを吐く
> ・OSは問わない

いきなりハードル高い


674:デフォルトの名無しさん
04/06/24 00:25
>>673
APIの類を使わなければ大丈夫
CPUは限定されるが

675:読まずにレス
04/06/24 00:36
ダメですか…orzガックリ こっそり作ることにします。

676:デフォルトの名無しさん
04/06/24 00:39
.NETだから、膨大なライブラリで動的な言語で言語非依存のバイナリインターフェイスを持ってないとダメだな

677:デフォルトの名無しさん
04/06/24 02:13
>>668
死ねボケ

678:デフォルトの名無しさん
04/06/24 02:20
>>677
お前が死ねカス

679:デフォルトの名無しさん
04/06/24 02:23
>>678
お前も死ねタコ

680:デフォルトの名無しさん
04/06/24 09:50
goto 677

681:デフォルトの名無しさん
04/06/24 09:58
nop



682:デフォルトの名無しさん
04/06/24 10:11
lea eax, dword ptr[eax]

683:673
04/06/24 13:10
>>674
> APIの類を使わなければ大丈夫

画面を含む一切の入出力ができなくなりますが

684:デフォルトの名無しさん
04/06/24 14:11
ブートから初めてVESAなり叩けば良い

685:デフォルトの名無しさん
04/06/24 21:45
>>668は実行可能ファイルとは一言もいってない訳だが。

686:デフォルトの名無しさん
04/06/25 00:58
このページ挙がってないのかな?
URLリンク(www.csg.is.titech.ac.jp)

687:デフォルトの名無しさん
04/06/26 03:09
gosub 687

688:デフォルトの名無しさん
04/06/27 04:13
>>683
>画面を含む一切の入出力ができなくなりますが
要求事項にないから、いいんじゃない?

689:デフォルトの名無しさん
04/06/27 05:13
>>683
GCC があるんだから自分の好きな言語のフロントエンドを書けばいいじゃん。

690:デフォルトの名無しさん
04/06/27 08:28
簡単に言ってくれるが、gcc難解すぎて弄る気にならん

691:デフォルトの名無しさん
04/06/27 10:36
>>689
GCCのフロントエンド書いたときあるの?

692:デフォルトの名無しさん
04/06/27 11:41
>>689
gcc使っても>>668の用件に合わせるのは難しいままだろ?
無知蒙昧な人?

693:デフォルトの名無しさん
04/06/27 17:10
>>689-692
GNU Common Lispでマクロをいじれば何とかなりそう。

694:デフォルトの名無しさん
04/06/27 17:10
URLリンク(www.cminusminus.org)
URLリンク(cs1.cs.nyu.edu)
URLリンク(llvm.cs.uiuc.edu)
URLリンク(gcc.gnu.org)

C--, MLRISC, LLVM, RTL...
色々在るけど、誰か使った事ある?

695:デフォルトの名無しさん
04/06/27 23:04
>>685
まあ、ここ見てる奴は「ネイティブコード」と書いてあるからそんな疑問は浮かばんわけだが。

696:デフォルトの名無しさん
04/06/28 00:10
ネイティブコードと、オブジェクト(実行可能)ファイルを混同して考えるのはお前くらいなものだが。

697:デフォルトの名無しさん
04/06/28 00:28
C--は使ったことあるよ。
結構面白いけど、関数型言語とか論理型言語とか、
実装研究がまだまだ行われている言語向けだなあ。

698:デフォルトの名無しさん
04/06/29 18:16
Common Lispのプリプロセッサ(マクロ)って
そんなに自由度が高いの?

699:デフォルトの名無しさん
04/06/29 20:58
>>698
自由度は高いよ。
マクロ定義とは実質的にLispコードを生成する関数だとか。

まあ、C++のtemplateもだけど自由度が高ければ高いほど解読しにくいわけで、
達人以外が使っても生産性が大して上がらない気もする。

700:デフォルトの名無しさん
04/06/29 22:39
Lispのマクロは
評価時に展開されるから
*プリ*プロセッサとは言わない


701:デフォルトの名無しさん
04/06/30 22:18
>>700
評価に先駆けて展開しといたり、
コンパイル時にも展開できるわけだが。
まあ話を平たくすると、いつでもできるわけだ。


702:700
04/06/30 23:25
>>701
Lispの評価器に関する知識が必要な話を
マクロ=プリプロセッサという世界のの人に
今説明しても混乱するだけかと


703:デフォルトの名無しさん
04/07/01 00:28
>>698
S式を二回評価すると思ってね。(おおざっぱ)
一回目でプログラムの生成、二回目で生成されたプログラムの実行。
LispはデータもプログラムもS式だから、
こういうのは機構的にもプログラミング的にも簡単。
一度遊んでみると良い。

704:デフォルトの名無しさん
04/07/01 12:02
C, C++だと
MYMACRO(a,b,c) { ... } // a,b,c,..は可変個引数
から
 int a=0;
 int b=1;
 int c=2;
 ...
 my_macro_end(a,b,c);
を生成するようなのは書けないでしょ? Lispのマクロはできます。

C++やJavaだとデザインパターンなどで似たようなコードをクラス毎にあちこち
で書かないといけない(が、C++のテンプレートでは表現できない)ことがある。
そういう場合にパラメータを与えて雛形からコードを生成するスクリプトをRuby
などで書くことを考えましょう。
Lispのマクロなら全部Lispだけでできます。


705:デフォルトの名無しさん
04/07/01 12:03
後はなんだろう。処理に必要なデータを静的に持っておきたいとしましょう。
例えば、isdigit()のために、その文字が数字かどうかを記録した1バイト文字
256個分のテーブル(文字が数字なら1、数字でなければ0)を定義したいとします。
そこで、
int isdigit_table[] = {
 0, 0, 0, ...., 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...., 0
};
と書く代わりに
int isdigit_table[] = {
 (eval-when-compile // コンパイル時に実行
  int table[256];
  char* digits="0123456789";
  memset(table, 0, 256);
  for (char* d=digits; *d!='\0'; d++)
    table[*d] = 1;
  return table;)
};
みたいなことを書けば、(eval-when-compile ...)で囲んだ処理をコンパイラが
実行して、その結果のテーブルとして同じ中身のisdigit_tableを定義できると
思ってください。
C++だとコンストラクタでもできますね(コンパイル時でなく実行時になりますが)。

要するに、C/C++のマクロ(cpp)が格段に高機能な言語になったとしましょう
(C自体では嬉しくないから、RubyとかPHPとか?)。その場合のC,C++に相当する本
体の言語がLispであり、ついでにcppの言語も同じLispになったと考えればいいです。


706:デフォルトの名無しさん
04/07/01 13:58
まあLispは面白い言語なので
SICPは読んで損がない本だと思うよ

707:デフォルトの名無しさん
04/07/01 23:20
まぁ、LISPやる奴で実用的なプログラム書ける奴見たこと無いんだけど?


708:デフォルトの名無しさん
04/07/01 23:36
>>707
emacsってそんなに使い物にならない環境なのか。なるほど。

やっぱvi?(違

709:デフォルトの名無しさん
04/07/01 23:38
xyzzyがWin emacsの筆頭?

710:デフォルトの名無しさん
04/07/01 23:58
>>704
C++でならTypeList or boost::mpl使えば書けそう。
まあ流石に100個も200個も可変長引数を渡されると無理だろうけど。


711:デフォルトの名無しさん
04/07/02 00:12
ECMAScriptを解析してくれて、しかも組み込み関数・オブジェクトを定義できるライブラリが欲しい
自作すると変数宣言と組み込み関数・オブジェクトのみになりそうだ

712:デフォルトの名無しさん
04/07/02 00:38
Schemeは括弧さえ折り合いつけば最高の言語の一つだ

713:デフォルトの名無しさん
04/07/02 14:23
>>711
クロスプラットフォームなら spidermonkey とか、
Windows だけでいいなら ActiveScript とか。
どちらでも簡単にできるよ。

714:デフォルトの名無しさん
04/07/02 17:21
>>709
>Win emacsの筆頭

Meadowの方が広く使われてます。

715:デフォルトの名無しさん
04/07/02 22:36
>>713
SpiderMonkeyはかなりよさげだね
しかし英語だらけで組み込めるのは当分先か・・w

716:デフォルトの名無しさん
04/07/03 10:17
>>704
そういうプリプロセサ書いて、差し替えれば済む話だと思うけど。

全部 C/C++ でできますよ。(藁

717:デフォルトの名無しさん
04/07/03 10:38
C/C++ではたしかpreprocessor commandsも規格の一部な罠。


718:デフォルトの名無しさん
04/07/03 11:22
プリプロセッサを差し替えるオプションなんてあるの?
Visual C++とgccを見たけど見つからなかった。


719:デフォルトの名無しさん
04/07/03 15:40
>>716 それじゃ「コンパイラ書けばできますよ」ってのと変わらないやん.

720:デフォルトの名無しさん
04/07/03 22:50
>>718
自分のプリプロセッサから、コンパイラ呼べばイイだけじゃない?

721:デフォルトの名無しさん
04/07/04 02:06
>>720
そりゃそうだ。でも差し替えるとは言わんな。下らないことをきいてしまった……。


722:デフォルトの名無しさん
04/07/04 09:28
差し換えるならspecファイルだろ。

723:デフォルトの名無しさん
04/07/04 11:46
>>718
GCC とかならソースあるんだから、適当に修正して実行ファイル入れ替えれば良いんじゃないのか ?

>>719
まあ、そりゃそうだけど、コンパイラ書くより多少難易度は低いだろ。

724:デフォルトの名無しさん
04/07/04 16:57
結局使い物にはならないと。
普通のアプリケーション書くのに特定のコンパイラのバージョンとそれへのパッ
チ込みで保守したくはねーなあ。


725:デフォルトの名無しさん
04/07/04 18:28
まあ、このスレ的にはコンパイラまで作ってしまえって事になるかな。
TinyC->.asm位だったら簡単だしね。

俺は#defineなどC言語準拠なプリプロセッサに
アセンブラ風の複数行マクロを使えるような物を作って、
言語ごとに微調整しているよ。
()を使わないバージョンなどね。

エラーを探知するために、##lineっていう
現在のコンパイル行をプリプロセッサ->コンパイラへ通知する命令をつくって、
デバックもしやすくしているよ。

726:デフォルトの名無しさん
04/07/04 21:39
>>724
て言うか、普通のアプリケーション書くのに >>704 みたいなことはあまり必要ないだろ。
マクロプロセサやプリプロセサが高機能だと色々おもしろいけど、実際のところ後の保守が大変だったりするからあまり使わん。

昔使った PL/I のプリプロセサは、IF 文は当然、FOR/WHILE の制御構造や PROCEDURE/FUNCTION なんかの手続き/関数定義までできた。
だから凝った定義を書けば、ソースを短く書けたけど、プリプロセサ文をデバッグする手間を考えたら素直にソースを手で展開した方が早かったよ。(藁

MASM なんかのマクロアセンブラでも同じような経験したことある人は多いと思うよ。

727:デフォルトの名無しさん
04/07/05 01:31
俺はわりとしょっちゅう欲しくなる方だな。
Lispのマクロで俺言語を作ることを考えると>>726も想像はできるけど。
>>726とは逆に最初書くときはベタに展開したソースを書くけど後から
保守性を考えてマクロでまとめることも。あまり凝ったことはしないけどさ。
cppに変数とifとfor eachだけでもあれば世の中もうちっと良かったろうに。


728:デフォルトの名無しさん
04/07/13 22:28
コンパイラとかの参考図書は、よくありますが
スクリプト言語の参考図書(定番)は、ごぞんじないですか?


729:デフォルトの名無しさん
04/07/13 22:52
各OS毎のリソースコンパイラの作り方に触れたサイトってありますか?

730:デフォルトの名無しさん
04/07/14 00:35
>>728
その二つに大きな違いはない。

731:デフォルトの名無しさん
04/07/14 01:11
>>728
コンピュータアーキテクチャの本じゃないか?

>>730
構文解析だけじゃなくて、実行機の話してるんじゃないの?


732:デフォルトの名無しさん
04/07/14 01:26
すいませんyacc/lex初心者の質問です。
WIN XPのコンソールから
GNUのFLEXとBISONとボーランドのBcc32でコンパイルしてるのですが
bisonとflexは通過するのですが
最後のCコンパイラのリンク時に"yyllocが定義されてない"というエラーが出てしまいます。
bison.simpleとbison.hairを見てもよくわからないので
なにがまずいのでしょうか?


733:デフォルトの名無しさん
04/07/14 01:39
>実行機

ってなんじゃらほい?

734:デフォルトの名無しさん
04/07/14 11:23
>>728
『インタプリタ進化論』なんかいいのでは。スクリプトに特化した内容ってわけでもないけど。

735:デフォルトの名無しさん
04/07/14 19:49
このスレでよく出てくるyaccやlexってのはソフトウェアなの?
それともライブラリの類?
で、実際にはどのようなことをするものなの?

736:デフォルトの名無しさん
04/07/14 20:00
>>735
URLリンク(www.linux.or.jp)

737:735
04/07/14 21:00
つまり、字句解析や構文解析をするソフトウェアね。
コンパイラにおけるそれらの処理を外部のソフトウェアに
頼ると言うのは有りかね?

738:デフォルトの名無しさん
04/07/14 21:02
>>737
何を言ってるの?

739:ほんたま
04/07/14 21:26
おみゃ~らよ、おれのスリムドカンはある意味コンパイラよ。
スリムドカンはおれのページにあるから見ちみれ?

URLリンク(hp.vector.co.jp)
おみゃ~らよ、おれはいまリソースエディタをつくってるのよ。
スリムドカンに装備させるためよ。
おみゃ~らよ、コンパイラをつくるのはいいが、リソースエディタのないコンパイラはコンパイラとはいわんぞ!
自分じわかるかな?


740:デフォルトの名無しさん
04/07/15 00:53
>>737
字句解析や構文解析をするソースコードを生成してくれるソフト
これ以上は自分で調べてくれ

741:デフォルトの名無しさん
04/07/15 04:40
>>735
あなた、最高に頭悪そうですよ?

742:デフォルトの名無しさん
04/07/15 18:37
昔、OL進化論っていうのがあったなぁ~
ちょっと思い出したw


743:デフォルトの名無しさん
04/07/15 19:34
インタプリタ進化論って、絶版じゃなかったっけ?
読みやすい本でいい本だと思うけど、
実行環境の話はそれほど無かったような気がします。
とはいっても、字句/構文/意味解析を作るより
実行環境を作るのって、力業でできますしそんなに難しくないと思いますよ。

744:デフォルトの名無しさん
04/07/15 23:56
My VMをレジスタマシンにするかスタックマシンにするか悩む

スタックマシンにすると決めた、するとbytecodeにするかwordcodeにするかまた悩む

スピードの為にwordcodeにするならそもそもレジスタマシンにするべきなのかと悩む

一向に前に進みましぇん

745:ほんたま
04/07/16 00:05
おみゃ~らよ、おみゃ~らさーん♪
おりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪
「Slim de Can」ってすげ~な~、イベントドリブンプログラムが作成できるとこまでついに進化したよ。
おりはもう神だね♪どうよ?

URLリンク(hp.vector.co.jp)


746:デフォルトの名無しさん
04/07/16 01:05
全部作れ。


747:ほんたま
04/07/16 13:55
おみゃ~らよ、おみゃ~らさーん♪
おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。
つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。
おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか?
「Slim de Can」ってすげ~な~。
おりはもう神だね♪どうよ?

URLリンク(hp.vector.co.jp)


748:デフォルトの名無しさん
04/07/16 22:00
コンパイラ作るならBNF記法(拡張)についての理解は必須ですか?

749:デフォルトの名無しさん
04/07/16 22:13
無くても作れるよ。あった方が楽だけど。

750:デフォルトの名無しさん
04/07/17 00:00
context free grammerについては「理解」という程大変なことはない気がする。
# オートマトンを理解するにはちっと勉強が必要になるが、
# それこそ知らなくても何とかなりそう

なおLL(1)文法と属性文法を学んでしまえばりっぱな「コンパイラ」が作れると思う。
# リンカとかアセンブラとかの知識は既習だとして

751:デフォルトの名無しさん
04/07/17 03:09
言語設計はともかく、コンパイラ設計となったら
フロントエンドよりバックエンドのが難しいというか
面白いと思うんだが、どうしてフロントエンドの話しか出ないんだろうか?


752:デフォルトの名無しさん
04/07/17 03:43
たぶん、そこまで行きつかない奴しかこのスレにいないから。


753:デフォルトの名無しさん
04/07/17 09:41
バック部のトピックス

・並列化(ループ,タスク.手続き間解析は必須)
・別名解析(フロー依存はまだ重い)
・SSA(冗長コピーをどう減らす? 別名の扱いも)
・コピー伝播(非常に重要.でも語ることは余りないか)
・部分冗長性削除(やりすぎると性能悪化することも.ライブレンジを考慮)
・CPS(手続き型ではやらんか)
・レジスタ割付け(PowerPCとかなら素直だが,制約のきついCPUだと面倒)
・ソフトウェアパイプライン(最内からやらない手法が最近発表されてた)
・命令スケジューリング(コンパイル時間爆発の主犯)
・SIMD命令やDSP命令の生成(上から下までからむので大変.パターンマッチしかない?)

754:デフォルトの名無しさん
04/07/17 18:50
本日、佐々政孝氏の「プログラミング言語処理系」という本買いました。
コンパイラについてちゃんと学んでいこうかと思います。

755:デフォルトの名無しさん
04/07/17 19:02
バック部はCにトランスレートする事で済ませちゃってるから、あんまやらないんだよな。
とはいっても、最近の仕事でそういうのをする必要もあったりして
書籍紹介とかやってもらえます?


756:デフォルトの名無しさん
04/07/17 19:07
そういや 21st Century Compilers 読んだ人いる?

757:デフォルトの名無しさん
04/07/17 19:57
あぁ、それね…。2005年11月15日に延びたみたい。_| ̄|○
URLリンク(www.aw-bc.com)
 Copyright: 2006ってなってるからもっと延びるかも…

758:デフォルトの名無しさん
04/07/17 20:18
バックエンド「も」それなりに解説している本としては龍本はもちろんのこと、appel本や中田本がありますね。
龍本がバックエンド概要集だとすれば、
appel本が実践本、中田本が理論本といった感じでしょうか?

バックエンドオンリーな変り種としては
Robert Morgan: Building an Optimizing Compiler (ISBN 1-55558-179-X)
ってのがあります。こいつは本当にバックエンドしか書いていません。


759:デフォルトの名無しさん
04/07/17 20:21
いまだに龍本なの?
進歩ないね。

760:デフォルトの名無しさん
04/07/17 20:54
何でそんなに詳しいのに新たな言語を作ろうとしないの?

761:デフォルトの名無しさん
04/07/17 20:57
>>760
何でそんな労力割かなきゃならぬ?

762:デフォルトの名無しさん
04/07/17 21:05
>>757
がぁん。評判よければ夏休みにでも読もうと思ってたんだが。

763:デフォルトの名無しさん
04/07/17 21:17
目を通すだけで満足だから何も作らんのだろうな

764:デフォルトの名無しさん
04/07/17 21:21
バックエンドまで作りこんだ言語を書いても、それで食ってける人はごく少数だし。
理屈を理解して普段のプログラミングに生かせれば、それで良いかと。

765:デフォルトの名無しさん
04/07/17 21:36
>>761
本当はコンパイラの原理とかよく分かって無いんだよな?

766:デフォルトの名無しさん
04/07/17 22:08
原理を理解→新しい言語、でもあるまいに

767:デフォルトの名無しさん
04/07/17 23:31
>>760
一番多い需要は新しい言語の作成ではなく、特定分野特化物だからだよ
趣味の人は確かに新しい言語って事になるんだろうけどね。

768:デフォルトの名無しさん
04/07/18 00:44
言語ビジネスは死々累々とはMatz氏の言

769:デフォルトの名無しさん
04/07/18 01:01
>>768
つまり「俺ってば勝ち組w」と主張されたのですね?

770:デフォルトの名無しさん
04/07/18 01:11
>>764
その反対でバックエンドがほとんどのお仕事もあるよ、
特殊なDSPとかの強力オプティマイザ付き簡易言語関係とか。


771:デフォルトの名無しさん
04/07/18 13:04
割込みすいません、bisonの-v出力で得られる

State番号と、もとのソースの行番号を関連づける情報ってどこでしょうか?
同様に、 Rule番号と、もとのソースの行番号を関連づける情報ってどこでしょうか?

bisonマニュアルやbison本(といっても古いだけですが)を見ても、載ってませんでした。


772:デフォルトの名無しさん
04/07/18 14:25
>>771
行番号との関連?
別に行番号とは関連しないんじゃない?

773:771
04/07/18 17:10
どうも、Conflict が発生するようで、いろいろと原因を探ってるんですが、
「State何番が何番とconflictした。」とか出て来るんですが、
具体的にソースのどこがいけないのか場所を探すのに、いつも苦労しているのです。



774:デフォルトの名無しさん
04/07/20 17:56
構文解析器を作るのに正規表現が必要になりますけど、
正規表現の構文解析ってどうすりゃいいんでしょうか?
ものすごく再帰してるんですけど?

775:デフォルトの名無しさん
04/07/20 17:57
再帰っつーか永久ループですね。

776:デフォルトの名無しさん
04/07/20 18:22
>>774
>構文解析器を作るのに正規表現が必要になりますけど、
無くてもできます

777:デフォルトの名無しさん
04/07/21 00:38
>>774
有限オートマトンでぐぐるか、適当な正規表現ライブラリのソースを読め。



778:デフォルトの名無しさん
04/07/29 19:55

FLEXについて調べているんですが、よくわからないので質問させてください。
UNIXで書かれた字句解析ソース(moto.l)をWindows上で使いたいのですが、
これってWin用のFLEXを使用してmoto.lから、moto.cを作成して
それをVisualStudio.Netなんかで、ビルドすればいいんでしょうか?

Win用FLEXで吐き出されたmoto.cをビルドしてもエラー出まくりなもので・・・・
なにかうまい方法などあるんですか?

(なぜか元の字句解析ソース(moto.l)も一緒にビルドしてしまいエラーになりま
す。。。)

わかる方がいらっしゃいましたら、
ご教授お願いします。


779:デフォルトの名無しさん
04/07/29 20:01
>>778
なんのエラーが出てます?

780:デフォルトの名無しさん
04/07/29 22:05
なんとなく改行コードの問題?

781:>>778です
04/07/30 11:15
>>779 >>780 
レスありがとうございます

改行コードは、LFからCR+LF 文字コードEUCからSJIS
に変更をかけ、「bison & flex compiler for Windows GUI」を使って
コンパイルをかけ、できたCソースを.NET2003でビルドかけました。

一応、エラーは
「Zsscanf:1番目の引数を'unsigned char*'から'const char*'に変換できません」
というのが、大量にでました。
(これは、Zsscanf関数を大量に使用しているんででています。)

また、warningとして
「C4244 '=' _W64 int から intに変換しましたデータが失われているかもしれません」
というのが、たいりょうに出ています。

もしよかったら、ソースをお送りしますが・・・
よろしくお願いします。

782:デフォルトの名無しさん
04/07/30 11:54
>>781
そういう場合は、ここに貼り付けて
URLリンク(do.sakura.ne.jp)


783:>
04/07/30 12:32
>>782さん
こちらにCソースファイルを貼り付けました。
よくわからなかったので、まちがってスレを立ててしまいましたorz

URLリンク(do.sakura.ne.jp)

すみませんが、よろしくお願いします。
これでだめでしたら、FLEXソースも貼り付けますので・・・

784:デフォルトの名無しさん
04/07/30 13:00
>>783
あぅ、上手く行っても、変更点の説明がしにくいと思うので、ソースもよろしこ。
#なんとなく見えてますが、上手く行くかどうかは不明。

785:>
04/07/30 13:09
>>784さん

元のFLEXソースを
URLリンク(do.sakura.ne.jp)
においておきます

786:784じゃないけど
04/07/30 13:35
yytext は YY_CHAR* 型で,これは unsigned char * の typedef になっている.
Zsscanf は Zsscanf(const char*, ...) と定義されている.
Zsscanf(yytext, ....) というように呼び出しをしたい.

ということで
1. Zsscanf の第1引数の型を unsigned char * にするか
2. Zsscanf の呼び出し時に毎回キャストするか
のどっちかで対処できるんじゃないかと思う.


787:デフォルトの名無しさん
04/07/30 13:55
3. コンパイラのcharをunsignedにするオプションを指定する

788:ありがとうございます!!
04/07/30 14:18
みなさん ありがとうございます。

とりあえず>>786さんの
「1. Zsscanf の第1引数の型を unsigned char * にするか」で
対応し、エラーを回避させました。

それともう一つ基本的な質問ですが、
この作成されたCソースファイルは、
どのように動作させればいいのでしょうか?
ライブラリとして動作させる場合、
どの関数をよべばよろしいのでしょうか?
(main関数を作成し、それから呼ぶのもどうすればいいのでしょうか?)

すみませんが、ご教授お願いします。


789:デフォルトの名無しさん
04/07/30 14:23
>>785
とりあえず、こちらはCygwinのflexしかないので、それでのやり方を説明しておきます。
まず、この部分
int nmatch = 0;
int len;
const char *base;
char buf[255];
va_list ap;
va_start(ap, fmt);
char skipflag;
va_start(ap, fmt) の後に char skipflag がありますが、これはC言語の構文として許されません。
以下のように書きます。
char skipflag;
int nmatch = 0;
int len;
const char *base;
char buf[255];
va_list ap;
va_start(ap, fmt);
コンパイル方法
URLリンク(www.cygwin.com)
より "Install or update now!" をクリックして実行してください。
あとはメッセージにしたがって、インストールするのですが、パッケージの選択のところで flex を入れておく事。
flexの入っているフォルダーにパスを通したら、
flex flex_test.l
cl flex_test.c
以上です、
あと、_yywrap _yylex はちゃんと定義して置いてください。
出力結果をC++としてコンパイルしたいのであれば、786氏の意見を参考すれば良いかと思います。


790:デフォルトの名無しさん
04/07/30 14:35
>>788
yylexを呼び出します。
そのあたりは初歩の初歩部分なので、適当に参考書でも買ってきて調べてみるとよいでしょう。
入出力の特化は結構ややこしいので・・・


791:>>778です
04/07/30 14:53
みなさん いろいろ教えてくださってありがとうございます。。。

>>790さん 
yylex()を呼び出すというのまでは、調べたのですが
これを呼び出すとDOS窓で入力待ちなのかどうかは、わかりませんが
止まったままになってしまします。
いろんなサンプルを見てみたら
単に
return yylex();
としているだけなのが、あったので
このように書いていたのですが・・・・
こういう呼び出し方ではいけないのでしょうか?

何度も何度もすみませんが、
ご教授お願いします。

792:デフォルトの名無しさん
04/07/30 14:59
>>791
一番簡単な方法は
yyin = fopen( ... ) ;
として
yylex()
を呼び出します。


793:>>778です
04/07/30 15:18
>>792さん

ファイルからの読み込みではなく
指定された文字列を受け取って
それを変換かけてから、変換後の文字列を
返すというようなプログラムを組みたいのです。

yytextに指定文字列を入れてから
yylex()を呼び出せばよろしいのでしょうか?
(どこかのサンプルでこのような形のものがあったのですが・・・)

794:デフォルトの名無しさん
04/07/30 15:22
>>793
ちがいまーす!!(^^;
実は貴方のやりたい事は、書き始めると結構ヘビーです。
素直にflexの本を買ったほうが良いかと・・・・
どうしても買いたくなげは YY_INPUT マクロを気合で読んでみるとか?


795:>
04/07/30 15:32
>>794 さん
では、入力したい文字列を
一度ファイルに落としてから
再度、yyin = fopen( ... ) ;
で読み込むという方法だと
まずいでしょうか?

796:デフォルトの名無しさん
04/07/30 15:36
>>795
それで問題がなければ、それでも良いかと・・・・

797:>>778です
04/07/30 16:27
今のサンプルFLEXプログラムは「H16/7/16」を「平成16年7月16日」に
変換するものなんですが、ファイルに「H16/7/16」を書き込み、保存してから
yyin = fopen( ... ) ;
として
yylex()
を呼び出すと、「ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ」などと
文字化けが出てしまい、途中で終了してしまいます。
これって何が原因があるのでしょうか?

798:デフォルトの名無しさん
04/07/30 17:17
cygwin でやるんだったら、ソースファイルとテスト用入力ファイルは EUC にしておく。lex(flex) はマルチバイト文字をマルチバイト文字として扱わないからDIGIT [0123456789]
の書き方だとダメ。
DIGIT (0|1|2|3|4|5|6|7|8|9)
だと動くみたい。


799:デフォルトの名無しさん
04/07/31 00:18
すいませんが、bison.output の見方を解説しているページとか
ご存知ありませんか?


800:デフォルトの名無しさん
04/07/31 01:14
>>799
見方を理解しようとしないで、LR解析をある程度理解した方
が良いと思うよ。
そうするとbison.outputの意味が分かるようになる。

801:799
04/07/31 22:52
LR解析を理解するための、書籍とかありますか?


802:デフォルトの名無しさん
04/07/31 22:54
はじめてのLR

803:デフォルトの名無しさん
04/07/31 22:54
1つの先読みだけしか許されないというのは、かなり不自由かも。
LR(1)を完璧に実装した yacc もどきってご存知ないですか?


804:800
04/08/01 00:44
800ゴット

>>799=801
コンパイラ系の書籍ならば、大抵構文解析の説明はあるでしょ。
手元の本だと『ドラゴンブック』と『コンパイラの理論と実現』と
『コンパイラ(昭昇堂)』にLR解析の話が書いてある。

>>803
知らないけど、あまり不自由を感じたこと無いな>先読み1
たいしたもの作ってないからかな。

805:デフォルトの名無しさん
04/08/01 01:08
Catalog of Free Compilers and Interpreters.
URLリンク(www.idiom.com)

806:デフォルトの名無しさん
04/08/01 02:53
>>803
LLだけとboost::splitを使ってみるとか。
URLリンク(boost.cppll.jp)

でも、文法を変えたほうがいいかもね
LALR(1)の鬼畜パーススピードを捨てるのはもったいないべ。


807:デフォルトの名無しさん
04/08/01 03:41
LR
LL
LALR
ってなんの略?
(1)
ってのは1つ先見るってことでよい?

808:デフォルトの名無しさん
04/08/01 04:04
manの番号

809:デフォルトの名無しさん
04/08/01 06:21
>>807
Lonely Rotary
Lonely Lolita
Lolita and Lonely Rotary

810:デフォルトの名無しさん
04/08/01 12:50
>>807
LR:左から読んで右から導出
LL:左から読んで左から導出
LALR:ルックアヘッド付きLR


811:デフォルトの名無しさん
04/08/01 12:54
【LR】Left-to-right scanning, Right-most derivation in reverse
【SLR】Simple LR
【LALR】LookAhead LR

括弧内は先読みのこと

812:デフォルトの名無しさん
04/08/01 15:47
LALR(3) ぐらい欲しい。


813:デフォルトの名無しさん
04/08/01 15:57
>>812
探せば GLR 使えるパーサジェネレータもあるぞ。

814:デフォルトの名無しさん
04/08/01 16:49
>>812
漏れはむしろ「欲しい例」を出して欲しい。

815:デフォルトの名無しさん
04/08/01 18:10
世の中LALR(1)が圧倒的な主流。
それ以外はただの学問的な研究対象か趣味。

まぁ、炉利趣味と同レベルw


816:デフォルトの名無しさん
04/08/01 18:11
DelphiはLALRじゃないのでは?

817:デフォルトの名無しさん
04/08/01 18:40
>>815
C++ は LALR(1) に収まらないワケだが。

818:デフォルトの名無しさん
04/08/01 21:49
>>817
それは書き方が悪いからでしょ?
あんなもん、書こうとおもえばいくらでも当てはめられる。
(と思う。)


819:デフォルトの名無しさん
04/08/01 21:59
俺はめんどくさいから再起下降でいいよ

820:デフォルトの名無しさん
04/08/01 22:38
俺は再帰降下でいいや


821:デフォルトの名無しさん
04/08/01 22:40
抗菌加工でいいや

822:>>778です
04/08/02 15:41
お礼が遅れましてもうしわけございません。
ありがとうございました。

>>794さんがおっしゃっていた YY_INPUT のサンプルをいろいろ
探したのですが、これの他にもDOS窓から入力された文字列を
変換するなんていうマクロなどありますでしょうか?

823:デフォルトの名無しさん
04/08/02 16:56
>>822
YY_INPUTのサンプルって例えば何?
サンプルとかじゃなくて、実際のflexが生成するYY_INPUTマクロを見た方がいいよ。

さらにlexの実装によっては、どう工夫してもお望みのことができないもの
もあるから、「文字列から入力」っていうのは可搬性の面ではよくない。

とりあえず、flexだったらYY_INPUTを定義し直せばOK
YY_INPUTってのは
YY_INPUT(buffer, result, bufsize)
buffer:文字列を格納するバッファ
result:実際に読み込んだ長さ
bufsize:バッファの大きさ

で、デフォルトではFILE *yyinから読むようになってるはずだから、それを
君が解析した文字列から読む(コピーする)コードにすれば良いね。

そのまま他の環境にコピーしても動かない可能性があるので注意。


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