Tradutores de Linguagens

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

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.
Arquitetura de Computadores
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.
Amintas engenharia.
Rational Unified Process
Linguagem de Montagem Visão geral.
Seminários de Compiladores
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
ELEMENTOS DA INFORMÁTICA
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
Gerenciamento do escopo do projeto
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
INTRODUÇÃO A INFORMÁTICA
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Introdução a Informática
CISC e RISC.
Estatística Básica Utilizando o Excel
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Bibliografia 1. Aho V.A., Sethi R., Ulman D.J., Compiladores - Princípios, Técnicas e Ferramentas, tradução de Daniel de Ariosto Pinto - Ed. Guanabara.
Linguagem de Prog. e Programas
Arquitetura de Computadores
Linguagens de Programação
Aula 3 Evolução da Principais Linguagens
Aula 2 Aspectos Preliminares
Laboratório de Programação de Computadores I
Prof. Msc. Raul Paradeda Aula 2 Introdução
Programação Baseada em Objectos Desenho de TAD
O Portal do Estudante de Computação
Lógica de Programação UNIDADE 1 – Introdução a) Computador
PROGRAMAÇÃO I UNIDADE 1.
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.
PCI- Introdução à Computação
Caracterização e Objetivos das LP
Laboratório I Mateus Raeder Material baseado nos originais da
Arquitetura de computadores
Avaliação da Linguagem de Programação
Projeto de Banco de Dados
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Organização e Arquitetura de Computadores
02/08/2011 Professor Leomir J. Borba- –
Excepções Conceito de Excepção A classe Exception
Geração de Código aula-12-geração-de-código.pdf.
Analise Semântica aula-10-analise-semântica.pdf.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Processadores de Linguagens
Planilha Eletrônica - Excel
Fontes de Erros Aula 1 Introdução; Erros em processos numéricos;
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação Introdução Prof. Renato Melo.
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Compiladores – IF688 Professor: André Santos
Programação Computacional Aula 2: Introdução -Algoritmos
SISTEMAS DE INFORMAÇÃO
Faculdade Pernambuca - FAPE
Sistemas Operacionais IV – Gerenciamento de E/S
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Influencias sobre o Projeto da Linguagem
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Transcrição da apresentação:

Tradutores de Linguagens UCPEL/CPOLI Linguagens Formais e Autômatos Tradutores de Linguagens Junho de 2011

I. Linguagens de Programação Programa em Linguagem de Máquina Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador. A primeira e mais primitiva linguagem de computador é a própria linguagem máquina (0’s e 1’s). Um programa era difícil, longo e principalmente caro de o construir. Era também difícil de ser entendido por outros programadores. Essa complexidade levou è necessidade de desenvolver novas técnicas e ferramentas. Linguagens Formais e Autômatos - Tradutores de Linguagens

I. Linguagens de Programação Linguagem de Montagem A resolução do problema passou pela criação de uma linguagem em que os códigos numéricos foram substituídos por mnemónicos. O nome dessa linguagem é ASSEMBLY LANGUAGE. Então será necessário um outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador!!! O processo de tradução da linguagem de montagem para a linguagem de máquina é realizada por um programa chamado ASSEMBLER. Linguagens Formais e Autômatos - Tradutores de Linguagens

I. Linguagens de Programação Linguagem Assembly Linguagens Formais e Autômatos - Tradutores de Linguagens

I. Linguagens de Programação Linguagem de Programação Foram desenvolvidas diversas linguagens de programação: FORTRAN (1957) ALGOL (1958) COBOL (1959) PASCAL (1963) BASIC (1965) ADA (1968) C (1982) e mais tarde o C++ (1986) Java (1995) Etc…. Estas novas linguagens foram afastando cada vez mais o programador do nível de máquina. Linguagens Formais e Autômatos - Tradutores de Linguagens

II. Tradução entre Linguagens Os programas em linguagem de alto nível também precisam de ser traduzidos para linguagem de máquina. Tradução Código Fonte Código Objeto Linguagens Formais e Autômatos - Tradutores de Linguagens

