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

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

2.

Apresentações semelhantes


Apresentação em tema: "2."— Transcrição da apresentação:

1 2

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 construção Para construir compiladores
08 construção Para construir compiladores Definir metas de uso do compilador Definir a quantidade de passos de compilação que o compilador vai ter Definir a quantidade de blocos de código que o compilador vai ter Definir qual o esquema de implementação que vai ser usado Definir as linguagens fonte e objeto que serão tratadas pelo compilador Definir a plataforma e a linguagem de programação que será usada para desenvolver o compilador

4 1 construção Definir metas de uso Requisitos do compilador
08 construção Definir metas de uso Requisitos do compilador Como o compilador será utilizado? (finalidade, usuário típico, tamanho de um texto fonte, etc) Deve ser estabelecido um conjunto de metas (o que é mais importante para o uso deste compilador) Alguns requisitos podem ser conflitantes entre si Exemplos de metas Eficiência do compilador Eficiência do programa compilado Clareza nas mensagens de erro Programas objeto (saída do compilador) otimizados (em relação ao tempo de execução, a ocupação de memória, etc…) 1

5 2 construção Características dos passos de compilação
08 construção Quantos passos de compilação Passo de compilação: atividade do compilador que exige leitura completa do código fonte ou do código fonte em alguma forma intermediária. Características dos passos de compilação Cada passo de compilação usa uma linguagem fonte e uma linguagem objeto Cada passo de compilação pode ser definido como sendo um tradutor de um passo Devemos procurar reduzir ao máximo o número de passos necessários a um compilador (menos linguagens intermediárias e menos desgaste) 2

6 Passo único (Compilador)
08 construção Quantos passos de compilação Compiladores podem ser classificados como: Compiladores de um passo Compiladores de vários passos 2 Passo único (Compilador) Texto Fonte (do compilador) Texto Objeto Passo 1 Texto Fonte (do compilador) Texto inter- mediário 01 Passo 2 Passo n Texto Objeto mediário 02 mediário n -1 ...

7 2 construção Vantagens e Desvantagens das classificações
08 construção Quantos passos de compilação Vantagens e Desvantagens das classificações Vantagens de compiladores de um passo são desvantagens para o de vários passos, e vice-versa. Vantagens de compiladores de vários passos: Menor utilização de memória do compilador, Maior possibilidade de executar otimizações, Projetos e implementações mais independentes. Desvantagens de compiladores de vários passos: Maior volume de entrada e saída Aumento do tempo de compilação Aumento da complexidade do projeto total. 2

8 2 construção Técnica de BackPatching
08 construção Quantos passos de compilação Técnica de BackPatching Algumas linguagens tem dificuldades de implementar soluções de um único passo pois permitem uso de elementos que só serão conhecidos posteriormente A técnica de BackPatching preenche estas “lacunas” com informações dos elementos que serão definidos e conhecidos posteriormente (pode ser usada para resolver o problema acima) Observação: este “retorno” do BackPatching não configura um novo passo de compilação 2

9 3 construção O que é bloco de código Quantos blocos de código
08 construção Quantos blocos de código O que é bloco de código Um compilador, pode ser organizado de tal forma, que consiga ser gerado em pedaços independentes de código de máquina e que são disponibilizados para o usuário da linguagem como “o compilador”. Estes pedaços são chamados de: blocos de código, ou também de fases e overlays. Exemplo de um compilador com 3 blocos de código 3 COMP.EXE COMP1.DLL COMP2.DLL

10 3 construção Parte, Passo, Bloco: conceitos Quantos blocos de código
08 construção Quantos blocos de código Parte, Passo, Bloco: conceitos Partes do trabalho do compilador, Passos de compilação e Blocos de Código são diferentes entre si Analisador Léxico é um exemplo de uma parte do trabalho do compilador (um compilador tem oito partes possíveis) O passo de compilação é decorrente de uma organização lógica do funcionamento do compilador (quantas leituras ele vai ter que realizar para conseguir executar as partes do trabalho que tem que ser feitas) Um bloco de código é produto de uma necessidade física (limitação de memória por exemplo). 3

