Existe uma maneira de realmente escrever um compilador em sua própria linguagem?
Você tem que ter algum idioma existente para escrever seu novo compilador. Se você estivesse escrevendo um compilador novo, digamos, C ++, você teria apenas escrevê-lo em C ++ e compilá-lo com um compilador existente em primeiro lugar. Por outro lado, se você estiver criando um compilador para uma nova linguagem, vamos chamá-lo de Yazzleof, você precisará escrever o novo compilador em outra linguagem primeiro. Geralmente, essa seria outra linguagem de programação, mas não precisa ser. Pode ser conjunto ou, se necessário, código de máquina.
Se você fosse inicializar um compilador para Yazzleof, geralmente não escreveria um compilador para a linguagem completa inicialmente. Em vez disso, você escreveria um compilador para Yazzle-lite, o menor subconjunto possível do Yazzleof (bem, um subconjunto bem pequeno, pelo menos). Então, no Yazzle-lite, você escreveria um compilador para a linguagem completa. (Obviamente, isso pode ocorrer iterativamente em vez de em um salto.) Como o Yazzle-lite é um subconjunto apropriado do Yazzleof, agora você tem um compilador que pode se compilar.
Há um artigo realmente bom sobre como inicializar um compilador do nível mais baixo possível (que em uma máquina moderna é basicamente um editor hexadecimal), intitulado Bootstrapping a simple compililer from nothing . Ele pode ser encontrado em https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html .