Tutorial de Design de Compiladores: O que é, Tipos, Ferramentas, Exemplo
O que é um Compilador?
Um compilador é um programa de computador que ajuda a transformar o código fonte escrito numa linguagem de alto nível em linguagem de máquina de baixo nível. Ele traduz o código escrito em uma linguagem de programação para alguma outra linguagem sem alterar o significado do código. O compilador também torna o código final eficiente que é otimizado para o 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 de compilação passa por análise léxica, sintaxe e semântica no front end, e geração e otimização do código no back-end.
Neste tutorial de Design de Compilador, você aprenderá
- O que é um Compilador?
- Features of Compilers
- Types of Compiler
- Tasks of Compiler
- History of Compiler
- Steps for Language processing systems
- Compiler Construction Tools
- Why use a Compiler?
- Application of Compilers
Features of Compilers
- Correctness
- Speed of compilation
- Preserve the correct the meaning of the code
- The speed of the target code
- Recognize legal and illegal program constructs
- Good error reporting/handling
- Code debugging help
Types of Compiler
Following are the different types of Compiler:
- Single Pass Compilers
- Two Pass Compilers
- Multipass Compilers
Single Pass Compiler
![Single Pass Compiler](https://www.guru99.com/images/1/020819_1135_CompilerDes2.png)
In single pass Compiler source code directly transforms into machine code. For example, Pascal language.
Two Pass Compiler
![Two Pass Compiler](https://www.guru99.com/images/1/020819_1135_CompilerDes4.png)
Two pass Compiler is divided into two sections, viz.
- Front end: It maps legal code into Intermediate Representation (IR).
- Back end: It maps IR onto the target machine
The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.
Multipass Compilers
![Multipass Compilers](https://www.guru99.com/images/1/020819_1135_CompilerDes5.png)
O compilador multipass processa o código fonte ou árvore de sintaxe de um programa várias vezes. Ele dividiu um programa grande em vários programas pequenos e os processa. Ele desenvolve múltiplos códigos intermediários. Todos estes multipassos tomam a saída da fase anterior como entrada. Portanto, requer menos memória. Também é conhecido como ‘Compilador Amplo’.
Tarefas do Compilador
Tarefas principais executadas pelo Compilador são:
- Dividir o programa fonte em pedaços e impor estrutura gramatical sobre 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
- Gerir o armazenamento de todas as variáveis e códigos.
- Suporte para compilação separada
- Ler, analisar o programa inteiro, e traduzir para equivalente semanticamente
- Translação do código fonte em código objeto dependendo do tipo de máquina
Histórico do Compilador
P>Ponte importante do histórico do Compilador são os seguintes:
- A palavra “compilador” foi usada pela primeira vez no início dos anos 50 por Grace Murray Hopper
- O primeiro compilador foi compilado por John Backum e seu grupo entre 1954 e 1957 na IBM
- COBOL foi a primeira linguagem de programação que foi compilada em múltiplas plataformas em 1960
- O estudo das questões de digitalização e análise foi prosseguido nos anos 60 e 70 para fornecer uma solução completa
Passos para sistemas de processamento de linguagem
Antes de conhecer o conceito de compiladores, você primeiro precisa entender algumas outras ferramentas que funcionam com compiladores.
![Passos para sistemas de processamento de linguagem](https://www.guru99.com/images/1/020819_1135_CompilerDes6.png)
- Pré-processador: O pré-processador é considerado como uma parte do Compilador. É uma ferramenta que produz input para o Compilador. Lida com processamento de macro, aumento, extensão de linguagem, etc.
- Intérprete: Um intérprete é como o Compilador que traduz linguagem de alto nível para linguagem de máquina de baixo nível. A principal diferença entre ambos é que o intérprete lê e transforma o código linha a linha. O Compilador lê o código inteiro de uma só vez e cria o código da máquina.
- Assembler: Traduz o código da linguagem assembly em linguagem compreensível para a máquina. O resultado de saída do assembler é conhecido como um arquivo objeto que é uma combinação de instruções de máquina assim como os dados necessários para armazenar estas instruções na memória.
- Linker: O linker ajuda-o a ligar e fundir vários ficheiros objecto para criar um ficheiro executável. Todos estes arquivos podem ter sido compilados com assemblers separados. A tarefa principal de um linker é procurar por módulos chamados em um programa e descobrir a localização da memória onde todos os módulos são armazenados.
- Loader: O carregador é uma 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.
- Cross-compiler: Um Cross-compiler no design do compilador é uma plataforma que o ajuda a gerar código executável.
- Compilador de código fonte a fonte: Compilador fonte-a-fonte é um termo usado quando o código fonte de uma linguagem de programação é traduzido para o código fonte de outra linguagem.
- Geradores de Scanner: Esta ferramenta toma expressões regulares como entrada. Por exemplo, LEX para Unix Operating System.
- Motores de tradução direcionada por sintaxe: Estas ferramentas de software oferecem um código intermediário usando a árvore parse. Tem o objetivo de associar uma ou mais traduções com cada nó da árvore parse.
- Geradores de parser: Um gerador de parser toma uma gramática como entrada e gera automaticamente o código fonte que pode analisar fluxos de caracteres com a ajuda de uma gramática.
- Geradores automáticos de código: Pega código intermediário e os converte em linguagem de máquina
- Motores de fluxo de dados: Esta ferramenta é útil para a otimização de código. Aqui, a informação é fornecida pelo usuário e o código intermediário é comparado para analisar qualquer relação. É também conhecida como análise de fluxo de dados. Ela ajuda a descobrir como os valores são transmitidos de uma parte do programa para outra parte.
- Compiler verifica o programa inteiro, para que não haja erros de sintaxe ou semântica
- O arquivo executável é otimizado pelo compilador, por isso é executado mais rápido
- Permite criar uma estrutura interna na memória
- Não há necessidade de executar o programa na mesma máquina em que foi construído
- Traduzir todo o programa em outra língua
- Gerar arquivos no disco
- Ligue os ficheiros para um formato executável
- Verifica erros de sintaxe e tipos de dados
- Ajuda-o a melhorar a sua compreensão da semântica da linguagem
- Ajuda a lidar com problemas de desempenho da linguagem
- Oportunidade para um nãotrivial programming project
- The techniques used for constructing a compiler can be useful for other purposes as well
- Compiler design helps full implementation Of High-Level Programming Languages
- Support optimization for Computer Architecture Parallelism
- Design of New Memory Hierarchies of Machines
- Widely used for Translating Programs
- Used with other Software Productivity Tools
- A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
- Correctness, velocidade de compilação, preservar o significado correto do código são algumas características importantes do projeto do compilador
- O “compilador” foi palavra usada pela primeira vez no início dos anos 50 por Grace Murray Hopper
- Steps for Language processing system are: Pré-processador, Intérprete, Assembler, Linker/Loader
- Ferramentas de construção de compiladores importantes são: 1) geradores de scanner, 2)Syntax-3) motores de tradução dirigida, 4) geradores de parser, 5) geradores automáticos de código
- A tarefa principal do compilador é verificar o programa inteiro, de modo que não haja erros de sintaxe ou semântica
Ferramentas de Construção de Compiladores
Ferramentas de construção de compiladores foram introduzidas como tecnologias relacionadas a computadores espalhadas pelo mundo. Elas também são conhecidas como compiladores, compiladores, geradores ou tradutores.
Estas ferramentas usam linguagem ou algoritmo específico para especificar e implementar o componente do compilador. A seguir estão o exemplo de ferramentas de construção de compiladores.
Por que usar um Compilador?
Application of Compilers
Summary
li>Compilers são divididos em três partes 1) Compiladores Single Pass 2)Compiladores Two Pass, e 3) Compiladores Multipass