11 3 construção Parte, Passo, Bloco: exemplos Quantos blocos de código
08 construção Quantos blocos de código Parte, Passo, Bloco: exemplos Um passo de compilação pode realizar por exemplo parte de um analisador léxico, o analisador sintático inteiro e parte do analisador semântico numa única leitura. Um único bloco de código pode fazer a compilação inteira implementada em várias leituras (ou seja em vários passos) Um único passo de compilação pode precisar de diversas rotinas que foram organizadas em vários blocos de código diferentes. 3

12 08 construção Qual o esquema de implementação O que é O compilador precisa realizar as oito partes do trabalho (analisador léxico, analisador sintático, analisador semântico,...) definidas anteriormente O código escrito do compilador, as rotinas que foram criadas para que ele funcionasse (que faz todas as oito partes do trabalho citadas acima), normalmente é organizado em três pedaços: 1) analisador léxico, 2) analisador sintático e 3) semântico e geração de código (completa) Esquema de implementação é a decisão sobre como estes 3 pedaços estarão se comunicando entre si para formar o compilador 4

13 ROTINAS DE ANÁLISE SEMÂNTICA E GERAÇÃO DE CÓDIGO
08 construção Qual o esquema de implementação Programa Principal: analisador sintático Esquema mais popular de implementação Chamado de compilação dirigida pela sintaxe (ou syntax-driven) Será o esquema a ser utilizado na construção do projeto de implementação da disciplina 4 ANALISADOR SINTÁTICO ANALISADOR LÉXICO ROTINAS DE ANÁLISE SEMÂNTICA E GERAÇÃO DE CÓDIGO

14 SEMÂNTICO E GERAÇÃO DE CÓDIGO
08 construção Qual o esquema de implementação Programa Principal: analisador léxico Segundo esquema mais popular Analisador sintático é chamado quando já é possível montar parte da árvore Analisador sintático decide quando chamar semântico e rotinas de geração de código 4 ANALISADOR LÉXICO ANALISADOR SINTÁTICO ANALISADOR SEMÂNTICO E GERAÇÃO DE CÓDIGO

15 SEMÂNTICO E GERAÇÃO DE CÓDIGO
08 construção Qual o esquema de implementação Principal: semântico e geração de código O semântico/geração de código toma a iniciativa de controlar e seqüencializar as atividades de compilação Chama o analisador sintático O sintático por sua vez chama o léxico 4 ANALISADOR SEMÂNTICO E GERAÇÃO DE CÓDIGO ANALISADOR SINTÁTICO ANALISADOR LÉXICO

16 SEMÂNTICO E GERAÇÃO DE CÓDIGO
08 construção Qual o esquema de implementação Implementação através de co-rotinas Representa uma iteração infinita. Cada um roda independente num processador ou numa máquina diferente Todos repetem permanentemente a tarefa a que se destinam. 4 ANALISADOR LÉXICO ANALISADOR SINTÁTICO ANALISADOR SEMÂNTICO E GERAÇÃO DE CÓDIGO

17 08 construção Linguagens fonte e objeto Como formalizar as linguagens fonte e objeto do compilador Maneiras de formalizar linguagens: Enumeração Por gramáticas formais Dispositivos geradores de linguagens Construídos através do estabelecimento de Leis de Formação Por reconhecedores ou autômatos Dispositivos de teste de linguagens Construídos através da especificação de Regras de Teste 5

18 5 construção Linguagens fonte e objeto 08
Definir formalmente a linguagem a ser traduzida (gramática) Transformação manual em reconhecedor Transformação automática em reconhecedor Linguagem formalizada através de um reconhecedor equivalente Acréscimo manual das rotinas de geração de código Acréscimo automático das rotinas de geração de código Compilador

19 6 construção Questões a solucionar
08 construção Plataforma de desenvolvimento e linguagem de programação Questões a solucionar Quais as plataformas de máquinas envolvidas (qual a plataforma que será usada para desenvolvimento do compilador e qual a plataforma onde o compilador deverá rodar depois de pronto)? Em que linguagem de programação o compilador será desenvolvido? De acordo com as respostas às questões acima os compiladores podem ser classificados em alguns grupos. 6

20 08 construção Plataforma de desenvolvimento e linguagem de programação Classificação dos compiladores em relação à plataforma de máquina utilizada no seu desenvolvimento: Autoresidente: todo compilador que roda depois de pronto na mesma plataforma de máquina em que ele foi desenvolvido. Cruzado (ou cross-compiler): todo compilador que roda depois de pronto em uma plataforma de máquina (chamada de máquina hospedeira) diferente da plataforma de máquina que foi usada no seu desenvolvimento. 6

