トップページ⇒prog
13コメント5KB

コンパイラについて

■ このスレッドは過去ログ倉庫に格納されています
0001トンマNGNG
ちょいとアホくさい質問をさせて下さい。
コンパイラ等はどうやって作ってるんでしょうか。
0101・・・みたいにこつこつ書いて作ってるんでしょうか。
たとえば今私がTURBOC使ってそれらしきもの作ったとしても
それはTURBOCが無ければできないので。
0002名無しさんNGNG
高級言語のコンパイラの他に、アセンブラって物もあります。
機械語を直接入力するのではなく、もう少し人間に分かりやすい形で記述し、
アセンブルしてバイナりオブジェクトを生成します。

TurboCだとインラインアセンブラって言うC言語の中にアセンブラを書く機能が使える筈です。
まぁ、興味があったらどうぞ。
0003>1NGNG
原理的にはコンパイラもコンパイラによって作られる。
そもそもC言語自体がOS作成のために考案された言語。
0004名無しさんNGNG
yacc と lex について調べればおもしろいかも。

0005>1NGNG
鶏と卵の関係みたいで面白いですね。
最も初期の段階では、当然マシン語で作るしか方法無いでしょう。
もちろん簡単なアセンブラを作る事から始まり、そのアセンブラを
使って高機能なアセンブラを作る。
その高機能アセンブラを使って、簡単なコンパイラを作り、その
簡単なコンパイラを使って高機能コンパイラを作る。
まぁ、これはコンピュータ黎明期であって、少なくともパソコンに
使われてるMPUでは、メインフレームを使ったクロス開発でしょう。
その昔、FORTRANでコーディングしたMPU用のクロス・アセンブラ
なんてたくさん有りましたので。
今はパソコンで動く言語の方が進んでるので、ちと想像できない世界
かもね。
0006>1NGNG
大昔、ハンドアセンブルというものがありました。
マシン語と、それに対応する数値を記した表があって、
それを見ながら紙と鉛筆でプログラミングし、
その数値を入力していったのです。
そして、そのうちにその表を完璧に覚えてしまう人が
出てきました。そういった先人達の努力の末に、
まずはアセンブラが誕生したのです。
C言語なんて随分後になってからです。その前に
B言語(正式名称失念)があります。設計者の奥さんの頭文字が
BなのでB言語です。Bの次だからC言語です。
聞いただけで脳味噌腐りそうな話ですが、全てホントの話です。
0007やNGNG
>設計者の奥さんの頭文字がBなのでB言語です。

これはよく言われているみたいだけどガセでは?
0008ほんとの話NGNG
「はじめてのC」という本を、電車の中で、
たったまま、読んでいたら、腰掛けていた女子高生が
なにやら、ひそひそ話をして、
私の方を覗き見してました。
おにいちゃんは、Hの勉強をしてるんじゃないんだぞって
言ってやりたくなりました。
00092>8NGNG
使い古された定番ネタ。お約束。書名を変えないって事は、技術評論社でも狙ってるんだろう。

俺?K&Rで覚えた。
0010>9NGNG
確かに定番ネタではあるけど、ほんとの話をまじに受け止めて結構
微笑ましかったけどね。
なおタイトルに何らかの意図があったのは、まったくその通りだと
多いますです。
K&Rで覚えたのはまっとうですね。
俺の場合翻訳本が無くて原著だったんだが、もう試行錯誤の世界
だった。
00112>10NGNG
「ほんとの話」は捨てハンじゃないんですか?
いや、俺的には「コンパイラの作り方」がテーマな場所で「C言語の覚え方」の話をして欲しくなかっただけなんですが。
正直言って8がネタかどうかより、8で流れが変わってしまう事を避けたかったんですが。

さて。この辺で、このスレッドで「C言語の学習」のネタは止めましょうよ。>各位
0012名無しさんNGNG
やはりドラゴンブックかな。
0013名無しさんNGNG
文脈に沿って括弧の内側から外側へ評価
すればいいのでyaccでパターンマッ
チングして文法をなぞってもらいます。

そうすると1+2+3が
(+ 1 (+ 2 3) )
の木構造をなぞる形で評価が進みます。
式が関数の形に落ちるので、
PUSH 2
PUSH 3
CALL ADD
PUSH RESULT;CALLの結果
PUSH 1
CALL ADD

IFは
1)PUSH CONDITION;条件式の結果
2)ラベルを作り、評価を反転する条件文ジャンプ文を吐く
イコールゼロならジャンプノーゼロ
3)THENの評価結果を吐く
4)ラベルを吐く
■ このスレッドは過去ログ倉庫に格納されています