• ベストアンサー

コンパイラの作り方

ずーっと疑問におもっていることがあります。、コンパイラを作るのにコンパイラを使うと聞いたことがあるのですが、そのコンパイラはどう作るのでしょうか?OSもC言語やアセンブラで書かれていると聞いたことがありますが、じゃあアセンブラはどうやって作るんですかね?答えられる人がいるとは思えませんが、もし、ご存知でしたら宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

一般的にC言語のコンパイラはC言語のコンパイラで作成されています。 つまりC言語のコンパイラVer1.51があるとするならそれを作成するのは Ver1.50です。(Javaもその仕組みをとっているようです。) で本当に0から作るときはアセンブラから作ります。 さらにそのアセンブラを作るには機械語(16進数)直打ちになります。 http://www.afis.to/~mone/osask/osask_ml/200305/msg00034.html

その他の回答 (3)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

#3です。ちょっと追記 この質問は 「ネジを作る機械はどうやって作るの?」 と似てますよね。 そのネジを作る機械もネジが使われているわけですが そのネジはどうやって作るのか? しかし現在、ネジを作る機械は存在しているわけで それを使うわけです。

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

アセンブル(アセンブリ言語→機械語)は効率が悪いとはいえ人間が行うことも可能です。このことを俗に「ハンドアセンブル」などと称していました。 このような場合は「機械語を直接入力する」です。 もうひとつ、最近よくあるパターンとしては、機械語の実行プログラムも所詮各種のデータファイルなどと同じようなファイルとしてあつかえるということから、別の環境で作成するという方法があります。たとえば、組み込み機器のプログラムをその組み込み機器上で作成するということはあまりなくて、パソコン上で組み込み機器用のソースファイルを作って、パソコンのコンパイラで組み込み機器用の機械語にコンパイルするという形で作成します。このような開発手法を「クロス開発」といいます。 このようなケースの場合は、「別の環境でコンパイルする」ということになります。 いかがでしょうか。

  • secretd
  • ベストアンサー率39% (50/126)
回答No.1

http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9 Wikipediaのアセンブリ言語のページを参考にしておいて. アセンブリ言語は,機械語(コンピュータが直接呼んで実行できる形式)に非常に似た形式で書かれます.したがって,たとえば「mov ○○」とか書かれたアセンブリプログラムを機械語に変換するのは対応表があればできるわけで,それを基にして機械語で機械語変換プログラムを作るのは難しいことではありません. そして,このアセンブラに通るアセンブリ言語を基にするか,また新たに機械語から生み出す(なんてあんまりないでしょうか)とかして,C言語などの高級言語を作り,その高級言語から新たな言語を作り…という風に新しい言語が生まれていきます.

参考URL:
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9