21 08 construção Plataforma de desenvolvimento e linguagem de programação Classificação dos compiladores em relação à linguagem de programação utilizada no seu desenvolvimento: Autocompilável: todo compilador que usa (em algum momento da sua construção) como linguagem de programação para o seu desenvolvimento a mesma linguagem de programação que deve ser traduzida por ele. Normal: todo compilador que não se encaixa na definição de compilador autocompilável (acima). 6

22 6 construção Método de BootStrapping
08 construção Plataforma de desenvolvimento e linguagem de programação Método de BootStrapping Uma das técnicas mais utilizadas para a obtenção de compiladores do tipo autocompilável Para a compreensão da técnica definiremos dois momentos distintos: o momento inicial onde começa o processo e o momento final quando o compilador tiver sido produzido. No primeiro inicial dispomos de recursos para iniciar o desenvolvimento No momento final conseguimos atender aos requisitos propostos para o compilador 6

23 6 construção BootStrapping: recursos e requisitos
08 construção Plataforma de desenvolvimento e linguagem de programação BootStrapping: recursos e requisitos Elementos utilizados e suas siglas: LD : Linguagem a ser usada no desenvolvimento MD : Máquina a ser usada no desenvolvimento LC : Linguagem que se quer compilar MC : Máquina onde o compilador vai executar (rodar) Recursos: Dispomos da linguagem LD para desenvolvimento do compilador e da maquina MD Requisitos: Queremos construir um compilador para textos fontes na linguagem LC e que funcione depois de pronto na máquina MC 6

24 6 construção 1 2 3 BootStrapping: notação de diagramas T
08 construção Plataforma de desenvolvimento e linguagem de programação BootStrapping: notação de diagramas T Representa um compilador Indica as três linguagens envolvidas no processo 6 Linguagem 1: Linguagem fonte do compilador Linguagem 2: Linguagem objeto do compilador Linguagem 3: Linguagem de desenvolvimento 1 2 3

25 6 construção BootStrapping: exemplo de um processo
08 construção Plataforma de desenvolvimento e linguagem de programação BootStrapping: exemplo de um processo Passo 1: Escrevemos na linguagem LD um compilador para interpretar fontes na linguagem LC Passo 2: Compilamos o compilador gerado no passo 1, gerando um compilador na linguagem de maquina MD Passo 3: Re-escrevemos o compilador do passo 1 na própria linguagem LC e gerando código para a máquina MC Passo 4: Compilamos o compilador escrito no passo 3 no compilador obtido no passo 2 gerando um novo compilador para a linguagem LC rodando na maquina MD, Passo 5: Compilamos o compilador obtido no passo 3 no compilador obtido no passo 4 gerando um novo compilador para a linguagem LC disponível para ser executado na maquina MC. 6

26 6 construção BootStrapping: Justificativas
08 construção Plataforma de desenvolvimento e linguagem de programação BootStrapping: Justificativas Quais as vantagens de se utilizar um compilador do tipo autocompilável Quais as vantagens de se utilizar a geração do compilador para uma máquina hospedeira (compilador cruzado) 6

27 ferramentas Ferramentas para construção de compiladores
09 ferramentas ferramentas Ferramentas para construção de compiladores Normalmente a construção de compiladores é um processo de desenvolvimento completo onde é produzido todo o código do compilador pelas técnicas normais de desenvolvimento de software. Existem entretanto algumas ferramentas que se propõem a construir parte do trabalho de um compilador ou mesmo um compilador completo.

28 ferramentas Para construir partes do compilador. Exemplo1:
09 ferramentas ferramentas Para construir partes do compilador. Exemplo1: Gerador de analisadores léxicos Também conhecidos como Scanner Generators Entrada : expressões regulares Saída : analisador léxico Exemplo : LEX (unix) Desenvolvido por Eric Schmidt e Mike Lesk para o Unix. Foi incluído no padrão POSIX Gera código em C. Versão famosa open source do lex é o Flex (fast lexical anayzer)

