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

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

Parte 1: Organização de Computadores
gerador de código intermediário
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Introdução à Ciência da Computação Linguagens de Programação.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000.
Linguagem de Montagem Visão geral.
Informática Aplicada Prof.: Bruno Rafael de Oliveira Rodrigues.
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
ELEMENTOS DA INFORMÁTICA
Software Básico Silvio Fernandes
Disciplina:Tópicos Avançados de Sistemas de Informação
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Introdução a Informática
CISC e RISC.
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Softwares.
Análise Léxica Supondo o trecho de programa abaixo:
Tradutores de Linguagens
SIMULAÇÃO EM COMPUTADOR: O PENSAMENTO COMO PROCESSAMENTO DE INFORMÇÕES
Arquitetura de Computadores
Linguagens de Programação
Universidade do Vale do Rio dos Sinos
Lógica de Programação UNIDADE 1 – Introdução a) Computador
PROGRAMAÇÃO I UNIDADE 1.
Aula prática - análise contextual
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 02: Introdução.
Introdução a Programação
Sistemas Operacionais
Caracterização e Objetivos das LP
Linguagem de Expressões 2
Professor: Márcio Amador
02/08/2011 Professor Leomir J. Borba- –
Orientação a Objetos Parte I
Geração de Código aula-12-geração-de-código.pdf.
Sistemas Operacionais
Introdução a Linguagens de Programação
Paradigmas de Linguagens de Programação
Técnicas de Programação - TPR
Documentação de Software
Analise Semântica aula-10-analise-semântica.pdf.
Experimentação Algorítmica
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Arquiteturas RISC x CISC
Zeque - Grad. CC1 Sistemas Operacionais Curso de Ciência da Computação da UFPE Prof. José Queiroz - ZEQUE.
Aula 1 – Profª Danielle Costa
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação Introdução Prof. Renato Melo.
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Compiladores – IF688 Professor: André Santos
Introdução à Computação - Jorge Macêdo1 ICC – Software Jorge Macêdo.
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
SISTEMAS DE INFORMAÇÃO
Faculdade Pernambuca - FAPE
Sistemas Operacionais
Sistemas Operacionais IV – Gerenciamento de E/S
Influencias sobre o Projeto da Linguagem
TÉCNICAS DE ESTIMATIVAS
Banco de Dados Distribuídos Sílvia Cristina de Matos Soares
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
FERRAMENTAS DA QUALIDADE
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Transcrição da apresentação:

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

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

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

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.

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.

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.

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.

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

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

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

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

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

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

(?) 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

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

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.

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

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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).

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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.

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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.

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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.

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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.

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 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.

histórico de compiladores 04 histórico de compiladores 1940 1950 1960 1970 1980 1990 2000 2010 Xxx (2010) xxx

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.

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.

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

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

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

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

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)

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

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

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

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

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

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

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

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

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 0001 01 00000000 01 * 0010 01 00000010 00 0011 01 00000111 00 0100 01 00000100 01 * transformação em código de máquina absoluto endereço de carga 00001001 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

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

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

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

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

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, ...

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

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

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

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

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

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

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

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

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.

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

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

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