Product Design, Manufacturing & Innovation Resources
Lar » A estrutura do compilador de três estágios

A estrutura do compilador de três estágios

1980
Programador trabalhando em uma estrutura de compilador de três estágios em um escritório de desenvolvimento de software.

(Imagem gerada apenas para fins ilustrativos)

Um compilador moderno é tipicamente estruturado em três estágios: o front-end, o middle-end e o back-end. O front-end analisa o código-fonte, verifica sua correção e constrói uma representação intermediária (RI). O middle-end realiza otimizações nessa RI. O back-end, então, traduz a RI otimizada em código de máquina alvo para uma arquitetura de CPU específica.

Este design modular de três estágios proporciona uma separação crucial de responsabilidades. O front-end é dependente da linguagem, mas independente da máquina; ele compreende a sintaxe e a semântica de uma linguagem específica, como C++ ou Rust. Sua saída, a Representação Intermediária (IR), é uma estrutura de dados abstrata e agnóstica à máquina, como uma Árvore de Sintaxe Abstrata (AST) ou um Código de Três Endereços. Isso desacopla a linguagem de origem da máquina de destino.

A etapa intermediária é em grande parte independente de linguagem e máquina. Ela recebe a representação intermediária (IR) e aplica uma série de otimizações, como eliminação de código morto, redução de constantes e otimizações de loops. Como opera na IR genérica, essas otimizações complexas podem ser escritas uma única vez e aplicadas a qualquer linguagem que possa ser compilada para essa IR.

Por fim, o back-end é dependente da máquina, mas independente da linguagem. Ele recebe a representação intermediária otimizada e realiza a seleção de instruções, a alocação de registradores e o escalonamento de instruções para gerar código de máquina eficiente para uma arquitetura alvo específica, como x86-64 ou ARM. Essa estrutura possibilita a construção de compiladores que suportam M linguagens e N alvos escrevendo M front-ends e N back-ends, em vez de M*N compiladores individuais. Esse princípio é exemplificado por infraestruturas de compiladores modernas como GCC e LLVM.

UNESCO Nomenclature: 1203
Ciência da Computação

Tipo

Sistema abstrato

Interrupção

Fundamentais

Uso

Uso generalizado

Precursores

  • primeiros projetos de compiladores monolíticos
  • conceito de abstração em engenharia de software
  • desenvolvimento de línguas intermediárias em sistemas primitivos
  • pesquisa sobre software portátil (por exemplo, o sistema de código P)

Aplicações

  • compiladores retargetáveis ​​(ex: GCC, llvm)
  • compilação cruzada para diferentes plataformas de hardware
  • estruturas de otimização independentes de linguagem
  • desenvolvimento de novas linguagens de programação apenas criando uma nova interface
  • Ferramentas de análise estática que operam em representações intermediárias

Patentes:

NA

Ideias de Inovação Potencial

Devido ao tráfego de bots de coleta de dados, atualmente superior a 40 mil por dia, este conteúdo é reservado aos membros da comunidade.
> Login < ou > Registrar < (100% gratuito) para acessar isso, assim como todo o restante do conteúdo e das ferramentas restritas.

Relacionado a: projeto de compiladores, front-end, middle-end, back-end, representação intermediária, IR (representação intermediária), otimização, geração de código, modularidade, GCC, LLVM.

Contexto histórico

A estrutura do compilador de três estágios

1975-06-01
1980
1980
1980
1986-01-01
1990
1990
1973
1980
1980
1980
1982-07-01
1988-06-01
1990
1993

(Caso a data seja desconhecida ou irrelevante, por exemplo, "mecânica dos fluidos", é fornecida uma estimativa aproximada de seu surgimento notável)

Princípios relacionados à invenção, inovação e tecnologia

Imagens em tamanho real e downloads estão disponíveis apenas, 100% gratuitos, para membros registrados.