A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

tópicos 01. Compiladores 02. Tradutores 03. Linguagens de Programação

Apresentações semelhantes


Apresentação em tema: "tópicos 01. Compiladores 02. Tradutores 03. Linguagens de Programação"— Transcrição da apresentação:

1

2 tópicos 01. Compiladores 02. Tradutores 03. Linguagens de Programação
itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo de tradução de um código 07. Funcionamento de um compilador 08. Construção de compiladores 09. Ferramentas para construção 10. Outras ferramentas parecidas com compiladores 11. Custo / Benefício do uso de compiladores

3 compilador compilador qual o conceito que você tem?
01 compilador conceito de compilador qual o conceito que você tem? o que fazem os compiladores? que características têm? para que servem? brainstorm compilador

4 tradutor o que é conceitos texto : elemento trabalhado
02 tradutor de um modo geral o que é pode ser pessoa, máquina, programa, etc... efetua conversão entre duas linguagens conceitos texto : elemento trabalhado linguagem : universo conhecido fonte : entrada do tradutor objeto : saída do tradutor

5 tradutor elementos envolvidos conceitos texto linguagem fonte TF LF
02 tradutor de um modo geral elementos envolvidos LO LF TRADUTOR T F T O conceitos texto linguagem fonte TF LF objeto TO LO LF: Linguagem Fonte. É o conjunto de todas as possíveis entradas para o tradutor. É a linguagem que o tradutor conhece e sobre a qual ele vai trabalhar.

6 tradutor elementos envolvidos conceitos texto linguagem fonte TF LF
02 tradutor de um modo geral elementos envolvidos LO LF TRADUTOR T F T O conceitos texto linguagem fonte TF LF objeto TO LO TF: Texto Fonte. Pertence a linguagem fonte. Entrada para o tradutor. É o texto que deve ser convertido.

7 tradutor elementos envolvidos conceitos texto linguagem fonte TF LF
02 tradutor de um modo geral elementos envolvidos LO LF TRADUTOR T F T O conceitos texto linguagem fonte TF LF objeto TO LO LO: Linguagem Objeto. Conjunto de todas as possíveis saídas do tradutor. É a linguagem sobre a qual vão ser gerados os resultados do trabalho de tradução.

8 tradutor elementos envolvidos conceitos texto linguagem fonte TF LF
02 tradutor de um modo geral elementos envolvidos LO LF TRADUTOR T F T O conceitos texto linguagem fonte TF LF objeto TO LO TO: Texto Objeto. Pertence a Linguagem Objeto. Saída do tradutor. É o texto gerado pelo tradutor como conversão do texto fonte fornecido.

9 tradutor características deve gerar um texto correspondente
02 tradutor de um modo geral características deve gerar um texto correspondente mantendo equivalência de significados e mantendo apenas as informações relevantes

10 tradutor A tradução que nos interessa (subconjunto)
02 tradutor para o estudo de compiladores A tradução que nos interessa (subconjunto) feita por programas de computador feita de forma automática entre linguagens de programação Tradutores de um modo geral subconjunto para o estudo de compiladores

11 tradutor Principais tradutores do subconjunto: Montadores Compiladores
02 tradutor para o estudo de compiladores Com a limitação feita no universo dos tradutores temos diversos tradutores que variam de acordo com: os tipos das linguagens envolvidas e a natureza do trabalho realizado. Principais tradutores do subconjunto: Montadores Compiladores Interpretadores Decompiladores Demontadores Tradutores de um modo geral subconjunto para o estudo de compiladores

12 Linguage m de baixo nível
02 tradutor para o estudo de compiladores Montadores Linguagem de entrada é LP de baixo nível Linguagem de saída é LP de máquina Linguage m de baixo nível Linguage m de máquina MONTADOR

13 Linguage m de alto nível
02 tradutor para o estudo de compiladores Compiladores A linguagem objeto do compilador pode ser de alto ou de baixo nível. A linguagem fonte deve ser de alto nível. O código gerado pela compilação será executado posteriormente (e provavelmente inúmeras vezes). Neste outro momento serão fornecidos os dados e saídas particulares a cada execução. Linguage m de alto nível (?) Propicia execução futura COMPILADOR

14 Linguage m de alto nível
02 tradutor para o estudo de compiladores Compiladores Por esta classificação também são considerados como compiladores: filtros e preprocessadores. Filtro: quando o tradutor efetua conversão entre duas linguagens de alto nível muito semelhantes Preprocessador: preparação de um texto para que seja submetido posteriormente a um outro compilador. Linguage m de alto nível (?) Propicia execução futura COMPILADOR

15 (?) Propicia execução futura
02 tradutor para o estudo de compiladores Interpretadores No compilador No interpretador Nos interpretadores não existe texto objeto. A tradução e a execução do código é feita ao mesmo tempo. Não existe tempo de compilação e tempo de execução. (?) Propicia execução futura Dados de entrada Código Executável Gerado Dados de saída Dados de entrada Linguagem alto nível Interpretador Texto fonte Dados de saída

16 tradutor Decompiladores Linguagem de entrada é LP de baixo nível
02 tradutor para o estudo de compiladores Decompiladores Linguagem de entrada é LP de baixo nível Linguagem de saída é LP de alto nível Linguage m de baixo nível Linguage m de alto nível DECOMPILADOR

17 linguagem de programação
03 linguagem de programação O que são Linguagem a ser utilizada como meio de comunicação entre homem e máquina. Para que servem Estabelecer uma linguagem a meio caminho entre a linguagem utilizada pelo homem e linguagem utilizada pela máquina. Capacitar o usuário a ajudar a máquina a resolver problemas de seu interesse.

18 linguagem de programação
03 linguagem de programação A primeira tradução: Do problema para a linguagem de programação Feita pelo homem, Chamada de programação As outras traduções: Da linguagem de programação para a solução a ser executada Feita pela máquina, Uma delas é a compilação

19 histórico de compiladores
04 histórico de compiladores estágio pré-lingual (1940) Programas feitos em linguagem de máquina. Primeiras idéias: Construção de mecanismos para facilitar o entendimento pelo homem destes programas. Conceito de compilador não existia ainda. As máquinas eram programadas pelo código dos programas, mas também por botões, interruptores e plugues. 1944: Konrad Zuze, engenheiro alemão, projetou na Suíça o Plankalkül (LP com declaração de variáveis, valores estrutu-rados, passagem de parâmetros em procedimentos, etc). Não foi implementada. Fim dos anos 40: Herman Goldstine lança os fluxogramas (forma de alto nível para re-presentar programas). Sugestão de John Von Newmann, Adele Goldstine e Arthur Banks. Fim dos anos 40, aparecem implementações do Short Code / Short Order Code (linguagem interpretada e muito simples).

20 histórico de compiladores
04 histórico de compiladores reinado do baixo nível (1950) Computadores passam a ser programados em Assembly. Aplicações envolviam cálculo numérico e muito esforço era feito para converter fórmulas numéricas em instruções Assembly. Para melhorar esta tarefa surgem as primeiras linguagens de alto nível: os Autocodes. Possuíam 26 identificadores (de A a Z) que permitiam a conversão simples de fórmulas. O primeiro compilador real AUTOCODE (máquina existen-te, implementado e em uso) em 1952 por Donald Knuth. Primeiros compiladores. Não existe data exata, nem o nome do inventor, nem local. Vários grupos trabalharam, experimentaram e implemen-taram muitas linguagens ao mesmo tempo. Primeiro grande projeto de linguagem de programação: FORTRAN (“IBM Mathematical FORmula TRANslation System”) em 1954 por John Backus. Envolveu equipe de 18 homens ano.

21 histórico de compiladores
04 histórico de compiladores explodem as linguagens (1960) surgimento de uma série de linguagens de programação, como por exemplo as mais significativas: COBOL, Lisp, Algol 60, BASIC, PL/1. Novas idéias para a época: Dados estruturados (COBOL, PL/1), Recursão (Lisp Algol60), Interação com o usuário (BASIC) e “Big is beautiful” (COBOL e PL/1) Programas “sérios” ainda feitos em assembly

22 histórico de compiladores
04 histórico de compiladores menor dependência da máquina (1970) Palavra de ordem: portabilidade. Surgimento da programação estruturada. Aparecimento de Linguagens estruturadas como: Pascal, Algol 68 (finalizada em 1975) e C. Avanços da tecnologia de compiladores. Linguagem Assembly ainda é muito usada para operações críticas de tempo de resposta.