II. Tradução entre Linguagens Montagem O processo de montagem traduz um programa escrito numa LP num programa equivalente em linguagem maquina. Processo de Montagem Código Objeto Tradução Linguagem de Máquina Linguagens Formais e Autômatos - Tradutores de Linguagens

II. Tradução entre Linguagens É realizada por meio de duas classes de programas: COMPILADORES e INTERPRETADORES Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores O que é um compilador? Um compilador tem a finalidade de converter uma linguagem – Linguagem Fonte – de fácil escrita e leitura para os programadores, numa linguagem – Linguagem alvo ou objecto – que possa ser executada pelas máquinas. O código executável gerado pelo compilador é dependente do sistema operacional e da linguagem de máquina para o qual o código fonte foi traduzido. A enorme variedade de compiladores existentes é bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo são também muito variadas. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores O que é um compilador? Os compiladores são por vezes classificados como uni-passo, multi-passo, otimizador, ou corretor de erros, dependendo da forma como foram construídos ou da funcionalidade para que são pretendidos. Começaram a aparecer no início da década de 50. Muito do trabalho inicial dos compiladores resumia-se a tradução de fórmulas aritméticas para código máquina. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores O que é um compilador? O primeiro compilador de FORTRAN, por exemplo, demorou 18 meses para implementar. Boas linguagens de implementação, ambientes de programação, e ferramentas de software têm também vindo a ser desenvolvidas. Com estes avanços, um bom compilador pode ser implementado até por alunos!!! num projeto de um semestre de uma disciplina de compiladores. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores O que é um compilador? Ilustração do funcionamento de um compilador C/C++: Linguagens Formais e Autômatos - Tradutores de Linguagens

Modelo Análise- síntese da compilação III. Compiladores Modelo Análise- síntese da compilação Pode-se dividir o processo de compilação em duas fases: Análise : parte o programa fonte em peças constituintes e cria uma representação intermediária do programa fonte. Síntese : Constrói o desejado programa alvo (código de máquina) a partir da representação intermediária. A parte da síntese é a que requer técnicas mais especializadas. Linguagens Formais e Autômatos - Tradutores de Linguagens

Modelo Análise-Síntese da compilação III. Compiladores Modelo Análise-Síntese da compilação Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Contexto de um compilador Muitos outros programas podem ser necessários para criar um programa alvo executável. Biblioteca, Arquivos dos Objetos Relocalizados Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Primos de um compilador Pré-processadores: produzem o input para os compiladores; Montadores: Alguns compiladores produzem código assembly que é passado para um montador para posterior processamento. Alguns compiladores produzem o trabalho dos montadores; Linguagens Formais e Autômatos - Tradutores de Linguagens

Análise do programa fonte III. Compiladores Análise do programa fonte Na compilação a fase de análise consiste em 3 partes: Análise Léxica ou Linear, Análise Sintática ou Hierárquica, e Análise Semântica Linguagens Formais e Autômatos - Tradutores de Linguagens

Análise do programa fonte III. Compiladores Análise do programa fonte Análise Léxica ou Linear: Em que a cadeia de caracteres que forma a estrutura do programa fonte é lido da esquerda para a direita e agrupado em tokens que são sequências de caracteres tendo o sentido coletivo. A sua função básica é o reconhecimento e a classificação das estruturas elementares ou classes sintáticas das linguagens. Linguagens Formais e Autômatos - Tradutores de Linguagens

Análise do programa fonte III. Compiladores Análise do programa fonte Análise sintática ou hierárquica: Na qual caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com sentido coletivo. Verifica se a estrutura geral do texto ou programa fonte está correta. Linguagens Formais e Autômatos - Tradutores de Linguagens

