Aula 16 Arquitetura de Computadores 12/11/2007 Universidade do Contestado UnC/Mafra Curso Sistemas de Informação Prof. Carlos Guerber COMPILADORES E INTERPRETADORES Um compilador transforma o código fonte (da linguagem que você está programando) em um código em que o computador entenda. Já um interpretador, transforma um código fonte em código que só ele (o programa que você está utilizando para escrever o código) entende. Assim, quando um programa interpretado for iniciado, ele necessita de uma DLL para poder rodar, que irá traduzir esse código para uma linguagem que o computador entenda. Para melhor compreensão, vejamos um exemplo bem simples. Imagine que você trabalha dentro do computador. O computador só entende instruções em Inglês, mas o código fonte, que o programador digitou, está totalmente em Português. Suponhamos que o código digitado é: "Ele é o meu chefe". Um compilador traduziria esse código em Português para Inglês, e o programa ficaria assim: "He is my boss". Já um Interpretador faria o inverso. Ele traduziria esse código para um jeito que só uma DLL conseguiria entender. O Programa iria sair assim: "Ri is mai bós". Assim, quando o computador precisar usar este programa, ele precisaria chamar um Intérprete (no caso a DLL) para ditar para ele o que está escrito na linguagem interpretada. É isso que ocorre no Visual Basic por exemplo. EXECUÇÃO DE PROGRAMAS Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador. A primeira e mais primitiva linguagem de computador é a própria linguagem máquina (0 s e 1 s).
Um programa era difícil, longo e principalmente caro de o construir e. era também difícil de ser entendido por outros programadores. Essa complexidade levou è necessidade de desenvolver novas técnicas e ferramentas. COMPILADOR Um compilador tem a finalidade de converter uma linguagem Linguagem Fonte de fácil escrita e leitura para os programadores, numa linguagem Linguagem alvo ou objeto que possa ser executada pelas máquinas. O código executável gerado pelo compilador é dependente do sistema operacional e da linguagem de máquina para o qual o código fonte foi traduzido. A enorme variedade de compiladores existentes é bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo são também muito variadas. Programa Fonte for (i=0;i<=10, i++) printf(%d, i); em linguagem de alto nível Compilador Programa Objeto 01000001 10110010 11110010 01001110 (em linguagem de máquina)
Podemos dividir o processo de compilação em duas fases: Análise: Parte o programa fonte em peças constituintes e cria uma representação intermediaria do programa fonte. Est a dividida em: 1. Análise Léxica; 2. Análise Sintática; 3. Análise Semântica. Síntese: Constrói o desejado programa alvo (código de máquina) a partir da representação intermediaria. Se divide em: Geração do Código Otimização do Código 1. Análise Léxica: é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador) e produzir uma seqüência de símbolos chamados símbolos léxicos (lexical tokens), ou somente "símbolos" (tokens), que podem ser manipulados mais facilmente pelo compilador. A Análise Léxica é a forma de verificar determinado alfabeto. Quando analisamos uma palavra, podemos definir através da análise léxica se existe ou não algum caracter que não faz parte do nosso alfabeto, ou um alfabeto inventado por nós. O analisador léxico é a primeira etapa de um compilador, logo após virá a análise sintática. 2. Análise Sintática: é o processo de analisar uma seqüência de entrada (lida de um arquivo de computador ou do teclado) para determinar sua estrutura gramatical segundo uma determinada gramática formal. Essa análise faz parte de um compilador. A análise sintática transforma um texto na entrada em uma estrutura de dados, em geral uma árvore, o que é conveniente para processamento posterior e captura a hierarquia implícita desta entrada. Através da análise léxica é obtido um grupo de tokens, para que o analisador sintático use um conjunto de regras para construir uma árvore sintática da estrutura.
Em termos práticos, pode também ser usada para decompor um texto em unidades estruturais para serem organizadas dentro de um bloco, por exemplo. 3. Análise semântica: é a terceira fase da compilação onde se verifica os erros semânticos, (por exemplo, uma multiplicação entre tipos de dados diferentes) no programa-fonte (código-fonte) e coleta as informações necessárias para a próxima fase da compilação que é a geração de programa-objeto (código objeto). FASES DE UM COMPILADOR
INTERPRETADOR Interpretadores são programas de computador que lêem um código fonte de uma linguagem de programação e os convertem em código executável. Seu funcionamento pode variar de acordo com a implementação. Em muitos casos o interpretador lê linha-a-linha e converte em código objeto à medida que vai executando o programa. Linguagens interpretadas são mais dinâmicas por não precisarem escrever-compilar-testar-corrigir-compilartestar-distribuir, e sim escrever-testar-corrigir-escrever-testar-distribuir. Mas existem também linguagens que funcionam como interpretadores e compiladores, como: C, Python, BASIC, entre outros. Exemplo de linguagens interpretadas: BASIC Bash C# Perl PHP Python Euphoria Forth JavaScript Logo MUMPS Ruby O interpretador traduz o código linha a linha. O código fonte não é totalmente traduzido antes de ser executado. Não existem fases distintas nem se produz código intermediário. Passa o tempo todo a ler e a traduzir código. Vantagens Execução mais rápida Desvantagens Várias etapas de tradução Compiladores Permite estruturas de Programação final é maior, programação mais completas necessitando mais memória para a sua execução
Permite a optimização do Processo de correcção de código fonte. erros e depuração é mais demorado Depuração do programa é Execução do programa é mais simples mais lenta Consome menos memória Estruturas de dados Interpretadores demasiado simples Resultado imediato do Necessário fornecer o programa ou rotina programa fonte ao utilizador desenvolvida