23 histórico de compiladores
04 histórico de compiladores reduzindo complexidades (1980) Redução na complexidade da programação e do gerenciamento da programação, obstáculo para a construção e o funcionamento dos sistemas. Linguagens clássicas como Ada e Modula-2 passam a ser acompanhadas de sistemas gerenciadores como Make e APSE (Ada Programming Suport Environment). Novas maneiras de se pensar em programação: Smalltalk (programação orientada a objeto) e Miranda (programação funcional). Grande parte do código da sonda Giotto que explorou o cometa Halley em 14 de março de 1986 foi feito em assembly.

24 histórico de compiladores
04 histórico de compiladores paralelismo e distribuição (1990) Inclusão sistemática destes conceitos em uma linguagem: occam, extensões de paralelismo em C++ e novas linguagens: Hermes, Linda, Orca, SR, Ada 9X. Introdução do hardware RISC (com operações não intuitivas) pode finalmente decretar o fim do uso da linguagem assembly.

25 histórico de compiladores
04 histórico de compiladores componentes e web (2000) Novas versões das linguagens comerciais prevêem cada vez mais inclusão de conceitos de orientação a objeto. Desenvolvimento em “n” camadas. Suporte e integração ao ambiente web. Aplicações podem estar tratando um grande volume de transações. Necessidade de otimizações de recursos.

26 histórico de compiladores
04 histórico de compiladores Xxx (2010) xxx

27 histórico de compiladores
04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 Primeiros compiladores Programas difíceis de se construir. Sem técnicas, conceitos, documentação, máquina, etc. Programas autônomos. Sem estrutura uniforme. Operação especifica e manual. Transformações sucessivas em formas intermediárias melhoradas para se chegar ao executável. Compiladores atuais Linguagens poderosas. Ambientes de programação sofisticados. Ferramentas automáticas. Integrados com outros elementos do sistema. Operação simplificada e relativamente padrão.

28 histórico de compiladores
04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 Primeiros compiladores Programas difíceis de se construir. Sem técnicas, conceitos, documentação, máquina, etc. Programas autônomos. Sem estrutura uniforme. Operação especifica e manual. Transformações sucessivas em formas intermediárias melhoradas para se chegar ao executável. Compiladores atuais Linguagens poderosas. Ambientes de programação sofisticados. Ferramentas automáticas. Integrados com outros elementos do sistema. Operação simplificada e relativamente padrão. O que se verificou número reduzido de componentes básicos a serem utilizados funções padronizadas. O que provocou as mudanças: Acúmulo de experiências. Observação dos resultados. Desenvolvimento de teorias e técnicas relacionadas a compiladores. Desejo/necessidade/vontade dos usuários.

29 classificações Por paradigma Por paradigma geral Por geração
05 classificações classificação das linguagens Por paradigma Por paradigma geral Por geração Por dependência de máquina

30 classificações Conceito de paradigma
05 classificações por paradigma Conceito de paradigma Conjunto de métodos coerentes que foram usados no tratamento de um domínio específico de problemas. Pelos quatro maiores paradigmas Linguagem imperativa Linguagem orientada a objeto Linguagem de programação funcional Linguagem de programação em lógica

31 classificações Outra classificação pela forma de pensar
05 classificações por paradigma geral Outra classificação pela forma de pensar Operacionais ou Não declarativas Onde você determina COMO resolver o problema Declarativas Onde você determina O QUE quer resolver

32 classificações Primeira Geração linguagens de máquina
05 classificações por geração Primeira Geração linguagens de máquina Segunda Geração linguagens Assembly Terceira Geração linguagens procedurais Quarta Geração linguagens de Aplicação Quinta Geração técnicas de IA, linguagens de inferência Sexta Geração redes Neurais

33 classificações p/dependência de máquina Linguagem de baixo nível (LLL)
05 classificações p/dependência de máquina Linguagem de baixo nível (LLL) Linguagem de Máquina (ML) Linguagem de Montagem (AL), Exemplo: Assembly, Autocode, Bytecode Linguagem de Alto Nível (HLL) ou linguagem orientada a Usuario (UOL) Exemplo: FORTRAN, Algols, Pascal, C, Ada Linguagem de Altíssimo Nivel (VHLL) Exemplo: SETL, Prolog, Miranda Ling. orientada a problemas específicos (POL)

34 classificações p/dependência de máquina
05 classificações p/dependência de máquina Linguagem orientada a Problemas Específicos Linguagem de Altíssimo Nível Linguagem de Alto Nível Linguagem de Máquina

