it-swarm-ja.com

コンパイラはどの言語で書かれていますか?

コンパイラは、コンパイルする言語とは異なる言語で書かれていますか?

7
the0roamer

コンパイラーには、コンパイルされる言語(ソース言語)、コンパイルされる言語(ターゲット言語)、およびコンパイラーが記述される言語(実装言語)の3つの言語が含まれます。一般に、実装言語は、CやC++などの汎用言語、または ソース言語 のいずれかです。ターゲット言語は、既存のソース言語またはアセンブリに近い適切な言語にすることができます。カスタム中間言語が存在する場合があるため、さまざまな言語に共通のバックエンドが存在する可能性があります。これがgccの動作方法です。 C、C++、Fortran、Ada、そしておそらく他のフロントエンドがあります。それぞれが同じ中間言語にコンパイルされ、次にアーキテクチャ固有のアセンブリ言語にコンパイルされます。

コンパイラがコンパイルしている言語と同じ言語で書かれている場合、コンパイラは セルフホスティング と呼ばれます。言語が新しい場合、その言語用のコンパイラはまだ存在しません。つまり、最初のコンパイラをセルフホスティングすることはできません(そうでない場合、最初のコンパイラはどのようにコンパイルされますか?)。その結果、新しい言語用のコンパイラーの最初の反復は、常に異なる言語で記述されます。そうは言っても、セルフホスティングの方が便利です。著者は、1つの言語に堪能である必要があります。

18
KeithB

理論的には、任意の言語でコンパイラを記述できます。 コンパイルしているもの

3
Corey

Stack Overflow には、 コンパイラを作成するのに最適な言語は何ですか? のように、これについてさらに多くの情報があります。

SOでより関連性があります

質問がStackOverflowからここに移動することは知っていますが、それが逆に機能するかどうかもわかりません。

1
Bratch

私が数年前(2010年)に行った小さな研究から:

  • ocaml ocaml:
    パーサー:(o)caml
    コア:C
  • C++ g ++:
    パーサー:C
    コア:C(現在はc ++)->バイソンで初期生成されてから手書き
  • [〜#〜] d [〜#〜] dmd:
    パーサー:C
    コア:C
  • Haskell GHC:
    パーサー:haskell(+ C)
    コア:Haskell
    ->以前はLMLで
  • [〜#〜] c [〜#〜] gcc:
    パーサー:C
    コア:C
    ->以前はBCPL/asm
  • Smalltalk
    Smalltalk
  • [〜#〜] lisp [〜#〜]
    舌足らずの発音
0
Ugo