anÁlise e complexidade de algoritmos - ariel...

25
Compiladores Introdução

Upload: others

Post on 28-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

CompiladoresIntrodução

Page 2: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programaçã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

Page 3: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 4: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 5: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 6: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 7: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 8: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 9: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 10: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 11: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 12: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 13: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

Histórico

▪ Exemplo de cartão perfurado

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 14: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 15: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 16: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 17: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

Compilador e Interpretador

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 18: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 19: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

▪ 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

Page 20: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

▪ 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

Page 21: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 22: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 23: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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

Page 24: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

Descrição gráfica das fases

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 25: ANÁLISE E COMPLEXIDADE DE ALGORITMOS - Ariel Diasarieldias.com/material/2019-1/COMPILADORES/Aula1n.pdf · 2020-06-05 · SEBESTA, Robert W. Conceitos de linguagens de programação

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