To, na co se ptáš, je defakto první prověrka každého kompilátoru. Zda dokáže přeložit sám sebe.
Historicky:
Úplně první programy se cvakali ručně, pomocí kolíčků, přepínačů, atd. To znamená, že jsi si to napsal na papír, a musels mít dobře.
Pak se vytvořili Asemblery, které jen převáděli MOV na její hexa reprezentaci. Tento první asembler byl napsaný ručně, na papír, pomocí přepínačů, kolíčků napchán do stroje.
Pak se vytvořili lepší Asemblery, které toho uměli více, a které byly napsané v předchozí verzi Asembleru.
Pak se vytvořili Lispy, které byly napsány v Asembleru.
Pak se vytvořil jazyk C, který byl napsán v Asembleru.
Pak se vytvořil jazyk Haskell, který byl napsán v C.
Pak se vytvořil jazyk Java, který byl napsán v C.
(Nezajímavé jazyky přeskakuju.)
Schematicky:
Vždycky se překládá nová verze jazyka pomocí předchozí verze, nebo jiného již existujícího jazyka.
Zajímavé by pro tebe mohl být Turingův stroj a princip turingovsky kompetního stroje/jazyka.