29 ferramentas Para construir partes do compilador. Exemplo2:
09 ferramentas ferramentas Para construir partes do compilador. Exemplo2: Gerador de analisadores sintáticos Conhecidos como Parser Generators Entrada : gramática livre de contexto Saída : analisador sintático Exemplo : YACC (unix) YACC: Yet Another Compiler Compiler. Desenvolvido por Steven C. Johnson (AT&T) para o Unix. Gera código em C. Foi reescrito para outras linguagens (ML, Ada, Java, Limbo) e versões Berkeley Yacc, GNU Bison, MKS yacc and Abraxas yacc

30 ferramentas Para construção de compiladores completos ferramentas
09 ferramentas ferramentas Para construção de compiladores completos ComComs Compiler Compilers Compiler Generators Sistema de Escrita de tradutores Geradores de compiladores Exemplo 3: Coco/R (Hanspeter Mössenböck, Albrecht Wöß, Markus Löberbauer, University of Linz) Versões para C#, Java e C++ Portado por outras pessoas para Delphi, Pascal, etc

31 semelhante Editores Estruturados
10 semelhante outras ferramentas que fazem análise Editores Estruturados Fornecidos como parte do ambiente de desenvolvimento de uma linguagem ou como recurso independente, mas vinculado a uma definição específica de uma linguagem, Executa a criação e manipulação de textos como um editor de textos normal, mas direcionado para fontes em determinada linguagem, Checa se as entradas estão corretas, Coloca palavras chaves automaticamente, Procura delimitadores de blocos de programa (begin, end, if, endif, etc...)

32 semelhante Pretty-print Formatadores de código fonte
10 semelhante outras ferramentas que fazem análise Pretty-print Formatadores de código fonte Arruma o código escrito em determinada linguagem Chamados também de code beautifier Disponíveis para PHP, Java, C++, C, Perl, JavaScript, CSS, XML, etc... Faz identação automática de linhas Adiciona comentários Remove espaços em branco Adiciona quebra de linha depois de ; } etc exemplo

33 semelhante Static Checker
10 semelhante outras ferramentas que fazem análise Static Checker Lê, analisa e descobre erros em potencial no programa fonte, sem traduzir ou executar o programa objeto, Detecta partes do programa que nunca serão executadas, Detecta que variável é executada sem a definição Detecta código morto Checa padrões Testa complexidade

34 semelhante Outros Tradutores de Linguagens de Programação
10 semelhante outras ferramentas que fazem análise Outros Tradutores de Linguagens de Programação Interpretadores (desenv interativo, debugs) Montadores (por definição) Decompiladores Demontadores (disassemblers)

35 semelhante Formatadores de texto Silicom Compilers
10 semelhante outros usos das técnicas Formatadores de texto Entrada: Seqüências de caracteres e de códigos de controle (embutidos ou explícitos). Saída...: Texto formatado. Silicom Compilers Entrada: Sinais lógicos ou grupos de sinais num circuito. Saída...: Circuito final numa lingua- gem própria ou em formato a ser gravado na placa.

36 semelhante Query Interpreters Editor de Figuras
10 semelhante outros usos das técnicas Query Interpreters Entrada: Predicados contendo operadores booleanos, relacionais, matemáticos, ... Saída...: Registros que satisfazem as condições dos predicados solicitados. Editor de Figuras Entrada: Seqüências de localizações e ações. Saída...: Figuras desenhadas. Produtor de Programas Estruturados Entrada: Sequência de comandos em formato não estruturado. Saída...: Programas estruturados.

37 custo/benefício Justificar o uso de compiladores custo/benefício
11 custo/benefício custo/benefício Justificar o uso de compiladores Implica necessariamente em justificar a utilização das linguagens de programação de alto nível A tradução automática feita pelos compiladores produz programas menos eficientes que os criados diretamente na linguagem objeto e isto envolve custos e benefícios.

38 custo/benefício custo/benefício Custos Benefícios
11 custo/benefício custo/benefício Custos Desenvolvimento não trivial de compiladores Produção de aplicações (geradas) sem o mesmo poder de otimização do que aplicações feitas diretamente em assembler (ou outra linguagem de baixo nível). Benefícios Redução do custo de Desenvolvimento Redução do tempo de Desenvolvimento Aumento da produtividade do Programador É desnecessário otimizar todo o programa Redução do número de linhas de código Maior legibilidade do programa Aumento da confiabilidade do programa Facilidade de manutenção Baixos custos de migração (portabilidade)

39 2


Carregar ppt "2."

Apresentações semelhantes


Anúncios Google