Fase vs passagem no compilador
Em geral, compilador é um programa de computador que lê um programa escrito em uma linguagem, que é chamada de linguagem de origem, e o traduz para outra linguagem, que é chamada de linguagem de destino. Tradicionalmente, a linguagem de origem era uma linguagem de alto nível, como C ++, e a linguagem de destino era uma linguagem 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. Passar e Fase são dois termos frequentemente usados com compiladores. Número de passagens de um compilador é o número de vezes que ele passa pelo código-fonte (ou alguma forma de representação dele). Um compilador é dividido em partes para a conveniência de construção. A fase é freqüentemente usada para chamar uma única parte independente de um compilador.
O que é uma passagem em um compilador?
Uma maneira padrão de classificar os compiladores é pelo número de “passes”. Normalmente, a compilação é um processo relativamente intensivo de recursos e, inicialmente, os computadores não tinham memória suficiente para armazenar o programa que fazia o trabalho completo. Devido a esta limitação de recursos de hardware nos primeiros computadores, os compiladores foram divididos em subprogramas menores que fizeram seu trabalho parcial revisando o código-fonte (fez uma "passagem" sobre o código-fonte ou alguma outra forma dele) e realizaram uma análise, 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 também executam mais rápido do que os compiladores de várias passagens. Portanto, mesmo no momento em que você tinha limitações de recursos, as linguagens foram projetadas para que pudessem ser compiladas em uma passagem (por exemplo, Pascal). Por outro lado, um compilador multipasso típico é composto de vários estágios principais. O primeiro estágio é o scanner (também conhecido como analisador léxico). Scanner lê o programa e o converte em uma string de tokens. O segundo estágio é o analisador. Ele converte a string de tokens em uma árvore de análise (ou uma árvore de sintaxe abstrata), que captura a estrutura sintática do programa. O próximo estágio é o 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 isso.
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 peças simples de software único e monolítico escrito por uma pessoa para a compilação de uma linguagem simples. Mas quando o código-fonte da linguagem a ser traduzida 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 que fases adicionais (como otimizações adicionais) sejam adicionadas ao compilador. O processo de divisão da compilação em fases foi introduzido pelo PQCC (Production Quality Compiler-Compiler Project) na Carnegie Melon University. Eles introduziram os termos front end, middle end e back end. A maioria dos compiladores tem pelo menos duas fases. Mas, normalmente, o back-end e o front-end encapsulam essas fases.
Qual é a diferença entre Phase e Pass in Compiler?
Phase e Pass são dois termos usados na área de compiladores. Uma passagem é uma única vez que o compilador passa por cima (examina) 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, embora possam ser de uma ou várias passagens. Phase é usado para classificar compiladores de acordo com a construção, enquanto pass é usado para classificar compiladores de acordo com sua operação.