Métodos de implementação de linguagens Kellen Pinagé Sumário Métodos de implementação de linguagens Compilação Interpretação pura Híbrido Métodos de implementação de linguagens Principais componentes de um computador: memória interna e processador Memória interna – usada para armazenar programas e dados Processador – conjunto de circuitos que garante a realização de um conjunto de operações primitivas, ou de instruções de máquina. Linguagem de máquina do computador – conjunto de macroinstruções Métodos de implementação de linguagens Arquitetura (resumida) Memória (armazena instruções e dados) resultado das operações instruções Processador Métodos de implementação de linguagens Sistema operacional - um grande conjunto de programas Fornece primitivas de nível mais alto do que as linguagens de máquina Gerenciamento de recurso do sistema Operações de entrada e saída Gerenciamento de arquivos Outras... Sistemas de implementação de linguagens se comunicam com o sistema operacional Métodos de implementação de linguagens Camadas Compilador C Compilador Ada Interpretador LISP Sistema Operacional Interpretador de macroinstruções Métodos de implementação de linguagens Um programa escrito em uma linguagem de programação precisa ser traduzido para a linguagem de máquina para ser executado Necessário um programa (ou conjunto de programas) que receba como entrada o código-fonte e gere o código traduzido Três métodos gerais de implementação de linguagens de programação Compilação Interpretação pura Híbrido Compilação O processo de compilação efetua a tradução integral do programa fonte para o código de máquina Uma vez traduzido, o programa em linguagem de máquina pode ser executado diretamente Fonte Compilação Linguagem de máquina Execução Compilação Esse método tem a vantagem de uma execução de programa muito rápida Não necessita fazer qualquer tradução durante a execução Boa parte das verificações de erros já pode ser efetuada durante a tradução O tradutor tem mais liberdade para realizar otimizações na geração do código executável Requer apenas o código executável para que o programa rode Compilação Desvantagens Não portabilidade do código executável para máquinas com arquitetura diferenciada daquela na qual ele foi compilado Ex.: um programa em C compilado sobre o Linux não é executado sobre o Windows e vice-versa Depuração Não guarda referências ao texto do código-fonte – sem indicação da variável envolvida no erro ou da linha correspondente Obs: Existem sistemas de desenvolvimento de programas que permitem a depuração de programas compilados Interpretação pura No processo de interpretação pura, um programa interpretado age como um simulador de um computador virtual que entende as instruções da linguagem de programação Cada instrução do fonte é traduzida para a linguagem de máquina quando necessita ser executada Imediatamente após a tradução, o código é executado Tradução e execução podem ser vistas como um processo único Interpretação pura Fonte Interpretação Linguagem de máquina Execução Interpretação pura Vantagem Facilidade de depuração, pois as mensagens de erro podem se referir diretamente ao código-fonte Desvantagem Execução muito mais lenta Necessidade de o interpretador decodificar comandos complexos de uma linguagem de alto nível, verificar erros do programa e gerar código em linguagem de máquina durante a própria execução do programa Exemplos: LISP, APL, JavaScript Híbrido Processo que combina tanto a execução eficiente quanto a portabilidade de programas pela aplicação combinada dos dois métodos anteriores Existência de um código intermediário mais fácil de ser interpretado e, ao mesmo tempo, não específico de uma plataforma Dividido em duas etapas: compilação para um código intermediário e interpretação desse código Híbrido Fonte Compilação Código intermediário Interpretação Linguagem de máquina Execução Híbrido Embora a execução seja mais lenta que o código compilado, a interpretação do código intermediário é muito mais rápida que a interpretação pura do código-fonte Instruções do código intermediário são muito mais simples que as do código-fonte Maior parte das verificações de erro é realizada já na etapa de compilação Como o código intermediário não é específico para uma plataforma, os programas já compilados podem ser portados para diferentes plataformas, bastando que exista um interpretador do código intermediário instalado Híbrido Exemplo: Java Código intermediário é chamada de bytecode O interpretador de bytecode é a JVM (Java Virtual Machine) Cada plataforma necessita possuir sua própria JVM para que o programa em bytecode possa ser executado Bibliografia SEBESTA, R. W. Conceitos de Linguagens de Programação. 5ª. Edição. Editora Bookman, 2003. VAREJÃO, Flávio. Linguagem de Programação. Editora Campus. 2004.