35 processo de tradução visão geral 06 exemplo: PREPROCESSADOR 1
Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto exemplo: Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

36 processo de tradução preprocessadores
06 processo de tradução preprocessadores Produzem dados de entrada para os compiladores Realizam: processamento de macros inclusão de arquivos (header files) preprocessadores racionais (flow-of-control, data structures) extensões de linguagem (Equel) É um módulo opcional Podem existir vários encadeados até se chegar ao compilador Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

37 processo de tradução o último compilador do processo de tradução
06 processo de tradução compiladores o último compilador do processo de tradução os proprocessadores também são compiladores produzem textos em linguagem de montagem Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

38 processo de tradução montadores (assemblers)
06 processo de tradução montadores (assemblers) Embutido na maior parte dos compiladores comerciais, embora não seja parte da compilação. Trabalha sobre linguagem assembly Implementação mais comum através dos montadores de duas passagens passo: leitura do código fonte primeiro passo procura todos os identificadores e monta tabela de símbolos separada do compilador segundo passo monta linguagem de máquina relocável. Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

39 processo de tradução loader/linkeditores
06 processo de tradução loader/linkeditores Resolve referências de dados e instruções entre os vários módulos que devem compor o código executável. Monta um código absoluto de vários módulos em linguagem de maquina relocável (várias compilações ou bibliotecas prontas) Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

40 processo de tradução exemplo de tradução (1/3)
06 processo de tradução exemplo de tradução (1/3) Suponha a expressão x = 2y + 7 (texto fonte) Precisa ser preparada Depois compilada É transformada em linguagem assembly de uma máquina hipotética mov y,R1, mul #2,R1, add #7,R1, mov R1,x Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

41 processo de tradução exemplo de tradução (2/3) formato da instrução
06 processo de tradução exemplo de tradução (2/3) formato da instrução código da operação, registrador, operador (endereco ou absoluto), forma de endereçamento códigos de operação código das operações: load 0001, store 0100, mul 0010, add 0011 formas de endereçamento 00: na instrução 01: endereçamento direto 10: endereçamento indireto endereço ocupa quatro bytes Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

42 processo de tradução exemplo de tradução (3/3)
06 processo de tradução exemplo de tradução (3/3) Transformação em código de máquina relocável * * transformação em código de máquina absoluto endereço de carga refazer endereços relocaveis Texto fonte preparado 1 PREPROCESSADOR 1 Texto fonte bruto Texto fonte preparado 2 PREPROCESSADOR 2 Texto em linguagem de montagem COMPILADOR Texto em ling máquina relocável MONTADOR Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

43 funcionamento compilador
07 funcionamento compilador modelo análise-síntese Texto Fonte Compilador Síntese Análise Texto Objeto

44 funcionamento compilador
07 funcionamento compilador modelo análise-síntese O que é o modelo Enxerga todo o trabalho do compilador dividido em dois grandes blocos: a análise e a síntese. Bloco de análise Quebra o programa fonte em suas partes constituintes, Cria uma representação intermediária equivalente ao programa fonte, As operações realizadas pelo programa fonte, e os elementos utilizados são identificados, Grava estas informações numa estrutura hierárquica (árvore sintática estendida) Bloco de síntese Constrói o programa objeto a partir da representação intermediária Requer técnicas mais especializadas

45 funcionamento compilador
07 funcionamento compilador partes do compilador texto fonte Analisador Léxico Analisador Sintático Analisador Semântico Gerador de Código Intermediário Otimizador de Código Gerenciamento da Tabela de Símbolos Rotinas de Tratamento de Erro compilador Gerador de Código Final texto objeto

46 funcionamento compilador
07 funcionamento compilador analisador léxico Objetivo principal: identificar átomos Faz análise linear do texto fonte Varre todo o fonte da esquerda para a direita Agrupa caracteres em átomos (tokens) Checa com padrões determinados Classifica átomos identificados Identifica palavras reservadas da linguagem Utiliza construções não recursivas Monta registros iniciais na tabela de símbolos

47 funcionamento compilador
07 funcionamento compilador analisador sintático Objetivo principal: verificar seqüência de átomos Faz análise hierárquica do texto fonte Agrupa os átomos em frases gramáticas Trabalha sobre regras (Gramáticas) Pode conter regras recursivas Representa frases gramaticais em uma árvore Ex: balanceamento de parêntesis, ...

