Veja como dividir os requisitos do compilador para vários idiomas e máquinas usando uma linguagem intermediária:
Entendendo os componentes *
front end (compilador): Esta parte do compilador lê o código -fonte em uma linguagem de programação específica e a traduz em uma representação intermediária (IR). Você precisará de um front -end para cada linguagem de programação que deseja apoiar.
* idioma intermediário (IR): Esta é uma linguagem comum que serve como a ponte entre as extremidades da frente e as extremidades traseiras. Foi projetado para ser independente da máquina.
*
back -end (compilador): Esta parte do compilador pega o IR e gera código de máquina para uma máquina de destino específica. Você precisará de um back -end para cada arquitetura da máquina que deseja suportar.
cálculo *
Ends de frente: Você precisa de um front -end para cada idioma:
m End Ends
*
Ends finais: Você precisa de um back -end para cada máquina:
n Back finais
Total: Você precisa
m + n compiladores (extremidades frontais e extremidades traseiras).
Exemplo Digamos que você tenha:
*
m =3 linguagens de programação (C ++, Python, Java)
*
n =2 Arquiteturas de máquinas (x86 e braço)
Você precisaria:
*
3 Ends de frente (um para cada idioma)
*
2 Back finais (um para cada arquitetura)
*
Total:5 compiladores
benefícios de uma linguagem intermediária Usar uma linguagem intermediária oferece várias vantagens:
*
REUSIBILIDADE DE CÓDIGO: O código de IR pode ser usado por diferentes extremidades frontais e extremidades traseiras, reduzindo o esforço de desenvolvimento.
*
Portabilidade: O código compilado para o IR pode ser executado em qualquer máquina com um back -end correspondente.
*
Otimização: As otimizações podem ser aplicadas no nível de IR, beneficiando todos os idiomas e máquinas.
Nota importante: A escolha da linguagem intermediária é crucial. Deve ser eficiente, adequado para otimização e ter um ecossistema maduro.