Análise do programa fonte III. Compiladores Análise do programa fonte Análise Semântica: Na qual são executadas certas paradas para assegurar que os componentes de um programa são juntamente ajustados em sentido absoluto. Verifica se o programa fonte tem erros semânticos e reúne a informação dos tipos para a fase de gerador de código subsequente. Uma componente importante da análise semântica é a verificação do tipo. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Gerenciador da tabela de símbolos: Uma função essencial de um compilador é registar os identificadores usados no programa fonte e colecionar informação sobre vários atributos de cada identificador. Uma tabela de símbolos é uma estrutura de dados contendo o registro de cada identificador, com campos para os atributos do identificador. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Tabela de códigos: É uma estrutura criada pela análise semântica de um compilador, que mantém registadas as linhas código intermediário geradas por algum tempo. Em geral as linhas de código geradas permanecem nesta tabela enquanto não estão totalmente preenchidas. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Deteção de erros e aviso do erro: Cada fase pode encontrar erros. Porém, depois de descobrir um erro, a fase tem de ocupa-se de alguma maneira com aquele erro, para que a compilação possa prosseguir. As fases de análise sintática e semântica normalmente tratam de uma grande parte dos erros detetáveis pelo compilador. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Geração de código intermediário: Depois da análise sintática e semântica, alguns compiladores geram uma explícita representação intermediária do programa fonte. Pode-se pensar nesta representação intermediária como um programa para uma máquina abstrata; Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fases de um compilador Otimização do código: Esta fase tenta melhorar o código intermediário, de forma a que resulte num código de máquina mais rápido a executar. Geração do código: A fase final do compilador é a geração de código alvo, consistindo normalmente no estabelecimento do código de máquina. Neste ponto, após o programa fonte ter sido analisado e aprovado, segundo a sua sintaxe, e livre de erros semânticos, o compilador tem condições de escrever um programa equivalente na linguagem alvo. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Fatores condicionantes da organização física dos compiladores Dividir o processo de compilação em diversas fases "lógicas" permite um melhor entendimento do processo como um todo e leva a uma implementação mais estruturada.   A eficiência e os recursos disponíveis na máquina hospedeira do compilador influenciam de maneira decisiva um item importantíssimo na implementação de um compilador: o número de passos de compilação, para poder optimizar o tempo de compilação. Linguagens Formais e Autômatos - Tradutores de Linguagens

III. Compiladores Os Compiladores e os Autômatos Os compiladores têm como base os autômatos. Dentro da área de Teoria das Linguagens Formais, encontram-se os conceitos de gramática e autómatos, que dão base para a maioria das técnicas utilizadas hoje para se implementar compiladores. Daqui vêm os principais conceitos utilizados pelos compiladores modernos. Um léxico deve reconhecer tokens, não produzi-los. A descrição de tokens de maneira a que estes possam ser reconhecidos é feita através de aceitadores finitos (autômato finito).   Linguagens Formais e Autômatos - Tradutores de Linguagens

IV. Interpretadores Como funcionam os interpretadores? O funcionamento dos interpretadores é muito parecido ao dos compiladores, mas... O interpretador traduz o código linha a linha. O código fonte não é totalmente traduzido antes de ser executado. Não existem fases distintas nem se produz código intermediário. Passa o tempo todo lendo e traduzindo código. Linguagens Formais e Autômatos - Tradutores de Linguagens

IV. Interpretadores Exemplos de Interpretadores Navegadores; Excel, Word, Basic, Access, ... ; SmallTalk; AutoLisp; Prolog (algumas versões); Matlab; Lisp. Linguagens Formais e Autômatos - Tradutores de Linguagens

V. Comparação Vantagens Desvantagens Compiladores Interpretadores Execução mais rápida Várias etapas de tradução Permite estruturas de programação mais completas Programação final é maior, necessitando mais memória para a sua execução Permite a optimização do código fonte Processo de correcção de erros e depuração é mais demorado Interpretadores Depuração do programa é mais simples Execução do programa é mais lenta Consome menos memória Estruturas de dados demasiado simples Resultado imediato do programa ou rotina desenvolvida Necessário fornecer o programa fonte ao utilizador Linguagens Formais e Autômatos - Tradutores de Linguagens