ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel...
Transcript of ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel...
CompiladoresIntrodução
Apresentação
▪ Turma Noite
▪ Continuada I – 20/03 1 Ponto
▪ Continuada II – 22/05 1 Ponto
▪ Atividades 1 Ponto
▪ Regimental – 05/06 7 Pontos
▪ Total 10 Pontos
▪ Aulas expositivas teórico-práticas
▪ Exercícios práticos em laboratório
▪ Projeto em dupla
Professor Ariel da Silva Dias - www.arieldias.com
Introdução
▪ Compiladores: uma das principais ferramentas do cientista/engenheiro dacomputação
▪ Técnicas de compilação se aplicam a projetos gerais de programas▪ Editores de texto, sistemas de recuperação de informação, reconhecimento de
padrões, ...
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Introdução
▪ Sintaxe: conjunto de regras que definem a forma da linguagem;
▪ Como as sentenças podem ser formadas como sequências de componentes básicos –palavras;
▪ A sintaxe não revela nada sobre o significado da sentença;
▪ Exemplo:▪ Em C, palavras chaves como while, do, for, if, são palavras da linguagem;
▪ Palavras não são elementares, elas são construídas com caracteres que pertencem a umalfabeto;
▪ Assim, a sintaxe de uma linguagem é definida por dois conjuntos de regras: regras léxicase regras sintáticas.
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Introdução
▪ Será apresentado nos próximos slides a definição de compilador e suas fases deanálise léxica, sintática e semântica
▪ Compreender a sintaxe e o comportamento de um compilador é essencial para obom programador
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Contexto de um compilador
▪ Aquilo que é usualmente designado por um compilador é de fato um conjunto de programas que no seu conjunto formam o compilador;
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Contexto de um compilador
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
▪ Componentes▪ Pré-Processador: processa diretivas; retira os comentários; entre outras tarefas.
▪ Compilador: faz a análise do texto escrito na linguagem fonte e faz a sua transcriçãopara a linguagem destino;
▪ Assembler: faz a transcrição da linguagem intermediária para a linguagem final(máquina);
▪ Loder/Linker: no caso de que se querer um programa executável os “loader/linker”fazem a junção do código máquina produzido pelas anteriores fases a um conjuntode serviços (“run-time routines”) que permitem a criação de um programaindependente
Contexto de um compilador
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Código Fonte
Tokens e Lexemas
Árvore Sintática Abstrata
AST Decorada
Código de Máquina
Ab
stra
ção
Imp
lem
enta
ção
Análise Léxica
Análise SintáticaAnálise Semântica
Código
Nosso objetivo
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
▪ Desenvolver um compilador
int a=2;int b=3;
int c;c=a+b;
In Out
011000100110111100001111
msg
Código Fonte
Compilador
Programa Objeto
ERROS
Definição
▪ Definição: lê um programa em uma linguagem fonte e o traduz em um programa em uma linguagem-alvo (objeto)
▪ Linguagem-fonte: Pascal, C
▪ Linguagem-alvo: linguagem de montagem (assembly), código de máquina
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Antigamente a programação era feita em código de máquina
▪ Programação em linguagem máquina
▪ Rapidez execução versus desenvolvimento complicado
▪ Necessidade de um montador
▪ Não há mágica!
▪ Finalmente, linguagens de mais alto nível
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Primeiros compiladores começaram a surgir no início dos anos 50
▪ Trabalhos iniciais: tradução de fórmulas aritméticas em código de máquina
▪ Compiladores eram considerados programas muito difíceis de construir
▪ Primeiro compilador foi o Fortran (permitia a declaração de identificadores com até 6 caracteres ) ▪ FORmula TRANslation System
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Exemplo de cartão perfurado
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Desde então, técnicas sistemáticas para construção de compiladores foram identificadas
▪ Reconhecimento de cadeias, gramáticas, geração de linguagem
▪ Desenvolvimento de boas linguagens e ambientes de programação
▪ C, C++, linguagens visuais
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Desenvolvimento de programas para produção automática de compiladores
▪ lex, flex
▪ Lex ➔ Gerador Gerador de analisadores analisadores léxicos léxicos (UNIX)
▪ Flex ➔ Gerador de analisadores léxicos (LINUX / Windows)
▪ Entrada: Arquivo de descrição do analisador léxico
▪ Saída: Programa na linguagem “C” que realiza a análise léxica
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Histórico
▪ Com isso, tornou-se uma área de grande importância:
▪ 1957: Fortran – primeiros compiladores para processamento de expressões aritméticas e fórmulas
▪ 1960: Algol – primeira definição formal de linguagem, com gramática na forma normal de Backus (BNF), estruturas de blocos, recursão, etc.
▪ 1970: Pascal – tipos definidos definidos pelos usuários usuários
▪ 1985: C++ – orientação a objetos, exceções
▪ 1995: Java – compilação instantânea (traduz bytecodes para código de máquina e executa), melhorando o tempo e execução do programa. Portabilidade
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Compilador e Interpretador
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Compilador, Interpretador e Máquina Virtual
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Compilador
Interpretador
Compilador Máquina Virtual
Programa FonteProg. Objeto Saída
Entrada de Dados
Programa Fonte
Entrada de Dados
Saída
Programa Fonte
Cód. Intermediáriobytecodes
Saída
Entrada de Dados
Pascal, C
PHP, JavaScript
Java
▪ A compilação divide-se em duas fases:
▪ 1) Análise (Front-End)
▪ Cria representações intermediárias do programa (subdivisões)
▪ Verifica presença de certos tipos de erros
▪ 2) Síntese (back-end)▪ Constrói o programa destino a partir das representações intermediárias
Processo de compilação
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
▪ A compilação divide-se em duas fases:
▪ 1) Análise (Front-End)
▪ Cria representações intermediárias do programa (subdivisões)
▪ Verifica presença de certos tipos de erros
▪ 2) Síntese (back-end)▪ Constrói o programa destino a partir das representações intermediárias
Processo de compilação
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
int a=2;int b=3;
int c;c=a+b;
In Out
011000100110111100001111
msg
Código Fonte
Compilador
Programa Objeto
ERROSANÁLISE SÍNTESE
Processo de compilação
▪ 1) Análise
▪ 1.1) Análise léxica
▪ Organiza caracteres de entrada em grupos, chamados tokens
▪ Erros: tamanho máximo da variável excedido, caracteres inválidos.
▪ 1.2) Análise sintática
▪ Organiza tokens em uma estrutura hierárquica
▪ Erros: falta de (, ), =, identificador inválido...
▪ 1.3) Análise semântica
▪ Checa se o programa respeita regras básicas de consistência
▪ Erro: tipos inconsistentes ➔ atribuir uma string em uma variável inteira
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Processo de compilação
▪ Vejamos um exemplo, seja a seguinte instrução de atribuição:
▪ posicao = inicial + incremento * 60
▪ Na análise semântica verifica a validade da frase no que diz respeito aos tipos dasentidades utilizadas. Por exemplo, se um dos identificadores presentes na expressãoé do tipo real, então é necessário converter 60 para a sua representação real:
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Gestão de erros
▪ Trata-se de detectar os erros enviando uma mensagem apropriada para outilizador: local do erro; tipo do erro; causa provável;
▪ É importante tentar recuperar do erro automaticamente de forma a podercontinuar a tarefa de compilação até ao máximo possível;
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Descrição gráfica das fases
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda
Referências
▪ SEBESTA, Robert W. Conceitos de linguagens de programação. 9ª ed. PortoAlegre: Bookman, 2011. 792 p. ISBN 978-85-7780-791-8.
▪ Notas de aula – Professora Isabel Harb Manssour
Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda