こんぱいら

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
おれがコンパイラを開発します

どーぞみまもってくらさい

まずHSPみたいにかっこいい名前を考えます
コンパイラなど誰でも作れる。別に見守るほどのこともない。

終了
そんなに簡単なのですか?
ONITAMAやひろゆきにあこがれてます
4デフォルトの名無しさん:04/05/14 16:07
exeを作るだけならHSPで簡単に出来る。

終了
51:04/05/14 16:10
ひろゆきといってもココのひろゆきじゃないですよ

インタプリタかコンパイラでまよったのですが
インタプリタのほうが簡単だそうなのでそっちからいきます

開発環境はWinXP,VC++と便利なツールがありそうだが理解してから使う

俺のイメージなんですがインタプリタだと1行読み込んで
トークンに分解して1トークンずつVCの命令に変換していく方法
なんだけどおかしいでつか?
6デフォルトの名無しさん:04/05/14 16:11
>VCの命令

開いた口がふさがりません
71:04/05/14 16:14
>>4>>6
俺のレベルでは思いつかないのでみちびーてください

>開いた口がふさがりません

たとえばHSPならmesとかいうメッセージあるだろ?
それをMessageBox()に読み替えて実行していくんだけど無理ですか?




8おまんこ〜♪:04/05/14 16:16
おまんこ〜♪
9デフォルトの名無しさん:04/05/14 16:16
EXE作成機能付きインタプリタを作るだけならHSPで簡単に出来る。

終了
101:04/05/14 16:21
HSPライクをつくるのでHSPはつかいたくない

バカにもわかるようにおせーてください

言語仕様とか構文解析できた後のことを得に知りたい
11デフォルトの名無しさん:04/05/14 16:22
HSPも使えないやつがHSPを超えられるはずが無い。

終了
12デフォルトの名無しさん:04/05/14 16:25
垂れ餡スクリプト

http://age.tubo.80.kg/age02/img001/31.lzh

ヒント [F5]
こらっ、やめなさい!!
141:04/05/14 17:13
>HSPも使えないやつがHSPを超えられるはずが無い。

別に使えないわけではない
DLしたが使っていないだけ

説明できる能力がないのなら馬鹿リンクおながいします
>>14
はっきり言うけど、そんなこと書いてる奴がコンパイラを作れるわけがない。
自力で調べ上げられる程度の実力は必要だぞ。
161:04/05/14 17:28
>そんなこと書いてる奴がコンパイラを作れるわけがない。

そんなのわかっている。
コンパイラと名のつく書籍でもよんだほうがよっぽど近道だ

だがあえてココで解決したい
解決したいのはお前だけ。
オナニーは友達と慰めあいながらやってね
>>17
>オナニーは友達と慰めあいながら
クロスオナニー(・∀・)イイ!
191:04/05/14 18:06
そんなに簡単ならHSPぐらいのシステムをつくれるやつ

レスくらはい

何人いるか知りたい
20ネタか?:04/05/14 18:11
★ ウィンドウサイズについて  投稿者:dora  (04/05/14(金) 18:04) No.12746 ntnara024019.nara.nt.ftth2.ppp.infoweb.ne.jp

ディスプレイの解像度より広いウィンドウを作成する事は不可能です
か?
誤爆した
スマソ
22デフォルトの名無しさん:04/05/14 19:47
おーぃ
ちょっときーてくれ
コンパイラでどこまで自分で作りこむかきめたいのだが
ソースをオブジェクトに変換するのに
これソースで
int a;
int b;
a = a + b;

これオブジェクトな
eax a[]
eab

みんな自分でやってる?
23名無し@沢村:04/05/14 21:06
おまいらよ、コンパイラつーか高級言語をつくる上で一番大事なのは、
人間がつかいやすく、かつマシン語と互換性があるかどうか?ということだ。
つかいやすく、かつマシン語と互換性がある高級言語ほど普及する。
例えばつかいやすく、かつマシン語と互換性が高い高級言語の例はCだ。
だがCのマシン語との互換性は不完全だ。
Cからマシン語にはコンパイルできるが、マシン語からCへの逆コンパイルは事実上不可能だからだ。
最近一番普及し出した高級言語はJavaだ。
JavaはC以上に、1使いやすい、2マシン語と互換性が高い、という条件を満たしている言語だ。
だからマシン語からJavaへの逆コンパイラは多く存在する。
おまいらよ、Java以上にマシン語と互換性の高い言語をつくってみろ?
かつ、アセンブラにならず使いやすいという高級言語の利点を生かした言語をだ。
そうすれば、その言語はCやJava以上に普及するぞ!!
>>1
板を私用に使わないでください。

自己紹介
http://etc.2ch.net/intro/
夢・独り言
http://life4.2ch.net/yume/
251:04/05/14 21:47
>JavaはC以上に、1使いやすい、2マシン語と互換性が高い、という条件を満たしている言語だ。

ネイティブコードとは互換性はないんでつよね?
26デフォルトの名無しさん:04/05/14 22:52
>>23
じゃあアセンブラでいいじゃん。何か?
とりあえずここに来る前にましなアイコン書け。
そしてVisual E++をVisualにマシン語だけで書いて見れ。
PascalのPコードでもいいの?
ぼく知障になっちゃったかな?
こんぱいらじゃないよ。こんばんはだよ。
「は」って書いて「わ」って読むんだよ。
はいぼく〜こんばんは〜(藁
>>28
あぁ、おまえ知障になっちゃったのか。
でも、自分で気付いたみたいだからえらいねえ。
とりあえず、>>1をこんぱいるしてください
31デフォルトの名無しさん:04/05/15 11:55
>>1はそろそろこんぱいらを開発したのかな?
>>30
バグ直してないのにコンパイルするな
33デフォルトの名無しさん:04/05/15 13:45
compile 集める 編纂する
俺、C言語の勉強してて、
ウインドは作れない物の、Cの概要を理解する事ができた。

でも、いろいろ悩んだんだけど、JAVAへ移行する事にしますた!
俺はWin使ってるけど友達にはMac使ってるヤツ多いし。
OS依存のない物の方がいいだろうし。

まだ参考書すら買ってないけど、明日にでも参考書買ってこようと。
がんばるぞー!
と、どこかで意気込みを言いたかったので、糞スレのここで。

じゃ。>>1が作ったコンパイラでコンパってきます。
いや、次世代言語信長の開発はどうなったんだ?
361:04/05/15 16:54
今日も暇なので書店でコンパイラ技法などを斜め読みしてきた

見通しできてからでないとモチベーションあがらないので
とににかく言語仕様や構文解析などはすっ飛ばす。

調べる項目も山積しているのでひとつひとつ解決していくが
かなりつらい
371:04/05/15 17:03
見通しとしては

int a,b,c
a = b = c = 1;
if(a == 1 )c = 100;
のようなものは1対1のアセンブラに置き換えることができるので楽勝だが
printf()等の表示の部分どのように実現しているかわからない
コマンドラインにどうやって出力するのか解析が大変だ
そもそもapiを実装したのだがapiのコールをアセンブラでどうやって
かくのか....これも地道に解析するのか....
ビジュアルは重要だかね.
381:04/05/15 17:11
>>34
やっぱり最初はビジュアルほしいよね
ウィンドウの実装は簡潔にしたいもの

そうするとイベントドリブンは必須か
コンパイラのソースでも読めよ。
401:04/05/15 21:34
>>39
なんかいいのあったら教えてください
41名無し@沢村:04/05/15 22:18
>>37
>apiのコールをアセンブラでどうやってかくのか

apiのコールは我が「Visual E++」で実現済みだ。
原理を説明すると、まずcall文でapiをコールするんだよ。call[apiの文字列]というふうに書く。
この[apiの文字列]は、dllに記述されているパブリックネームで書くんだ。
次に[apiの文字列]の部分をアドレスに変換するんだが、これはPEファイル内のIMPORTセクションのアドレスになるんだ。
IMPORTセクションには使用するapiの数だけ6バイトごとにjmp文+アドレスが書いてある。
つまりcall[apiの文字列]はIMPORTセクションに書かれている該当するapiの先頭アドレスを指すわけだ。
だからIMPORTセクションには、どの順番でapiを並べるかを決めておかなくてはならない。これは自分で決めるんだ。
次にIMPORTセクションに書かれているapiごとのjmp文+アドレスだが、これはimportセクションのルックアップテーブルへジャンプするためのものなんだ。
ルックアップテーブルにはDLLごとに使用するapi文字列の先頭アドレスが書かれてるというわけだ。
とまあ、つまりこのアドレスはこれを指す、あのアドレスはあれを指すというふうに、実際のPEファイルを調べてつじつまを合わせるようにしてプログラムをつくれば、実際のdllとのリンクはPEファイルが自動的にやってくれるよ。
つまりおれらは、単にこのアドレスはこれを指す、あのアドレスはあれを指すというふうにつじつまさえ合わせていけばいいんだよ。
「Visual E++」はこのやりかたでapiの呼び出しを実現してるんだから、間違いないよ。
わかったかな?おまいらよ?
ここまで読んで損したって思わせるスレは久しぶりだ。私は悲しい。
「車輪の再発明」と言か「石器の再発明」だな、このスレは。
想像を絶する忌まわしいスレだ
>>37
>printf()等の表示の部分どのように実現しているかわからない
>コマンドラインにどうやって出力するのか解析が大変だ
確かに大変そうだ。
ならいっそファミコンエミュに文字を表示するコンパイラを作ってはどうか
>>23
HSPは、JavaやCより普及しましたか。
471:04/05/16 00:23
>>41
今の俺には理解できないよ
混合モードみたがPUSHの連続がパラメータでCALLで関数のアドレス入れてる
のはだいたいわかったくらい

33: // ウインドウを作成します。
34: hWnd = CreateWindow(wcex.lpszClassName, // ウインドウクラス名
35: "Windowsプログラムの雛型", // キャプション文字列
36: WS_OVERLAPPEDWINDOW, // ウインドウのスタイル
37: CW_USEDEFAULT, // 水平位置
38: CW_USEDEFAULT, // 垂直位置
39: CW_USEDEFAULT, // 幅
40: CW_USEDEFAULT, // 高さ
41: NULL, // 親ウインドウ
42: NULL, // ウインドウメニュー
43: hInstance, // インスタンスハンドル
44: NULL); // WM_CREATE情報
481:04/05/16 00:23
004010DA mov esi,esp
004010DC push 0
004010DE mov edx,dword ptr [ebp+8]
004010E1 push edx
004010E2 push 0
004010E4 push 0
004010E6 push 80000000h
004010EB push 80000000h
004010F0 push 80000000h
004010F5 push 80000000h
004010FA push 0CF0000h
004010FF push offset string "Windows\x83v\x83\x8d\x83O\x83\x89\x83\x80\x82\xcc\x90\x97\x8c^" (0042001c
00401104 mov eax,dword ptr [ebp-8]
00401107 push eax
00401108 push 0
0040110A call dword ptr [__imp__CreateWindowExA@48 (004252d8)]
00401110 cmp esi,esp
00401112 call __chkesp (004012e0)
00401117 mov dword ptr [ebp-34h],eax
491:04/05/16 00:32
>>45
うまくいかない(T T)
実行時に落ちる

void main(void){

char* a = "こんぱいらだよ%d";
long c;
c = 4545;
__asm{
push a
push c
call printf
add esp,8
}

}
501:04/05/16 00:47
>>45
ちなみに俺はコンパイラを作ったあとにエミュとOS開発する予定だ

>>42-44
すまん
>>50
OS開発なら、モナーOSのメンバーに入りゃいいじゃねーか。
5245:04/05/16 01:21
>>47
user32.dllのCreateWindow
>>48
文字を1文字づつ読んで何かしているようだが
そのあとCreateWindowに渡して表示させているようだが
>>49
値を>>48に渡しているようだが
つまりこれは、なんらかの値をウィンドウに出すプログラムということで
531:04/05/16 01:46
>>45
ちょっと無造作に貼り付けてしまってすまん
>>41がAPIコールの実装方法をレスしたがサッパイわからんかったので
CreateWindowのAPIを混合モードでだしてみたんだ
だからその二つを>>47>>48に貼り付けたってわけ
>>45がそれは大変そうだというから
>>49ではインラインアセンブラでprintfを実現しようとしたが

実行エラーというわけなんだ
541:04/05/16 01:48
>>51それ検索したが見つかんないよ
5545:04/05/16 01:48
>>48
簡単なインタプリタを作られたつもりのようだが、
失礼だが1>>は根本的に間違っておられる。
コンパイラを作るならWindowsAPIを呼ぶのではなく、
直接バイナリレベルからWindowsのシステムコールを呼ばなければ意味が無い
表示させたい文字とCreateWindowを呼ぶ処理をバイナリ化し、
保存したバイナリファイルの拡張子を「.exe」にする。
そして実行。
これこそが真のコンパイラだ
561:04/05/16 01:54
考えれば考えるほど疑問が山積するが

例えば混合モードで
void main(void){
printf("もなー");
}
とた場合
void...が始まるまでにすげーながいアセンブラがあるがなんだろうか
ソースを書いた3行のアセンブラはおっかけることができるが
その前後のアセンブラはとてもじゃないが量がおおすぎる
このへんは固定でヘッダフッタとしてつくアセンブラなら納得できるが..
5745:04/05/16 02:08
>>1の理解力の速さには敬意を表します
>>1がどの程度のことを知りたいのか知らないがコンパイラを開発してEXEを作るならPEの解析から始めろ。
OSの開発するならもっと違う勉強しろ。アーキテクチャレベルから。
何のエミュ作るかは知らんがエミュ作るならBIOSの解析が必要。シュミレートするだけならエミュじゃないし。
59名無し@沢村:04/05/16 06:10
>>47
apiコールでCreateWindowを呼んだってあまり意味はねーな。
その前にウインドウクラスの登録がされてないし、メッセージループの処理もされていない。
一瞬で終了するウインドウができるだけだ。
>>59
沢村ちゃんも休日なのに早起きだなぁ。

つーか、「コンパイラ」が作りたいんだろ?
OMFかCOFFのオブジェクトファイル吐かせるようにして外部参照の解決は
リンカに任せりゃいいじゃん。
呼び出し規約を合わせればAPIや他の言語で作ったライブラリも使えるし。

オブジェクトファイルのフォーマットが分からないとかリンカって何?とか
言うんなら、これを全部音読してから出直してこい↓

「Linkers & Loaders」 (オーム社)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06437-9
Win上で動く物を吐くCコンパイラを作るならこんなAPIが使える
http://www.microsoft.com/japan/msdn/library/?url=/japan/msdn/library/ja/jpdllpro/html/_win32_commandlinetoargvw.asp
ただしUnicodeなので9Xだと面倒くさそう
http://www.honet.ne.jp/~tri/program/unicows01.html
「コンパイラ・スクリプトエンジン」相談室 3
http://pc5.2ch.net/test/read.cgi/tech/1070089173/
こんばんわ
651:04/05/17 09:23
>>58
実行形式のファイルを解析するのか

>>55
0040110A call dword ptr [__imp__CreateWindowExA@48 (004252d8)]
これでいいんだよな?
>>59
大丈夫。SDKくらいわかるよ。
ただWin32APIをよびだすアセンブラはこうなってるのかと
みたかっただけ
661:04/05/17 10:41
>>58
>>1がどの程度のことを知りたいのか知らないがコンパイラを開発してEXEを作るならPEの解析から始めろ。
自分がコンパイラたるものとは何かを具体的に知らないから困っている
おおよそこんな項目はこんなことだと思う
1字句解析
2構文解析
3意味解析  ← ここまではテキスト処理なのでわかりやすい
4中間コード生成 ← これがOS依存のアセンブラコードとすれば対応が難しい
5オブジェクトコード生成 ← 9A 2B 3F とかの機械語を指す
6リンク ← 5をつなげる(このへんになると具体がわからん)
7実行ファイル生成 ← ?もうVC++のコンパイラまかせなので?
671:04/05/17 14:50
>>60

>OMFかCOFFのオブジェクトファイル吐かせるようにして外部参照の解決は
>リンカに任せりゃいいじゃん。

VC++だからCOFFを調べたらいいんだね..
681:04/05/17 14:53
>>62の誘導でCマガジンの2000年5月ごうみて
インタプリタを作ろうを読んだが
リヌクスかぁコンパイラもインタプリタもいっしょじゃん

なんか日記みたいになってきたけどもう夢でおわるのか。。
691:04/05/17 15:45

とりあえず本読むか
>>60紹介してる本立ち読みしてくる
あとエイホの本もみてみる

あとバイトしないと買えないな
>>69
働いてねーのかよ!
7162:04/05/17 22:31
重複スレなんだから削除依頼出しとけと。
>>66
「コンパイラ」と「コンパイラドライバ」を混同してる悪寒。
>>1
せっかくのやる気をそぐようで悪いけどまずはプリプロセッサから作ってみては
741:04/05/18 13:08
>>71
゚д゜< わかった。山崎以外のスレがあるとは知らなかった
>>72
ヒントくれてありがとう
コンパイラやリンカーはコンパイラドライバに呼ばれる仕組みなのか!!
コンパイラドライバってどこにあるんだーーー

>>73
たぶんそのほうがいいと自分でも思っている
全体的な構想やフレームワークが見えてないと続かない......
751:04/05/18 14:06
゚д゜< 削除の仕方がわからん
>>74
コンパイラドライバはコンパイラと普通1対1に対応する存在(だと俺は思っている)
つまり1がコンパイラを作ったらそれに対応するコンパイラドライバを作ることも1だと思う
あとプリプロセッサ・リンカ・makeもあれば処理系としては一通りそろったも同然じゃない?
コンパイラドライバ、プリプロセッサ、コードジェネレーター、アセンブラ、
リンカ、ライブラリアン位は欲しいな。
781:04/05/20 19:24
>>76-77
糞スレにレスありがとうございます
>つまり1がコンパイラを作ったらそれに対応するコンパイラドライバを作ることも1だと思う

コンパイラドライバは結局つくらないといけないんですね
もう一式つくると いうことですね
>>78
コンパイラドライバなんて対して面倒じゃないと思う。
予めDLLでMakeを作っておいてから、
コンパイラドライバはコマンドライン引数を解釈して、
メモリ上に動的にMakeFileを作りDLL化したMakeに送つける。
タダのmakeもMakeFileを丸ごと読み込んでDLL化したMakeにこれまた送りつける。
1石2鳥ウマー(゜Д゜)
コンパイラドライバならLSI C-86 試食版にソースが入ってるから、これを読め。
makeとプリプロセッサのソースも入ってる。
古いDOS用の処理系だがGCCのソースよりは読みやすいので勉強用には丁度良い。
811:04/05/21 20:41
>>79
>予めDLLでMakeを作っておいてから、
この意味がわからないんですが、DLLでMakeを作る?
俺の使ったことのあるのはMakeは例えばBSD系でソースを落としてきて
/cofigureしてMekeで自動コンパイルというのしか使ったことありません

ひょっとしてMake=コンパイラドライバと考えていいんでしょうか

と ここまで書いていて

>コンパイラドライバはコマンドライン引数を解釈して、
>メモリ上に動的にMakeFileを作りDLL化したMakeに送つける。

Make(DLL化)= コンパイラドライバ とケテーしていいですね
821:04/05/21 20:54
>>80
>コンパイラドライバならLSI C-86 試食版にソースが入ってるから読め。

読んでみます!すんげー長い道のりになりそうな悪寒......

>>78 = 1にやる気があるなら糞スレじゃない。
もちろんsageでな
みんな叩くだけ叩いてる様子だが、コンパイラ作りなんて時間のある学生には
勉強になるんじゃないか?
仕事で疲れてるだろうが暖かく見守ってやろうぜ
俺も作ったよ。BASICコンパイラだけど。
make
依存関係が書かれたMakefileとファイルのタイムスタンプから必要なコマンドを実行する

コンパイラドライバ
与えられたソースから実行可能ファイルを生成するために必要なプログラムを順次呼び出す
8779:04/05/22 11:18
>>81
DLLは余計だったな。

言いたかったのはコンパイラドライバはコマンドラインをから
架空のmakefileを作り出させる。
それを引数にしてmakeを呼び出す。
もちろんタイムスタンプ無確認で全て実行するオプションをつけとく。
(そういうオプションを持ったmakeを作っておく)
終わったら架空のmakefileは消す。

……っていう事をコンパイラドライバの一形態として考えていたんだけど。、
直接各プログラムを呼ぶのと何も変わんないよな。
makefileに書き出すかCreateProcessの引数にするだけしか違わない。
鬱ダシノウ……。
>>1はもう来なくなったか?
891:04/05/23 20:18
サンクスコ!
コンパイラ開発にいどむには力不足というのをひしひしと感じている
今は>>80の言うLSI試食版のコンパイラドライバを読んでいます

>>86−>>87
微妙に理解できない状態です。
とりあえずMakeとコンパイラドライバは異なると覚えておきます

901:04/05/23 21:02
沢村@名無しさんのVisualE++も参考にして
とりあえずバイナリデータをバイナリエディタで書いて
コマンドプロンプトで実行したりして遊んだりしている状態でです

最近はVBばっかりやってたのでC忘れているのにガクブル(゚д。でして
>>86
>俺も作ったよ。BASICコンパイラだけど。
BASICってインタプリタタイプなんですね
Cマガジン見てたんですけど
1 ソースプログラムを読みながら逐次実行
2 構文木などの中間形式にコンパイルしてそれを解釈実行
3 仮想マシンのためのコードを生成して仮想マシン上で実行

インタプリタってあいまいで難しいですね
コンパイラは完全ネイティブのバイナリデータに変換するから分かりやすいですけど
91名無し@沢村:04/05/24 21:42
おまいらよ、おれはつい最近つーか、たったいまさっき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知らなかっただろう?
92名無し@沢村:04/05/24 23:49
Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?
実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!
プゲラ
941:04/05/25 10:48
>>91
なぁおっちゃんよー
VE++って全部のAPI使えるの?

仕組みも公開してくれませんか
951:04/05/25 14:01
yacc/rexをぐぐったけどC構文の解析器なんですね

perlとrubyを取り入れたCの文法にしたいという構想はあるですけど
yaccとかはC解析器だから無理っぽいですね
まだ試していませんがWindows版はないようなので
沢村の言うことは信用するな。

ところで1は何を作りたいんだ?
漏れの脳内では1は既にCコンパイラを作ることになっているぞw
>>95
いや、別にyacc/lexはC言語しか作れないわけじゃないよ。
981:04/05/25 22:05
>沢村の言うことは信用するな。

突然Tcl/Tkを発見したと言い出すからビックリしたも

>ところで1は何を作りたいんだ?
>漏れの脳内では1は既にCコンパイラを作ることになっているぞw

まずCのコンパイラは作ります。
コンスタントで少しずつなんだけど必ず完成させるつもりです
ただLSI試食版の
コンパイラドライバ → パーサ → コードジェネレータ → リンカ
コンパイラドライバはパーサとコードジェネレータをソース毎に実行させるとして
パーサとコードジェネレータが何者かわらんのですが
パーサはyaccみたいなものと考えて
コードジェネレータが吐くものがオブジェクトコードになっているので
アセンブラに展開していると考えています

リンカは複数のオブジェクトコードと
ライブラリを連結させていると見ているのですが、あいまいですね

目的は自分の開発した言語でプログラミングを楽しむことです

991:04/05/25 22:15
>いや、別にyacc/lexはC言語しか作れないわけじゃないよ。

スマン....調査不足
100デフォルトの名無しさん:04/05/26 03:21
>>92
Tcl/Tkを馬鹿にした時点で、あなたはゴミ。
>>98
言語処理系のバグなのか、書いているプログラムが間違っているのか
切り分けに四苦八苦して楽しみたいわけですね。w
>>98
順番が違う。LSI Cの場合は
プリプロセッサ→パーサ→コードジェネレータ→アセンブラ→リンカ
でこのプログラムを順に呼び出す存在がコンパイラドライバ。
(ちなみにジェネレータは直訳すると生成者。念の為)
1031:04/05/26 22:00
>切り分けに四苦八苦して楽しみたいわけですね。w

同じバグでも愛着があると思います。脳内ではこれは仕様なんだと素直に思える
飛躍ですがMyOSつくたらもっと楽しいハズデス

>順番が違う。LSI Cの場合は
>プリプロセッサ→パーサ→コードジェネレータ→アセンブラ→リンカ
>でこのプログラムを順に呼び出す存在がコンパイラドライバ。

spawnv()で実行ファイルを呼び出しているのを確認できました(・∀・)
わかって読むのとそうでないのとではぜんぜん違う...
だいぶ楽に読めるようになりますた感謝
10496:04/05/26 23:12
よかった。98でCコンパイラ作るって言ってくれて。
実はその気になっていてライブラリ関数を作ってみていたんだ。
(まだctype.h程度、何も出来ていないも同然。)
余計なお世話だったらスマソ。

>>103 ==1
もう遅いみたいだけどLSI Cのコンパイラドライバ、LCCには呼び出すコマンドを表示するだけの -z オプションがある。
それに確かVC(BCCも)はコンパイラとコンパイラドライバを兼ねているんでわかってなかったんだと思う。
1051:04/05/27 16:47
>実はその気になっていてライブラリ関数を作ってみていたんだ。

1人でシコシコやてるよりモチベーションがあがるので助かります
ライブラリを全部そろえるのはどうしようか迷っていました
全部オブジェクト形式(アセンブラ)で記述するとなると...
あと既存のものを流用しようとも考えましたが、それも勉強しないと
読めません
1061:04/05/27 16:54
>コンパイラドライバ、LCCには呼び出すコマンドを表示するだけの -z オプションがある。

ソースしか読んでなかったので使ってみたいと思います

>それに確かVC(BCCも)はコンパイラとコンパイラドライバを兼ねているんでわかってなかったんだと思う。

統合環境でポンとコンパイルばかりしてきたから一度もコンパイル手順を
きちんとしたことがないんです(。。)

実際に何かやろうとするとオツムがついていかなくて大変っす
10796:04/05/27 18:15
>>105
でも手抜きのヘボ物なんで期待しないでちょうだい
ところでもう完璧にWin32用と決め付けて
short 2byte
int  4byte
long 4byte
long long 8byte(long long自体の実装は後回しでもいいけど)
でlimits.h と stdint.hを書いちゃったけど平気?
>>98
>目的は自分の開発した言語でプログラミングを楽しむことです

俺もこれを目指して勉強中です。アセンブラをちょこっと齧って、今はオブジェクト
ファイル形式を調査中。最終的に俺言語が作れなくても、かなり良い勉強になりますね。

ちなみにこんなのもあるよ。Windows でも動くみたい。

http://fabrice.bellard.free.fr/tcc/
http://b2c-1.rocketbeach.com/~bitwalk/tcc.html
109デフォルトの名無しさん:04/05/28 02:26
>>108
俺は最初にDOSのバッチファイル互換のインタープリタを作って見たよ。
最初に簡単なインタープリタを作ってみるのもいいかも。
1101:04/05/28 22:43
>でlimits.h と stdint.hを書いちゃったけど平気?

16bitとかは知らないので平気ぽ

>ファイル形式を調査中。最終的に俺言語が作れなくても、かなり良い勉強になりますね。

(・∀・)同士!
PEのフォーマットが知りたいんです。何かわかったら教えてくらさい
おながいします

>最初に簡単なインタープリタを作ってみるのもいいかも。
インタープリタの方がいまはわからないです
1111:04/05/28 23:04
>コンパイラドライバ、LCCには呼び出すコマンドを表示するだけの -z オプションがある。

確かに
プリプロセッサ CPP
パーサ CF
ジェネレータ CG
アセンブラ r86
の順で読み出していました
パーサとジェネレータのソースがない.........
Mekeのソースはあるんですがなんだろうコレハ

さすがにLSIもタダで製品のコードジェネレータのソースを晒すほど気前よくはあるまい。

コンパイラの内部構成
ttp://www.msc.cs.gunma-u.ac.jp/~nakano/Compiler/gaiyou.html
ttp://www.msc.cs.gunma-u.ac.jp/~nakano/Compiler/index.html
1131:04/05/29 11:29
>>112
リンクありがとん
一読して思いましたが、かなり勘違いが多いのに気づきましたショボーン

My言語作成の前にC言語をまねてから、と考えていましたが
その前に電卓作ってミニモデルつくってみたほうがいいと......
1141:04/05/29 11:41
1 コンパイラドライバ
2 プリプロセッサ
3 字句解析器
4 構文解析器
5 コードジェネレータ
6 アセンブラ
7 リンカ

いまの段階では電卓作って、3,4、もしくわ3,4,5,6をやって
いこと思います
今、題材をC言語にして2,3,4に手をだすのは体力不足でした......スマン
(110も114も1だけど)
>>110
PEやOBJ(OMF/COFF)のフォーマットなんて知らなくても
NASM(かなんか)の構文と適当なリンカのオプションを理解すれば
PEやOBJのことはそいつらに任せられるから何とかなるでしょ?

とか言いつつもPEの解説がここにあると言ってみるテスト
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html

>>114
6 アセンブラは自作不要。既存のでいいよ
11696:04/05/30 07:10
一応報告。
stdarg.h stddef.h stdbool.h assert.h作りました。
中身はたいしたことないものばかりです(ぉ。
1171
>PEやOBJのことはそいつらに任せられるから何とかなるでしょ?

だいぶ気がらくになりました

>>116
かなりもたついてますが、また進展がありましたら教えてださい