48 funcionamento compilador
07 funcionamento compilador analisador semântico Objetivo principal: verificar coerência de significados Pode alterar conteúdo da árvore sintática montada Tarefa importante é a checagem de tipo Efetua ou não conversões de tipo (depende da definição da linguagem) Pode eliminar ineficiências na estrutura

49 funcionamento compilador
07 funcionamento compilador gerador de código intermediário Objetivo principal: fazer primeira tradução independente Gera representação numa terceira linguagem Gera programa para execução em maquina abstrata, fictícia Deve gerar código que seja fácil de produzir e ao mesmo tempo fácil de traduzir Existem vários tipos de representação usados O código deve ser independente de máquina

50 funcionamento compilador
07 funcionamento compilador otimizador de código Objetivo principal: otimizar código Elimina redundâncias Reduz ineficiências Torna o código mais simples e mais rápido Diminui o numero de instruções Existe grande variedade de tipos de otimização Há classe de compiladores com ênfase nesta fase

51 funcionamento compilador
07 funcionamento compilador gerador de código final Objetivo principal: gerar código final da compilação Compõe-se de código de máquina relocável ou assembly As instruções em código intermediário são traduzidas em de instruções de máquina Aspecto critico: uso de registradores

52 funcionamento compilador
07 funcionamento compilador gerenciador tab símbolos Objetivo principal: gerenciar a tabela de símbolos Estrutura de dados global Módulo de código e a própria estrutura de dados Grava identificadores e símbolos que foram encontrados no programa fonte Armazena informações sobre vários atributos destes símbolos Exemplos de atributos: localização de memória, tipo da variável, escopo da variável, numero e tipo dos parâmetros das rotinas, ... É utilizada por todas as outras partes

53 funcionamento compilador
07 funcionamento compilador rotinas de erro Objetivo principal: controlar a ocorrência de erros Tenta descrever a falha encontrada em uma das partes do compilador Tenta recuperar o erro encontrado (tenta continuar a analise do programa) Em cada parte do trabalho do compilador serão descritos os vários erros Exemplo de erros léxicos, sintáticos, semânticos Pode ser uma rotina independente ou diluída

54 funcionamento compilador
07 funcionamento compilador compilação exemplo da compilação completa de uma sentença

55 funcionamento compilador
07 funcionamento compilador partes do compilador texto fonte Analisador Léxico Analisador Sintático Analisador Semântico Gerador de Código Intermediário Otimizador de Código Gerenciamento da Tabela de Símbolos Rotinas de Tratamento de Erro compilador Gerador de Código Final texto objeto

56 funcionamento compilador
07 funcionamento compilador modelo front-end/back-end O que é o modelo trabalho dividido em dois blocos: front-end e back-end Bloco de Front-end Partes/subpartes do compilador dependentes da linguagem fonte É totalmente independente da maquina objeto analise léxica, análise sintática, análise semântica, geração de código intermediário, parte da rotina de tratamento de erro e parte da tabela de símbolos. Bloco de Back-end Partes/subpartes do compilador dependentes da maquina objeto Não dependem da linguagem fonte otimização de código, geração de código final, parte da rotina de tratamento de erro e parte da tabela de símbolos.

57 funcionamento compilador
07 funcionamento compilador modelo front-end/back-end Utilidade do modelo Reaproveitamento do investimento em desenvolvimento pelas empresas que produzem ambientes de desenvolvimento ou linguagens de programação Front-end é refeito quando muda a linguagem fonte Back-end é refeito quando muda a plataforma de máquina usada Também conhecido com o nome de modelo Vanguarda-Retaguarda

58 funcionamento compilador
07 funcionamento compilador modelos x partes análise Analisador Léxico Analisador Sintático Analisador Semântico Gerador de Código Intermediário Otimizador de Código Gerenciamento da Tabela de Símbolos Rotinas de Tratamento de Erro Gerador de Código Final síntese

59 funcionamento compilador
07 funcionamento compilador modelos x partes front-end Analisador Léxico Analisador Sintático Analisador Semântico Gerador de Código Intermediário Otimizador de Código Gerenciamento da Tabela de Símbolos Rotinas de Tratamento de Erro Gerador de Código Final back-end

60


Carregar ppt "tópicos 01. Compiladores 02. Tradutores 03. Linguagens de Programação"

Apresentações semelhantes


Anúncios Google