Prévia do material em texto
Compilação x interpretação Independentemente da arquitetura de computadores, e podemos tomar como base o modelo da arquitetura de Von Newmann, tanto o processo de compilação quanto o processo de interpretação são possíveis. É fato que programadores de computadores ficam em dúvidas quanto à diferenciação da compilação e da interpretação de programas. Muitas das vezes, isso ocorre por falta de conhecimento aprofundado acerca da arquitetura de computadores e de como os programas são executados nas máquinas. Tomando como base as etapas de um ciclo de máquina apresentadas por Corrêa (2016), faça a representação gráfica dos dois processos, compilação e interpretação, explicando, no final, a real diferença existente entre eles. O primeiro computador foi construído no século XX, e passou por várias modificações e melhorias, e são historicamente categorizados como gerações, até o computador VLSI que surgiu em 1980 e são utilizados até hoje (CORRÊA, 2016). O computador é um sistema complexo formado por milhões de componentes. De forma resumida, a função do computador é realizar o controle, processamento, armazenamento e entrada e saída dos dados. Os componentes estruturais principais dos computadores podem ser definidos como a unidade central de processamentos (CPU), memória principal, entrada e saída (E/S) e a interconexão do sistema (CORRÊA, 2016). Para Corrêa (2016), o CPU pode ser considerado como o cérebro do computador, nele são agrupados quatro componentes principais: unidade de controle, que é responsável pelo controle e operação da CPU, unidade aritmética e lógica que processa os dados do computador, os registradores que oferece o armazenamento à CPU, e a interconexão do sistema que realiza a comunicação entre a unidade de controle, ULA e registradores. O modelo de computador de Van Neumann é a base utilizada em quase todos os computadores digitais. Segundo Stallings (2017), este modelo é caracterizado pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória em que os dados, podendo, assim, manipular tais programas. Essa arquitetura é um projeto-modelo de um computador digital de programa armazenado que utiliza uma unidade de processamento (CPU) e uma de armazenamento (memória) para comportar, respectivamente, instruções e dados. O programa é um conjunto de instruções com a finalidade de gerar dados de saída a partir de dados de entrada. O computador utiliza programas para processar os dados. O CPU para conseguir executar estes programas utiliza ciclos de máquina, que pode ter três fases: busca, decodificação e execução. Na fase de busca, o sistema copia a próxima instrução no registrador de instruções da CPU, o endereço da instrução a ser copiada permanece no registrador. Essa instrução armazenada no registrador é decodificada, pela unidade de controle, em código binário para uma operação que o sistema vai realizar. Por último na fase de execução a ordem da tarefa é enviada pela unidade de controle para um componente da CPU (FOROUZAN; MOSHARRAF, 2011, p. 108 apud CORRÊA, 2016 p. 43). Objetivo Apresentar as representações gráficas dos processos de compilação e interpretação; relatar as principais diferenças entre os dois processos. Desenvolvimento Para que os humanos consigam designar instruções como, somar, subtrair etc, para o computador de forma mais amigável, têm-se a linguagem de programação, de forma que as solicitações dos humanos sejam traduzidas em linguagem de máquina e, desta forma os computadores consigam interpretar os comandos passados aos mesmos (SILVA,2017). Os interpretadores e compiladores são, essencialmente, programas cuja saída (ou output) não está estabelecido à partida, o seu resultado é definido através de um programa dado como input, escrito numa linguagem de programação (SECO, 2013). Os dados de entrada de um compilador e de um interpretador é um programa expresso numa linguagem de programação (linguagem fonte). Geralmente, a linguagem fonte é um programa expresso por um texto, podendo ser expresso, também, de outras formas (SECO, 2013). Processo de compilação Os compiladores são responsáveis por transformar o código de uma linguagem fonte, geralmente de alto nível, para a linguagem objeto, geralmente de baixo nível. Os compiladores são formados por cinco unidades, que são o analisador léxico, o analisador sintático, o analisador semântico, o gerador de código e o otimizador (JÚNIOR, 2003). O analisador léxico ou scanner é responsável pela identificação dos vários símbolos existentes no código fonte de um programa, além de realizar uma varredura no código fonte em busca de erros de grafia no programa. O analisador sintático ou parser, verifica se a ordem em que aparecem os tokens é gramaticalmente correta. O produto lógico de um parser é uma árvore sintática abstrata. O analisador semântico é encarregado de fazer a análise semântica utilizando a tabela de símbolos, ou correção de contexto, do que estiver escrito no código fonte do programa. Ele atua, entre outras coisas, para verificar se as variáveis foram declaradas antes de serem usadas, avalia as compatibilidades de funções, atribuições etc. Já o gerador de código é o primeiro componente de um compilador que depende da máquina em que a execução vai ser realizada, e sua função consiste em gerar sequências de instruções de máquina sempre que certas estruturas forem definidas após a análise semântica. Por último, o otimizador tem o papel de modificar o código gerado na tentativa de obter um melhor desempenho ou quanto a espaço ou quanto a velocidade de execução. A otimização pode ser feita em dois momentos, um antes de se realizar a geração do código (portanto mais complexa e eficiente) e outro após a geração do código (logo mais simples, porém menos eficiente) (FREITAS, 2006). Na figura 1 podemos visualizar de forma ilustrativa o processo de compilação. Figura 1 - Processo de compilação. Fonte - Autoria própria. Processo de interpretação De acordo com ...(): Interpretador é uma espécie de tradutor de linguagens de alto nível que executa diretamente o código fonte para a máquina sem a criação de código intermediário, eliminando uma etapa que o diferencia dos compiladores, ou seja, ao invés de produzir um programa alvo como uma tradução, um interpretador executa diretamente na máquina as operações especificadas no programa fonte nas entradas fornecidas pelo usuário. No processo de interpretação cada comando do código fonte é transformado em uma ou mais instruções do código executável. Logo, esse processo é repetido até a última linha de código a ser executado. Em vez de traduzir de uma vez o programa fonte para então executá-lo, são traduzidas apenas pequenas unidades básicas do programa para executá-las imediatamente (BERTOLINI et al., 2019). De forma ilustrativa, na figura 2 podemos visualizar o fluxo deste processo. Figura 2 – Processo de interpretação. Fonte - Autoria própria. Conclusão Como visto anteriormente, a linguagem de máquina não é nem um pouco amigável para que os humanos consigam designar tarefas aos computadores. Para que a linguagem de programação seja transformada em linguagem de máquina e, assim, conseguirmos realizar operações no computador, temos o tradutor ou compilador e o interpretador dependendo da linguagem utilizada. Assim, enquanto o tradutor ou compilador lê e analisa todo o programa de uma vez e o traduz para linguagem de máquina o interpretador lê o comando linha a linha e executa, e isso torna o processor do interpretador mais lento do que o do compilador. Porém, caso o compilador detecte algum erro ao final da tradução, é preciso reiniciar todo o processo para corrigir o erro, já no interpretador o erro é avisado na hora. Outra diferença é que o compilador cria um programa objeto e o executa e o interpretador não.