ブートストラップ問題
言語 X のコンパイラを言語 X で書く場合、次のような対処法がある。
言語 X のインタプリタかコンパイラを言語 Y で実装する。ニクラウス・ヴィルトは、最初のPascalコンパイラをFORTRANで書いたとされている。
X の別のインタプリタかコンパイラが言語 Y で既に書かれて存在している。これはSchemeでしばしば用いられる手法である。
X のサブセットのコンパイラをまず用意し、その X のサブセットで X のコンパイラを書く。Javaを拡張した言語のコンパイラの幾つかやHaskellコンパイラの幾つか、最初のFree Pascalコンパイラはこの方式で作成されている。
X のコンパイラが既に存在するプラットフォーム上で、別のプラットフォームのオブジェクトコードを生成する X のコンパイラをコンパイルし、クロスコンパイラとする。そのクロスコンパイラでコンパイラをコンパイルすれば、ターゲットのプラットフォーム上で動作するコンパイラが得られる。