[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/23 13:47 / Filesize : 226 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

「コンパイラ・スクリプトエンジン」相談室 3



1 名前:デフォルトの名無しさん [03/11/29 15:59]
yaccやlexの使い方やら言語仕様やらの話題。

前スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち)

関連リンクは多分 >>2-8 あたり

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


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

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

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

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

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

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

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

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



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


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

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


489 名前:488 mailto:sage [04/02/16 13:19]


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

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

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

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

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

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

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



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

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

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

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

hp.vector.co.jp/authors/VA015412/


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

ttp://fabrice.bellard.free.fr/tcc/
ttp://2.csx.jp/users/bitwalk/tcc.html

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

i.loveruby.net/ja/rhg/
ついに来た。

501 名前:デフォルトの名無しさん mailto:sage [04/02/22 08:31]
home.in.tum.de/~baueran/thesis/
www.cobalt.co.jp/writing/index.html

just a memo.

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

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

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


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

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



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

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

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

509 名前:デフォルトの名無しさん mailto:sage [04/02/26 21:24]
>>508
www.catnet.ne.jp/kouno/c_faq/c15.html#13
には出来ないって書いてあるみたいだけど?

なんか間違ってる?

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

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


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


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

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

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



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

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



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


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

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


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

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

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

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

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


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



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


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

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


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

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


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


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

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

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

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



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

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

538 名前:536 mailto:sage [04/02/29 14:28]
>>537

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

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

540 名前:536 mailto:sage [04/02/29 14:56]
>>539
情報系ではありません。

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

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



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

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

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

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


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



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

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

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

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

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

551 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/03/01 20:50]
assoca!

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



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


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


557 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [04/03/03 02:41]
いまどきのOSはスタックの割り当ては動的だからね。

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

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

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

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

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



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

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

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

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

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

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


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

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

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


570 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [04/03/09 22:36]
alloca実装でけたよ
疲れた






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<226KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef