こんぱいら
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGどーぞみまもってくらさい
まずHSPみたいにかっこいい名前を考えます
0002デフォルトの名無しさん
NGNG終了
0003デフォルトの名無しさん
NGNGONITAMAやひろゆきにあこがれてます
0004デフォルトの名無しさん
NGNG終了
00051
NGNGインタプリタかコンパイラでまよったのですが
インタプリタのほうが簡単だそうなのでそっちからいきます
開発環境はWinXP,VC++と便利なツールがありそうだが理解してから使う
俺のイメージなんですがインタプリタだと1行読み込んで
トークンに分解して1トークンずつVCの命令に変換していく方法
なんだけどおかしいでつか?
0006デフォルトの名無しさん
NGNG開いた口がふさがりません
00071
NGNG俺のレベルでは思いつかないのでみちびーてください
>開いた口がふさがりません
たとえばHSPならmesとかいうメッセージあるだろ?
それをMessageBox()に読み替えて実行していくんだけど無理ですか?
0008おまんこ〜♪
NGNG0009デフォルトの名無しさん
NGNG終了
00101
NGNGバカにもわかるようにおせーてください
言語仕様とか構文解析できた後のことを得に知りたい
0011デフォルトの名無しさん
NGNG終了
0012デフォルトの名無しさん
NGNGhttp://age.tubo.80.kg/age02/img001/31.lzh
ヒント [F5]
0013こらっ、やめなさい!!
NGNG00141
NGNG別に使えないわけではない
DLしたが使っていないだけ
説明できる能力がないのなら馬鹿リンクおながいします
0015デフォルトの名無しさん
NGNGはっきり言うけど、そんなこと書いてる奴がコンパイラを作れるわけがない。
自力で調べ上げられる程度の実力は必要だぞ。
00161
NGNGそんなのわかっている。
コンパイラと名のつく書籍でもよんだほうがよっぽど近道だ
だがあえてココで解決したい
0017デフォルトの名無しさん
NGNGオナニーは友達と慰めあいながらやってね
0018デフォルトの名無しさん
NGNG>オナニーは友達と慰めあいながら
クロスオナニー(・∀・)イイ!
00191
NGNGレスくらはい
何人いるか知りたい
0020ネタか?
NGNGディスプレイの解像度より広いウィンドウを作成する事は不可能です
か?
0021デフォルトの名無しさん
NGNGスマソ
0022デフォルトの名無しさん
NGNGちょっときーてくれ
コンパイラでどこまで自分で作りこむかきめたいのだが
ソースをオブジェクトに変換するのに
これソースで
int a;
int b;
a = a + b;
これオブジェクトな
eax a[]
eab
みんな自分でやってる?
0023名無し@沢村
NGNG人間がつかいやすく、かつマシン語と互換性があるかどうか?ということだ。
つかいやすく、かつマシン語と互換性がある高級言語ほど普及する。
例えばつかいやすく、かつマシン語と互換性が高い高級言語の例はCだ。
だがCのマシン語との互換性は不完全だ。
Cからマシン語にはコンパイルできるが、マシン語からCへの逆コンパイルは事実上不可能だからだ。
最近一番普及し出した高級言語はJavaだ。
JavaはC以上に、1使いやすい、2マシン語と互換性が高い、という条件を満たしている言語だ。
だからマシン語からJavaへの逆コンパイラは多く存在する。
おまいらよ、Java以上にマシン語と互換性の高い言語をつくってみろ?
かつ、アセンブラにならず使いやすいという高級言語の利点を生かした言語をだ。
そうすれば、その言語はCやJava以上に普及するぞ!!
0024デフォルトの名無しさん
NGNG板を私用に使わないでください。
自己紹介
http://etc.2ch.net/intro/
夢・独り言
http://life4.2ch.net/yume/
00251
NGNGネイティブコードとは互換性はないんでつよね?
0026デフォルトの名無しさん
NGNGじゃあアセンブラでいいじゃん。何か?
とりあえずここに来る前にましなアイコン書け。
そしてVisual E++をVisualにマシン語だけで書いて見れ。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGこんぱいらじゃないよ。こんばんはだよ。
「は」って書いて「わ」って読むんだよ。
はいぼく〜こんばんは〜(藁
0029デフォルトの名無しさん
NGNGあぁ、おまえ知障になっちゃったのか。
でも、自分で気付いたみたいだからえらいねえ。
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGバグ直してないのにコンパイルするな
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGウインドは作れない物の、Cの概要を理解する事ができた。
でも、いろいろ悩んだんだけど、JAVAへ移行する事にしますた!
俺はWin使ってるけど友達にはMac使ってるヤツ多いし。
OS依存のない物の方がいいだろうし。
まだ参考書すら買ってないけど、明日にでも参考書買ってこようと。
がんばるぞー!
と、どこかで意気込みを言いたかったので、糞スレのここで。
じゃ。>>1が作ったコンパイラでコンパってきます。
0035デフォルトの名無しさん
NGNG00361
NGNG見通しできてからでないとモチベーションあがらないので
とににかく言語仕様や構文解析などはすっ飛ばす。
調べる項目も山積しているのでひとつひとつ解決していくが
かなりつらい
00371
NGNGint a,b,c
a = b = c = 1;
if(a == 1 )c = 100;
のようなものは1対1のアセンブラに置き換えることができるので楽勝だが
printf()等の表示の部分どのように実現しているかわからない
コマンドラインにどうやって出力するのか解析が大変だ
そもそもapiを実装したのだがapiのコールをアセンブラでどうやって
かくのか....これも地道に解析するのか....
ビジュアルは重要だかね.
0039デフォルトの名無しさん
NGNG0041名無し@沢村
NGNG>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の呼び出しを実現してるんだから、間違いないよ。
わかったかな?おまいらよ?
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG>printf()等の表示の部分どのように実現しているかわからない
>コマンドラインにどうやって出力するのか解析が大変だ
確かに大変そうだ。
ならいっそファミコンエミュに文字を表示するコンパイラを作ってはどうか
0046デフォルトの名無しさん
NGNGHSPは、JavaやCより普及しましたか。
00471
NGNG今の俺には理解できないよ
混合モードみたが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情報
00481
NGNG004010DC 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
00491
NGNGうまくいかない(T T)
実行時に落ちる
void main(void){
char* a = "こんぱいらだよ%d";
long c;
c = 4545;
__asm{
push a
push c
call printf
add esp,8
}
}
0051デフォルトの名無しさん
NGNGOS開発なら、モナーOSのメンバーに入りゃいいじゃねーか。
005245
NGNGuser32.dllのCreateWindow
>>48
文字を1文字づつ読んで何かしているようだが
そのあとCreateWindowに渡して表示させているようだが
>>49
値を>>48に渡しているようだが
つまりこれは、なんらかの値をウィンドウに出すプログラムということで
00531
NGNGちょっと無造作に貼り付けてしまってすまん
>>41がAPIコールの実装方法をレスしたがサッパイわからんかったので
CreateWindowのAPIを混合モードでだしてみたんだ
だからその二つを>>47と>>48に貼り付けたってわけ
で>>45がそれは大変そうだというから
>>49ではインラインアセンブラでprintfを実現しようとしたが
実行エラーというわけなんだ
005545
NGNG簡単なインタプリタを作られたつもりのようだが、
失礼だが1>>は根本的に間違っておられる。
コンパイラを作るならWindowsAPIを呼ぶのではなく、
直接バイナリレベルからWindowsのシステムコールを呼ばなければ意味が無い
表示させたい文字とCreateWindowを呼ぶ処理をバイナリ化し、
保存したバイナリファイルの拡張子を「.exe」にする。
そして実行。
これこそが真のコンパイラだ
00561
NGNG例えば混合モードで
void main(void){
printf("もなー");
}
とた場合
void...が始まるまでにすげーながいアセンブラがあるがなんだろうか
ソースを書いた3行のアセンブラはおっかけることができるが
その前後のアセンブラはとてもじゃないが量がおおすぎる
このへんは固定でヘッダフッタとしてつくアセンブラなら納得できるが..
0058デフォルトの名無しさん
NGNGOSの開発するならもっと違う勉強しろ。アーキテクチャレベルから。
何のエミュ作るかは知らんがエミュ作るならBIOSの解析が必要。シュミレートするだけならエミュじゃないし。
0059名無し@沢村
NGNGapiコールでCreateWindowを呼んだってあまり意味はねーな。
その前にウインドウクラスの登録がされてないし、メッセージループの処理もされていない。
一瞬で終了するウインドウができるだけだ。
0060デフォルトの名無しさん
NGNG沢村ちゃんも休日なのに早起きだなぁ。
つーか、「コンパイラ」が作りたいんだろ?
OMFかCOFFのオブジェクトファイル吐かせるようにして外部参照の解決は
リンカに任せりゃいいじゃん。
呼び出し規約を合わせればAPIや他の言語で作ったライブラリも使えるし。
オブジェクトファイルのフォーマットが分からないとかリンカって何?とか
言うんなら、これを全部音読してから出直してこい↓
「Linkers & Loaders」 (オーム社)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06437-9
0061デフォルトの名無しさん
NGNGhttp://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
0062デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1070089173/
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGモナOS
00651
NGNG実行形式のファイルを解析するのか
>>55
0040110A call dword ptr [__imp__CreateWindowExA@48 (004252d8)]
これでいいんだよな?
>>59
大丈夫。SDKくらいわかるよ。
ただWin32APIをよびだすアセンブラはこうなってるのかと
みたかっただけ
00661
NGNG>>1がどの程度のことを知りたいのか知らないがコンパイラを開発してEXEを作るならPEの解析から始めろ。
自分がコンパイラたるものとは何かを具体的に知らないから困っている
おおよそこんな項目はこんなことだと思う
1字句解析
2構文解析
3意味解析 ← ここまではテキスト処理なのでわかりやすい
4中間コード生成 ← これがOS依存のアセンブラコードとすれば対応が難しい
5オブジェクトコード生成 ← 9A 2B 3F とかの機械語を指す
6リンク ← 5をつなげる(このへんになると具体がわからん)
7実行ファイル生成 ← ?もうVC++のコンパイラまかせなので?
00681
NGNGインタプリタを作ろうを読んだが
リヌクスかぁコンパイラもインタプリタもいっしょじゃん
なんか日記みたいになってきたけどもう夢でおわるのか。。
0070デフォルトの名無しさん
NGNG働いてねーのかよ!
007162
NGNG0072デフォルトの名無しさん
NGNG「コンパイラ」と「コンパイラドライバ」を混同してる悪寒。
0073デフォルトの名無しさん
NGNGせっかくのやる気をそぐようで悪いけどまずはプリプロセッサから作ってみては
00741
NGNG゚д゜< わかった。山崎以外のスレがあるとは知らなかった
>>72
ヒントくれてありがとう
コンパイラやリンカーはコンパイラドライバに呼ばれる仕組みなのか!!
コンパイラドライバってどこにあるんだーーー
>>73
たぶんそのほうがいいと自分でも思っている
全体的な構想やフレームワークが見えてないと続かない......
00751
NGNG0076デフォルトの名無しさん
NGNGコンパイラドライバはコンパイラと普通1対1に対応する存在(だと俺は思っている)
つまり1がコンパイラを作ったらそれに対応するコンパイラドライバを作ることも1だと思う
あとプリプロセッサ・リンカ・makeもあれば処理系としては一通りそろったも同然じゃない?
0077デフォルトの名無しさん
NGNGリンカ、ライブラリアン位は欲しいな。
00781
NGNG糞スレにレスありがとうございます
>つまり1がコンパイラを作ったらそれに対応するコンパイラドライバを作ることも1だと思う
コンパイラドライバは結局つくらないといけないんですね
もう一式つくると いうことですね
0079デフォルトの名無しさん
NGNGコンパイラドライバなんて対して面倒じゃないと思う。
予めDLLでMakeを作っておいてから、
コンパイラドライバはコマンドライン引数を解釈して、
メモリ上に動的にMakeFileを作りDLL化したMakeに送つける。
タダのmakeもMakeFileを丸ごと読み込んでDLL化したMakeにこれまた送りつける。
1石2鳥ウマー(゜Д゜)
0080デフォルトの名無しさん
NGNGmakeとプリプロセッサのソースも入ってる。
古いDOS用の処理系だがGCCのソースよりは読みやすいので勉強用には丁度良い。
00811
NGNG>予めDLLでMakeを作っておいてから、
この意味がわからないんですが、DLLでMakeを作る?
俺の使ったことのあるのはMakeは例えばBSD系でソースを落としてきて
/cofigureしてMekeで自動コンパイルというのしか使ったことありません
ひょっとしてMake=コンパイラドライバと考えていいんでしょうか
と ここまで書いていて
>コンパイラドライバはコマンドライン引数を解釈して、
>メモリ上に動的にMakeFileを作りDLL化したMakeに送つける。
Make(DLL化)= コンパイラドライバ とケテーしていいですね
0083デフォルトの名無しさん
NGNGもちろんsageでな
0084デフォルトの名無しさん
NGNG勉強になるんじゃないか?
仕事で疲れてるだろうが暖かく見守ってやろうぜ
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG依存関係が書かれたMakefileとファイルのタイムスタンプから必要なコマンドを実行する
コンパイラドライバ
与えられたソースから実行可能ファイルを生成するために必要なプログラムを順次呼び出す
008779
NGNGDLLは余計だったな。
言いたかったのはコンパイラドライバはコマンドラインをから
架空のmakefileを作り出させる。
それを引数にしてmakeを呼び出す。
もちろんタイムスタンプ無確認で全て実行するオプションをつけとく。
(そういうオプションを持ったmakeを作っておく)
終わったら架空のmakefileは消す。
……っていう事をコンパイラドライバの一形態として考えていたんだけど。、
直接各プログラムを呼ぶのと何も変わんないよな。
makefileに書き出すかCreateProcessの引数にするだけしか違わない。
鬱ダシノウ……。
0088デフォルトの名無しさん
NGNG00891
NGNGコンパイラ開発にいどむには力不足というのをひしひしと感じている
今は>>80の言うLSI試食版のコンパイラドライバを読んでいます
>>86−>>87
微妙に理解できない状態です。
とりあえずMakeとコンパイラドライバは異なると覚えておきます
00901
NGNGとりあえずバイナリデータをバイナリエディタで書いて
コマンドプロンプトで実行したりして遊んだりしている状態でです
最近はVBばっかりやってたのでC忘れているのにガクブル(゚д。でして
>>86
>俺も作ったよ。BASICコンパイラだけど。
BASICってインタプリタタイプなんですね
Cマガジン見てたんですけど
1 ソースプログラムを読みながら逐次実行
2 構文木などの中間形式にコンパイルしてそれを解釈実行
3 仮想マシンのためのコードを生成して仮想マシン上で実行
インタプリタってあいまいで難しいですね
コンパイラは完全ネイティブのバイナリデータに変換するから分かりやすいですけど
0091名無し@沢村
NGNGいまDLしてるところで、まだ開けて見てないんだが、Webでの説明を見た限りじゃなんか良さげだった。
つーか、GUIに関しては、Visual C++よりもちゃんとしたGUIアプリが簡単につくれるとのことだ。
ただ計算的な処理には不向きということだが、そこは何かC言語で書いて追加できるとのことだ。
おれはちょっとこのtcl/tkを調べてみるが、ホントにGUIに関して良さげだったら、いま開発中の「Vicual E++」は、
このtcl/tkで書き直してもいいな。Visual C++じゃエディタの予約語の色づけとかチョー面倒だしな…
そして内部のメインの処理だけをC言語で書くようにすればいいからな…
それができそうかどうかをまず調べてみようと思う。
次に調べたいことは、おれが次につくりたい高級言語に、tcl/tkはオープンソースらしいから、パクレる部分があるかどうかということだ。
ともあれ、おれのコンパイラの開発は飛躍的に前進しそうだな。
おまいらよ、おれはtcl/tkいま知ったぞ。おまいらは、tcl/tk知らなかっただろう?
0092名無し@沢村
NGNG実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!
0093デフォルトの名無しさん
NGNG00951
NGNGperlとrubyを取り入れたCの文法にしたいという構想はあるですけど
yaccとかはC解析器だから無理っぽいですね
まだ試していませんがWindows版はないようなので
0096デフォルトの名無しさん
NGNGところで1は何を作りたいんだ?
漏れの脳内では1は既にCコンパイラを作ることになっているぞw
0097デフォルトの名無しさん
NGNGいや、別にyacc/lexはC言語しか作れないわけじゃないよ。
00981
NGNG突然Tcl/Tkを発見したと言い出すからビックリしたも
>ところで1は何を作りたいんだ?
>漏れの脳内では1は既にCコンパイラを作ることになっているぞw
まずCのコンパイラは作ります。
コンスタントで少しずつなんだけど必ず完成させるつもりです
ただLSI試食版の
コンパイラドライバ → パーサ → コードジェネレータ → リンカ
コンパイラドライバはパーサとコードジェネレータをソース毎に実行させるとして
パーサとコードジェネレータが何者かわらんのですが
パーサはyaccみたいなものと考えて
コードジェネレータが吐くものがオブジェクトコードになっているので
アセンブラに展開していると考えています
リンカは複数のオブジェクトコードと
ライブラリを連結させていると見ているのですが、あいまいですね
目的は自分の開発した言語でプログラミングを楽しむことです
00991
NGNGスマン....調査不足
0100デフォルトの名無しさん
NGNGTcl/Tkを馬鹿にした時点で、あなたはゴミ。
0101デフォルトの名無しさん
NGNG言語処理系のバグなのか、書いているプログラムが間違っているのか
切り分けに四苦八苦して楽しみたいわけですね。w
0102デフォルトの名無しさん
NGNG順番が違う。LSI Cの場合は
プリプロセッサ→パーサ→コードジェネレータ→アセンブラ→リンカ
でこのプログラムを順に呼び出す存在がコンパイラドライバ。
(ちなみにジェネレータは直訳すると生成者。念の為)
01031
NGNG同じバグでも愛着があると思います。脳内ではこれは仕様なんだと素直に思える
飛躍ですがMyOSつくたらもっと楽しいハズデス
>順番が違う。LSI Cの場合は
>プリプロセッサ→パーサ→コードジェネレータ→アセンブラ→リンカ
>でこのプログラムを順に呼び出す存在がコンパイラドライバ。
spawnv()で実行ファイルを呼び出しているのを確認できました(・∀・)
わかって読むのとそうでないのとではぜんぜん違う...
だいぶ楽に読めるようになりますた感謝
010496
NGNG実はその気になっていてライブラリ関数を作ってみていたんだ。
(まだctype.h程度、何も出来ていないも同然。)
余計なお世話だったらスマソ。
>>103 ==1
もう遅いみたいだけどLSI Cのコンパイラドライバ、LCCには呼び出すコマンドを表示するだけの -z オプションがある。
それに確かVC(BCCも)はコンパイラとコンパイラドライバを兼ねているんでわかってなかったんだと思う。
01051
NGNG1人でシコシコやてるよりモチベーションがあがるので助かります
ライブラリを全部そろえるのはどうしようか迷っていました
全部オブジェクト形式(アセンブラ)で記述するとなると...
あと既存のものを流用しようとも考えましたが、それも勉強しないと
読めません
01061
NGNGソースしか読んでなかったので使ってみたいと思います
>それに確かVC(BCCも)はコンパイラとコンパイラドライバを兼ねているんでわかってなかったんだと思う。
統合環境でポンとコンパイルばかりしてきたから一度もコンパイル手順を
きちんとしたことがないんです(。。)
実際に何かやろうとするとオツムがついていかなくて大変っす
010796
NGNGでも手抜きのヘボ物なんで期待しないでちょうだい
ところでもう完璧にWin32用と決め付けて
short 2byte
int 4byte
long 4byte
long long 8byte(long long自体の実装は後回しでもいいけど)
でlimits.h と stdint.hを書いちゃったけど平気?
0108デフォルトの名無しさん
NGNG>目的は自分の開発した言語でプログラミングを楽しむことです
俺もこれを目指して勉強中です。アセンブラをちょこっと齧って、今はオブジェクト
ファイル形式を調査中。最終的に俺言語が作れなくても、かなり良い勉強になりますね。
ちなみにこんなのもあるよ。Windows でも動くみたい。
http://fabrice.bellard.free.fr/tcc/
http://b2c-1.rocketbeach.com/~bitwalk/tcc.html
0109デフォルトの名無しさん
NGNG俺は最初にDOSのバッチファイル互換のインタープリタを作って見たよ。
最初に簡単なインタープリタを作ってみるのもいいかも。
01101
NGNG16bitとかは知らないので平気ぽ
>ファイル形式を調査中。最終的に俺言語が作れなくても、かなり良い勉強になりますね。
(・∀・)同士!
PEのフォーマットが知りたいんです。何かわかったら教えてくらさい
おながいします
>最初に簡単なインタープリタを作ってみるのもいいかも。
インタープリタの方がいまはわからないです
01111
NGNG確かに
プリプロセッサ CPP
パーサ CF
ジェネレータ CG
アセンブラ r86
の順で読み出していました
パーサとジェネレータのソースがない.........
Mekeのソースはあるんですがなんだろうコレハ
0112デフォルトの名無しさん
NGNGコンパイラの内部構成
ttp://www.msc.cs.gunma-u.ac.jp/~nakano/Compiler/gaiyou.html
ttp://www.msc.cs.gunma-u.ac.jp/~nakano/Compiler/index.html
01131
NGNGリンクありがとん
一読して思いましたが、かなり勘違いが多いのに気づきましたショボーン
My言語作成の前にC言語をまねてから、と考えていましたが
その前に電卓作ってミニモデルつくってみたほうがいいと......
01141
NGNG2 プリプロセッサ
3 字句解析器
4 構文解析器
5 コードジェネレータ
6 アセンブラ
7 リンカ
いまの段階では電卓作って、3,4、もしくわ3,4,5,6をやって
いこと思います
今、題材をC言語にして2,3,4に手をだすのは体力不足でした......スマン
0115デフォルトの名無しさん
NGNG>>110
PEやOBJ(OMF/COFF)のフォーマットなんて知らなくても
NASM(かなんか)の構文と適当なリンカのオプションを理解すれば
PEやOBJのことはそいつらに任せられるから何とかなるでしょ?
とか言いつつもPEの解説がここにあると言ってみるテスト
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
>>114
6 アセンブラは自作不要。既存のでいいよ
011696
NGNGstdarg.h stddef.h stdbool.h assert.h作りました。
中身はたいしたことないものばかりです(ぉ。
0118デフォルトの名無しさん
NGNG0119名無し@沢村
NGNGその方法では他人がつくったリンカに頼るしかなく、意味をなさないコンパイラができるだけだ。
>>115よ、ソフトは単独で動かなくては意味をなさないぞ。もちろんDLLも自前でつくるならいい。
だが他人がつくったDLLに頼るのは、意味のないおもちゃソフトだ。
他人がつくった実行ファイルに頼るのは、それ以下のどうしようもないゴミだぞ!!
>>115よ、ゴミはつくらないでくれ。
0120デフォルトの名無しさん
NGNG別に後から作ればいいじゃん。
0121デフォルトの名無しさん
NGNG沢村ちゃんは「コンパイラ」の定義から勉強し直してね。
ていうか、このスレの内容全然読まずにレスしてるのはさすがだね。
0122デフォルトの名無しさん
NGNG0123名無し@沢村
NGNGおみゃーよ、VisualE++はVisualC++でつくったのよ。
おみゃーよ、VisualE++はまだ発展途上なのよ。したがってVisualE++ではまだVisualE++はつくれん。
だが将来的にはわからんぞ。
VisualE++がVisualC++より便利になったら、おれは迷わずVisualE++でVisualE++をつくるな。
VisualE++は日々進歩していくツールよ。
しばし待たれよ…いや、まだずーーっと待たれよ。
だが、おみゃーよ、これだけはいっておくぞ。
VisualE++でメインウインドウがつくれるようになる日は近いぞ♪
ええっ、まさか!!?ふっ…段取りがついたのよ。おれってやっぱ天才かもね…わははははははーーーーーっ!!!
自分じ待たれよ♪
0124デフォルトの名無しさん
NGNGその方法では他人がつくったコンパイラに頼るしかなく、意味をなさないコンパイラができるだけだ。
>>123よ、ソフトは単独で動かなくては意味をなさないぞ。もちろんDLLも自前でつくるならいい。
だが他人がつくったコンパイラに頼るのは、意味のないおもちゃソフトだ。
他人がつくった実行ファイルに頼るのは、それ以下のどうしようもないゴミだぞ!!
>>123よ、ゴミはつくらないでくれ。
01251
NGNG字句解析関数をつくています
いろいろHPみてると
イテレータのような関数にする
関数が実行されるたびに1トークン処理する
1トークン処理したら返すのはアスキーコードだとありました
一瞬yacc/rex便利そうだなぁって考えましたが自作進行でいきます
01261
NGNGというテキストを字句解析関数にわたしたとしたら
一回目の戻り値=1234
二回目の戻り値=+
三回目の戻り値=10
四回目の戻り値=*
五回目の戻り値=20
ん?トークンそのものを戻り値とするのかトークンの種類を戻り値とする
のかかんね
0127名無し@沢村
NGNGおみゃ〜よ、電卓はつくらないでくれんか?
おみゃ〜よ、つくりたいのはコンパイラだろ?なら電卓に逃げるなよ、おみゃ〜よ!!
電卓でコンパイラの練習のつもりだろうが、おみゃ〜よ、プログラミングには練習はないのだぞ!!
プログラミングとは常にぶっつけ本番の真剣勝負よ。おみゃ〜よ、それがプログラミングというものだ。
おみゃ〜よ、電卓は何の解決にならないぞ。電卓はオナニーにしかならないぞ。
いたずらに無駄な時を費やすな。おみゃ〜よ、惰眠を貪るな!
0128名無し@沢村
NGNGわはは、トークンの先頭アドレスが戻り値になるのがオチだ。
0129デフォルトの名無しさん
NGNG普通は、トークンの種類かなぁ。。。
トークンの種類によって、戻り値も違うしね。
そもそも、+などの演算子では戻り値自体いらない。
Token tok = lexer.getToken();
if(tok.type == TokenType.Number){
value = lexer.getValue();
}
みたいな使い方で。
(言語は適当)
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNGabstract class Token{ Token eval()};
class NumericalToken exnteds Token
class PlusOperator extends Token
lexer.getToken().eval();
0132名無し@沢村
NGNGおみゃ〜らさーーーーーーーーーーーーーーーーーーーーんっ!!!
http://hp.vector.co.jp/authors/VA015412/
「Visual E++」がねーーーーー
ついにメインウインドウをつくれるようになったよーーーーーー
きゃあーもううれしいーーーーーーーーーーーーーっ♪
おみゃ〜らーーーーーーダウンロードしてみちみれ。
そして「winsample」フォルダの中のMainsample.asmを「Visual E++で」開いちみり♪
そしてビルドツールバーを押して、次に実行ツールバーを押しちみり♪
ねーーーーーーー?ちゃんとメインウインドウが出てきたでしょ?ちゃんとエラーもないっしょ?
もうおれ天才ーーーー神ーーーーーーーーーー
おみゃ〜らーーーーーーーーーーーーーーーはあはあ…
0133デフォルトの名無しさん
NGNG構文解析とかタルイぞ
0134デフォルトの名無しさん
NGNGカッコが出てきても諦めるなよ。
0136デフォルトの名無しさん
NGNGファイル→開く→Mainsample.asm→Visual E++→ビルド
→エラー16
まぁだコピペじゃないと駄目なのか。いい加減気付け。
ちなみにコピペしたら>>135
0137デフォルトの名無しさん
NGNGコピペしなくても、何度もビルドしたら通るぞ!
そして>>135に行き着く。
努力してるのは関心するし、すごいと思うが、
完成した物は、まだ中途半端だな・・・
でも、ちょっと期待してるから。
ガンガレ。
0138停止しました。。。
NGNG■ このスレッドは過去ログ倉庫に格納されています