Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

(José Neto, 2016) Que são compiladores autorresidentes, compiladores autocompiláveis e compiladores cruzados? Justifique sua aplicabilidade prática e a razão de existência dos três tipos de compiladores.

 

Sendo o tradutor (compilador) um programa, ele deve ser redigido em alguma linguagem de programação disponível, para que seja possível implantá-lo em uma máquina existente.

No pior dos casos, não havendo disponibilidade de qualquer linguagem a não ser a de máquina, pode-se utilizá-la na primeira materialização do compilador. Embora essa seja uma situação muito rara, em circunstâncias especiais ela pode de fato ocorrer, portanto convém considerá-la como uma solução interessante.

Felizmente, existe a oferta de uma grande variedade de linguagens e de compiladores para todas as máquinas comercialmente disponíveis e, assim sendo, qualquer delas pode ser adotada para se programar a primeira versão do compilador a ser construído.

Nesse ponto, é preciso fazer duas escolhas estratégicas: para qual máquina o compilador a ser construído deve gerar código e em qual linguagem o novo compilador deve ser programado.

Se L é a linguagem a ser traduzida para a linguagem da máquina M, ou seja, se o projeto é construir um compilador da linguagem L que gere um código-objeto executável no hardware da máquina M, é possível construir um compilador passível de ser executado diretamente na máquina M, ou, alternativamente, um que opere em outra máquina - M' - , dita máquina hospedeira.

Outra possibilidade, muito em uso atualmente, consiste em construir um compilador que traduza o programa-fonte para uma linguagem de máquina que, embora não esteja fisicamente disponível como hardware, é virtualizada com a ajuda de um programa que, de alguma forma, reproduza a funcionalidade dessa máquina, em substituição a seu hardware.

No primeira caso, o compilador é chamado autorresidente, pois reside (é executado) na própria máquina que executa os programas por ele traduzidos.

No segundo, o compilador é chamado de compilador cruzado (cross-compiler) quando gera um código a ser executado em outra máquina.

Suponhamos que L’ é uma linguagem para a qual se dispõe de um bom compilador, e que será por isso usada para a codificação do novo compilador, qualquer que seja o esquema adotado para o seu desenvolvimento.

Um compilador é chamado autocompilável sempre que a linguagem em que foi desenvolvido (L') coincidir com a própria linguagem L, aquela que o compilador deve ser capaz de traduzir.

José Neto, João. (2016). Introdução à Compilação. 2ª edição. Rio de Janeiro: Elsevier. 307 páginas.