Compiladores Prof. Claudio Benossi.

Slides:



Advertisements
Apresentações semelhantes
gerador de código intermediário
Advertisements

Introdução à Ciência da Computação Linguagens de Programação.
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.
Linguagens Formais e Autómatos
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Linguagem de Montagem Visão geral.
Seminários de Compiladores
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
ELEMENTOS DA INFORMÁTICA
Software Básico Silvio Fernandes
LABORATÓRIO DE PROGRAMAÇÃ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
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Softwares.
Lex e Yacc.
Linguagem de Prog. e Programas
Tradutores de Linguagens
Linguagens Formais e Tradutores
Arquitetura de Computadores
Linguagens de Programação
Professor Fernando Luís
Lógica de Programação UNIDADE 1 – Introdução a) Computador
PROGRAMAÇÃO I UNIDADE 1.
Ferramentas para a Construção de Compiladores: Lex & Yacc
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.
Gramáticas Livres de Contexto
Introdução a Linguagens de Programação
UMA VISÃO GERAL DA LINGUAGEM C
Laboratório I Mateus Raeder Material baseado nos originais da
Compiladores Prof. Claudio Benossi.
Teoria e Implementação de Linguagens Computacionais – IF688
Estudo dos Conceitos e Paradigmas de Programação
Semântica de Linguagens de Programação
TÉCNICAS DE PROGRAMAÇÃO
Capítulo II Gramáticas e Linguagens
Geração de Código aula-12-geração-de-código.pdf.
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Semântica de Ações Especificação Completa de Specimen, Actress, Projeto RAT, Considerações Finais.
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
Zeque - Grad. CC1 Sistemas Operacionais Curso de Ciência da Computação da UFPE Prof. José Queiroz - ZEQUE.
Prof. Fábio Carneiro Mokarzel 2014
Requisitos de Software
Teste de Software 14: Geração de teste baseado em modelos: MBT
Algoritmos e Programação I
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Geradores de analisadores léxicos
Semântica de Linguagens de Programação
Compiladores – IF688 Professor: André Santos
Computabilidade e Linguagens Formais
Algoritmos e Programação MC102
Linguagens de Programação
SISTEMAS DE INFORMAÇÃO
2.
Paradigmas de Programação
Sistemas Operacionais
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
1 Especificação de Sistemas de Software e a UML. 2 Modelagem de sistema A modelagem de sistema auxilia o analista a entender a funcionalidade do sistema.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Aula Origens da Linguagem Documentária Documentação (déc. 50 a 70) crescimento do conhecimento científico e tecnológico Dificuldades para armazenar.
Modelagem de Banco de Dados: Conceitos
Transcrição da apresentação:

Compiladores Prof. Claudio Benossi

Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica, sintática e semântica. Estratégias para otimização de código.

Programa 5. Geração do Código: introdução, linguagens intermediárias, máquinas virtuais e estratégias para otimização de código.

Programa 1. Conceitos Básicos: compiladores, interpretadores e parsers 2. Análise Léxica: introdução, recuperação de erros, sistemas de entrada, linguagens, expressões regulares, implementação de um analisador léxico 3. Análise Sintática: introdução, autômatos, máquinas de estado, implementação de um analisador sintático 4.Análise Semântica: introdução, gramáticas livres de contexto, dificuldades semânticas, implementação de um analisador semântico

Referências Bibliográficas O conteúdo deste curso não esgota o assunto, maiores informações poderão ser obtidas em: Compilers – Principles, Techniques and Tools. Addison- Wesley Publishing Co. 1986. Compiladores, Teoria e Pratica. Ed. LTC. Allen I. Holub, Compiler Design in C. Prentice Hall Inc. 1990. Introdução a Compilação. Maria G. V. Nunes, Alessandra A. Macedo, Daniel G. Dosualdo e Tatiana Barbosa. Http://www.icmsc.sc.usp.br/Ensino

Links de Apoio Manuais do Lex e do Yacc http://www.bumblebeesoftware.com/  Analisadores léxicos e sintáticos http://www.inf.ufes.br/~tavares/labcomp2000/   Apostilas http://www-di.inf.puc-rio.br/~rangel/comp.html Exemplo de analisador lexico http://www.hpjanio.hpg.ig.com.br/compiladores.htm

Compiladores? Especificação/Implementação de L.P. Uso geral: novas, extensões e atualizações Específico: Tempo Real, robótica, descrição de HW, SO, BD, Protocolos, Interfaces Uso de técnicas/ferramentas em outros sistemas Processamento de texto, ling. naturais Entender melhor as Ling. Prog. Escolha e uso mais racional/eficiente Estudos avançados Pesquisa e pós-graduação

