Fase vs aprovação no compilador
Em geral, o compilador é um programa de computador que lê um programa escrito em um idioma, chamado de idioma de origem, e o converte em outro idioma, chamado de idioma de destino. Tradicionalmente, o idioma de origem era um idioma de alto nível, como C ++, e o idioma de destino, um idioma de baixo nível, como a linguagem Assembly. Portanto, em geral os compiladores podem ser vistos como tradutores que traduzem de um idioma para outro. Pass e Phase são dois termos frequentemente usados com compiladores. O número de passagens de um compilador é o número de vezes que ele passa pela fonte (ou alguma forma de representação dele). Um compilador é dividido em partes para facilitar a construção. A fase é frequentemente usada para chamar uma parte independente única de um compilador.
O que é um passe em um compilador?
Uma maneira padrão de classificar compiladores é pelo número de "passes". Geralmente, a compilação é um processo relativamente intensivo em recursos e, inicialmente, os computadores não tinham memória suficiente para armazenar um programa que fazia o trabalho completo. Devido a essa limitação de recursos de hardware nos primeiros computadores, os compiladores foram divididos em subprogramas menores que faziam seu trabalho parcial revisando o código-fonte (fazendo uma "passagem" sobre a fonte ou outra forma) e analisando , transformações e tarefas de tradução separadamente. Portanto, dependendo dessa classificação, os compiladores são identificados como compiladores de uma ou várias passagens.
Como o nome sugere, os compiladores de uma passagem são compilados em uma única passagem. É mais fácil escrever um compilador de uma passagem e eles também executam mais rapidamente que os compiladores de várias passagens. Portanto, mesmo no momento em que você tinha limitações de recursos, os idiomas foram projetados para que pudessem ser compilados em uma passagem (por exemplo, Pascal). Por outro lado, um compilador multipass típico é composto de vários estágios principais. O primeiro estágio é o scanner (também conhecido como analisador lexical). O scanner lê o programa e o converte em uma sequência de tokens. O segundo estágio é o analisador. Ele converte a sequência de tokens em uma árvore de análise (ou uma árvore de sintaxe abstrata), que captura a estrutura sintática do programa. A próxima etapa é a que interpreta a semântica da estrutura sintática. Os estágios de otimização de código e o estágio final de geração de código seguem este.
O que é uma fase em um compilador?
O termo fase geralmente surge quando você fala sobre a construção do compilador. Inicialmente, os compiladores eram todas as partes simples de um software monolítico escrito por uma pessoa para a compilação de uma linguagem simples. Mas quando o código-fonte do idioma a ser traduzido se torna complexo e grande, o compilador foi dividido em várias fases (relativamente independentes). A vantagem de ter diferentes fases é que o desenvolvimento do compilador pode ser distribuído entre uma equipe de desenvolvedores. Além disso, melhora a modularidade e a reutilização, permitindo que as fases sejam substituídas por outras aprimoradas ou fases adicionais (como otimizações adicionais) sejam adicionadas ao compilador. O processo de dividir a compilação em fases foi introduzido pelo PQCC (Projeto de Compilador-Compilador de Qualidade da Produção) da Carnegie Melon University. Eles introduziram os termos front end, middle end e back end. A maioria dos compiladores possui pelo menos duas fases. Mas geralmente, back-end e front-end encapsulam essas fases.
Qual é a diferença entre Phase e Pass no Compiler?
Phase e Pass são dois termos usados na área de compiladores. Uma passagem é uma única vez que o compilador passa (passa por) o código-fonte ou alguma outra representação dele. Normalmente, a maioria dos compiladores tem pelo menos duas fases chamadas front-end e back-end, enquanto elas podem ser de uma passagem ou de várias passagens. A fase é usada para classificar os compiladores de acordo com a construção, enquanto a passagem é usada para classificar os compiladores de acordo com a forma como eles operam.