Compilar uma linguagem de programação consigo mesma

10

Sou estudante de ciência da computação. Quero criar minha própria linguagem de programação (uma linguagem básica com poucas instruções).

Eu sei como fazer um analisador sintático, eu já fiz isso no Perl. Em um artigo, li algo sobre o compilador, um compilador é feito por si só.

Por exemplo, o compilador C é escrito em C. Como é possível? Eu posso criar meu próprio idioma, mas não sei como executá-lo. Qualquer ideia?

É realmente uma boa pergunta e posso escrever um blog para o projeto.

BaptisteL
fonte
As pessoas explicaram como inicializar, mas por que você precisa? Não há razão para que você não possa compilar seu idioma usando um compilador escrito em C, Perl ou qualquer outra coisa. Claro, seria bom ter um compilador para o seu idioma escrito em si, mas isso seria muito trabalhoso - você teria que escrever pelo menos dois compiladores para obtê-lo (um em C / Perl / qualquer que seja, um em seu idioma).
David Richerby
Hum ... acho que vou escrever meu primeiro compilador em C e escrever um segundo no meu idioma. É realmente interessante para criar uma linguagem pouco de programação, podemos aprender muito da ciência da computação
BaptisteL

Respostas:

13

O truque é a inicialização . Você primeiro escreve um compilador para o seu idioma (ou um subconjunto dele) em outro idioma. Em seguida, você escreve um compilador para o seu idioma (ou um subconjunto grande do que você já pode manipular) no seu idioma. Você usa o compilador anterior para compilar o novo compilador e, em seguida, o novo compilador pode se compilar.

Yuval Filmus
fonte
Então, eu posso criar meu primeiro compilador usando C e da próxima vez vou compilar meu compilador v2 com o v1? Mas há um problema, como eu poderia saber que o compilador não tem nenhum problema? Preciso converter meu código fonte em assembler? Ou em outra coisa?
BaptisteL
2
Como eu poderia saber que o compilador não tem nenhum problema? De um modo mais geral, você escreveu um programa; como você sabe que não tem bugs? Você não Você escreve alguns testes e espera o melhor. Preciso converter meu código fonte em assembly? Definitivamente não. Você pode confiar no compilador C. Você está fazendo a mesma coisa, mas com o assembly substituído por C (ou qualquer outro idioma de sua escolha).
Yuval Filmus
Ok, eu tenho que confiar nas minhas habilidades ^^ Eu queria perguntar ao processo do compilador. Eu realmente não entendo o que um compilador faz, analisador sintático e lexical, mas tudo bem?
BaptisteL
Então você gera código. Se você não deseja entrar em detalhes sobre a geração de código de máquina, sempre pode gerar código em outro idioma, como código C, e usar um compilador externo para compilá-lo no código de máquina. (Ou você pode usar uma linguagem interpretada e executar um intérprete.)
Yuval Filmus
Hummm Não, eu prefiro fazer assim: Meu idioma em enter -> Código da máquina. Não quero converter meu idioma em outro (o mesmo da primeira compilação) É possível?
precisa
2

Um compilador que pode compilar suas próprias fontes é chamado de compilador auto-hospedado . Os primeiros compiladores foram escritos em outro idioma. Por exemplo, o primeiro compilador C provavelmente foi escrito em assembler. Todo o truque ao usar um compilador de nível inferior anterior é chamado de inicialização.

Bartosz Przybylski
fonte