O que é um design de compilador? Tipos, ferramentas de construção, exemplo

O que é um compilador?

Um compilador é um programa de computador que ajuda a transformar o código-fonte escrito em uma linguagem de alto nível em uma linguagem de máquina de baixo nível. Ele traduz o código escrito em uma linguagem de programação para outra linguagem sem alterar o significado do código. O compilador também torna o código final eficiente, otimizado para tempo de execução e espaço de memória.

O processo de compilação inclui mecanismos básicos de tradução e detecção de erros. O processo do compilador passa por análise léxica, sintática e semântica no front-end e geração e otimização de código no back-end.

Compilador

Recursos de compiladores

  • Correção
  • Velocidade de compilação
  • Preservar o significado correto do código
  • A velocidade do código alvo
  • Reconhecer construções de programas legais e ilegais
  • Bom relatório/tratamento de erros
  • Ajuda para depuração de código

Tipos de compilador

A seguir estão os diferentes tipos de compilador:

  • Compiladores de passagem única
  • Compiladores de duas passagens
  • Compiladores Multipass

Compilador de passagem única

Compilador de passagem única
Compilador de passagem única

Em uma única passagem, o código-fonte do compilador se transforma diretamente em código de máquina. Por exemplo, linguagem Pascal.

Compilador de duas passagens

Compilador de duas passagens
Compilador de duas passagens

O compilador de duas passagens é dividido em duas seções, viz.

  1. A parte dianteira: Ele mapeia o código legal em Representação Intermediária (RI).
  2. Processo interno: Ele mapeia o IR na máquina alvo

O método do compilador de duas passagens também simplifica o processo de retargeting. Ele também permite vários front-ends.

Compiladores Multipass

Compiladores Multipass
Compiladores Multipass

O compilador multipass processa o código-fonte ou a árvore sintática de um programa várias vezes. Ele dividiu um programa grande em vários programas pequenos e os processou. Ele desenvolve vários códigos intermediários. Todos esses multipass pegam a saída da fase anterior como entrada. Portanto, requer menos memória. Também é conhecido como 'Wide Compiler'.

Tarefas do compilador

As principais tarefas executadas pelo Compilador são:

  • Divide o programa fonte em pedaços e impõe estrutura gramatical a eles
  • Permite construir o programa alvo desejado a partir da representação intermediária e também criar a tabela de símbolos
  • Compila o código-fonte e detecta erros nele
  • Gerencie o armazenamento de todas as variáveis ​​e códigos.
  • Suporte para compilação separada
  • Leia, analise todo o programa e traduza para algo semanticamente equivalente
  • Traduzindo o código-fonte em código-objeto dependendo do tipo de máquina

História do Compilador

Um marco importante da história do compilador é o seguinte:

  • A palavra “compilador” foi usada pela primeira vez no início dos anos 1950 por Grace Murray Hopper.
  • O primeiro compilador foi construído por John Backum e seu grupo entre 1954 e 1957 em IBM.
  • COBOL foi o primeiro linguagem de programação que foi compilado em múltiplas plataformas em 1960
  • O estudo das questões de digitalização e análise foi realizado nas décadas de 1960 e 1970 para fornecer uma solução completa.

Etapas para sistemas de processamento de linguagem

Antes de conhecer o conceito de compiladores, primeiro você precisa entender algumas outras ferramentas que funcionam com compiladores.

Etapas para sistemas de processamento de linguagem
Etapas para sistemas de processamento de linguagem
  • Pré-processador: O pré-processador é considerado parte do compilador. É uma ferramenta que produz entrada para o Compilador. Ele lida com processamento de macro, aumento, extensão de linguagem, etc.
  • Intérprete: Um intérprete é como um compilador que traduz linguagem de alto nível em linguagem de máquina de baixo nível. A principal diferença entre ambos é que o interpretador lê e transforma o código linha por linha. O compilador lê todo o código de uma vez e cria o código de máquina.
  • Assembler: traduz o código da linguagem assembly em uma linguagem compreensível pela máquina. O resultado de saída do assembler é conhecido como arquivo objeto, que é uma combinação de instruções de máquina, bem como os dados necessários para armazenar essas instruções na memória.
  • Vinculador: o vinculador ajuda você a vincular e mesclar vários arquivos de objeto para criar um arquivo executável. Todos esses arquivos podem ter sido compilados com montadores separados. A principal tarefa de um vinculador é procurar os módulos chamados em um programa e descobrir o local da memória onde todos os módulos estão armazenados.
  • Carregador: O carregador faz parte do sistema operacional, que executa as tarefas de carregar arquivos executáveis ​​na memória e executá-los. Ele também calcula o tamanho de um programa que cria espaço de memória adicional.
  • Compilador cruzado: Um compilador cruzado no design do compilador é uma plataforma que ajuda a gerar código executável.
  • Compilador fonte-a-fonte: Compilador fonte para fonte é um termo usado quando o código-fonte de uma linguagem de programação é traduzido para a fonte de outra linguagem.

