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.
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
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
O compilador de duas passagens é dividido em duas seções, viz.
- A parte dianteira: Ele mapeia o código legal em Representação Intermediária (RI).
- 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
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.
- 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.