Compiladores, Filtros e Pré-processadores Nos computadores antigos os compiladores muitas vezes exerciam o seu papel como programas autônomos, exigindo uma interação direta com o programador com operações específicas e manuais transformando o programa em formas intermediárias produzidas em meios de armazenamento externo (fitas perfuradas e cartões).

O código-objeto final, que também apresentava-se na forma de fitas e cartões, continha programas-objeto em linguagem de máquina relocável, ou em formato fonte de linguagem simbólica de baixo nível. A partir daí, e através de processamento adicional, chegava-se a um programa executável (ainda na forma de fitas ou cartões).

Atualmente os compiladores operam integrados aos demais componentes do sistema de programação, fazendo parte do conjunto dos recursos oferecidos pelo sistema operacional (Unix - C) inclusive entradas e saídas

Relacionamento dos compiladores com outros elementos de um sistema de programação HARDWARE Linguagem de máquina Sistema Operacional Montadores Compiladores/interpretadores Ling. de baixo nível Ling. de alto nível Ling. para resolução de problemas específicos

Definições COMPILADOR: é um dos módulos do software de um computador, cuja função é a de efetuar automaticamente a tradução de textos, redigidos em uma determinada linguagem de programação, para alguma outra forma que viabilize sua execução (em geral em linguagem de máquina) TRADUTOR: Tradutores em que a ling. fonte é de baixo nível, por tradição, chamam-se montadores (assembly languages) Texto-Fonte (redigido em ling. fonte) Texto-Objeto (redigido em ling. objeto) Tradutor

Compilador Generalizando: tradutores convertem textos redigidos em uma linguagem, para formas equivalentes, redigidas em outra linguagem. Se a primeira linguagem for de alto nível, o tradutor será chamado compilador. Exemplos de Compiladores: 1. Turbo Pascal 2. Turbo C Texto-Fonte (Ling.alto nível) Texto-Objeto (outra Linguagem ) Compilador

Filtro Caso a ling.-objeto seja de alto nível e muito semelhante a ling.-fonte, o tradutor recebe o nome de filtro. Exemplos? Texto-Fonte (em Turbo C) Texto-Objeto (equivalente em C) Filtro

Texto-Fonte equivalente (preparado) Pré-Processador Programas que efetuem traduções entre 2 dialetos de mesma linguagem, ou que permitem converter para uma forma padronizada um texto que inclua extensões de uma Linguagem disponível, chamam-se pré-processadores. Exemplos? Pré- processador Texto-Fonte (não preparado) Texto-Fonte equivalente (preparado)

Atividades Adicionais 1. Detecção e recuperação de erros exemplo... 2. Permite a inclusão de comentários no código fonte, facilitando a compreensão. As linhas de comentário são reproduzidas no código-objeto? 3. Comandos de controle de compilação.

Formalização das Linguagens de Programação. As linguagens de programação devem ser descritas de maneira completa e isenta de ambigüidades. Para tanto utilizam-se notações matemáticas formais, inspiradas em modelos elaborados por estudiosos de Linguagens naturais, entretanto menos complexas e cheias de restrições em sua forma, visando limitar sua generalidade e aumentar sua simplicidade para facilitar a elaboração de programas analisadores baseados em tais definições. Exemplo de linguagens Naturais?

Gramáticas O ideal seria conversarmos diretamente com computador, mas por enquanto isto não é economicamente viável. As Linguagens de programação podem ser formalizadas de 2 maneiras: 1. Gramática: Conjunto de leis de formação que definem rigorosamente o modo de formar textos corretos em uma linguagem. Portanto a linguagem é o conjunto de todos os textos gerados a partir das definições da gramática que a define. Gramáticas são portanto dispositivos geradores (síntese) de textos pertencentes a linguagem.

Reconhecedores 2. Reconhecedores: uma regra de teste que permite classificar um texto como pertencente a uma dada linguagem ou não. Muitos compiladores são construídos com base em Reconhecedores. Visto que Gramática e Reconhecedores são formas de representação que permitem definir formalmente linguagens de programação, elas próprias formam linguagens através das quais esta formalização é efetuada.

Metalinguagem A linguagem utilizada para representar ou definir linguagem chama-se METALINGUAGEM, exemplo: Em Linguagem Natural seria uma gramática da língua inglesa redigida em português para ser usada por pessoas de língua portuguesa. Em linguagem de Programação o exemplo mais conhecido é a Backus-Naur Form - BNF através da qual são construídas gramáticas e diagramas de estados que representam os autômatos finitos através dos quais são construídos reconhecedores de várias linguagens.