Ferramentas de construção de compilador

As ferramentas de construção de compiladores foram introduzidas à medida que as tecnologias relacionadas à informática se espalhavam por todo o mundo. Eles também são conhecidos como compiladores-compiladores, compiladores-geradores ou tradutores.

Essas ferramentas usam linguagem ou algoritmo específico para especificar e implementar o componente do compilador. A seguir estão exemplos de ferramentas de construção de compilador.

  • Geradores de scanner: esta ferramenta usa expressões regulares como entrada. Por exemplo LEX para Unix Operasistema.
  • Mecanismos de tradução direcionados por sintaxe: Estes ferramentas de software ofereça um código intermediário usando a árvore de análise. Tem como objetivo associar uma ou mais traduções a cada nó da árvore de análise.
  • Geradores de analisador: Um gerador de analisador recebe uma gramática como entrada e gera automaticamente código-fonte que pode analisar fluxos de caracteres com a ajuda de uma gramática.
  • Geradores automáticos de código: pega o código intermediário e o converte em linguagem de máquina.
  • Mecanismos de fluxo de dados: esta ferramenta é útil para otimização de código. Aqui, as informações são fornecidas pelo usuário e o código intermediário é comparado para analisar qualquer relação. Também é conhecido como análise de fluxo de dados. Ajuda você a descobrir como os valores são transmitidos de uma parte do programa para outra parte.

Por que usar um compilador?

  • O compilador verifica todo o programa, portanto não há erros de sintaxe ou semântica.
  • O arquivo executável é otimizado pelo compilador, portanto é executado mais rapidamente.
  • Permite criar estrutura interna na memória.
  • Não há necessidade de executar o programa na mesma máquina em que foi construído.
  • Traduza todo o programa em outro idioma.
  • Gere arquivos em disco.
  • Vincule os arquivos em um formato executável.
  • Verifique se há erros de sintaxe e tipos de dados.
  • Ajuda você a aprimorar sua compreensão da semântica da linguagem.
  • Ajuda a lidar com problemas de desempenho de linguagem.
  • Oportunidade para um projeto de programação não trivial.
  • As técnicas usadas para construir um compilador também podem ser úteis para outros propósitos.

Aplicação de compiladores

  • O design do compilador ajuda na implementação completa de linguagens de programação de alto nível.
  • Otimização de suporte para computador ArchiParalelismo de arquitetura.
  • Projeto de novas hierarquias de memória de máquinas.
  • Amplamente utilizado para tradução de programas.
  • Usado com outras ferramentas de produtividade de software.

Resumo

  • Um compilador é um programa de computador que ajuda a transformar o código-fonte escrito em uma linguagem de alto nível em uma linguagem de máquina de baixo nível.
  • Correção, velocidade de compilação e preservação do significado correto do código são algumas características importantes do design do compilador.
  • Os compiladores são divididos em três partes 1) Compiladores de passagem única 2) Compiladores de duas passagens e 3) Compiladores multipass.
  • O “compilador” foi uma palavra usada pela primeira vez no início dos anos 1950 por Grace Murray Hopper.
  • As etapas para o sistema de processamento de linguagem são: Pré-processador, Intérprete, Assembler, Linker/Loader.
  • Ferramentas importantes de construção de compiladores são 1) Geradores de scanner, 2) Sintaxe-3) Mecanismos de tradução direcionada, 4) Geradores de analisador, 5) Geradores automáticos de código.
  • A principal tarefa do compilador é verificar todo o programa, para que não haja erros de sintaxe ou semântica.