Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de...

Post on 22-Apr-2015

135 views 12 download

Transcript of Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de...

Prof. Claudio Benossi

ObjetivosIntrodução à construção de compiladoresNoçõ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.

Programa5. Geração do Código: introdução,

linguagens intermediárias, máquinas virtuais e estratégias para otimização de código.

Programa1. 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áficasO 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 ApoioManuais do Lex e do Yacc

http://www.bumblebeesoftware.com/  Analisadores léxicos e sintáticos

http://www.inf.ufes.br/~tavares/labcomp2000/  

Apostilashttp://www-di.inf.puc-rio.br/~rangel/comp.html

Exemplo de analisador lexicohttp://www.hpjanio.hpg.ig.com.br/

compiladores.htm

Compiladores?Especificação/Implementação de L.P.

Uso geral: novas, extensões e atualizaçõesEspecífico: Tempo Real, robótica, descrição de

HW, SO, BD, Protocolos, InterfacesUso de técnicas/ferramentas em outros

sistemasProcessamento de texto, ling. naturais

Entender melhor as Ling. Prog.Escolha e uso mais racional/eficiente

Estudos avançadosPesquisa 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çõesCOMPILADOR: é 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) Tradutor

Texto-Objeto(redigido em ling. objeto)

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 Pascal2. Turbo C

Texto-Fonte(Ling.alto nível)

Compilador Texto-Objeto(outra Linguagem )

Compilador

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) Filtro

Texto-Objeto (equivalente em C)

Filtro

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?

Texto-Fonte(não preparado) Pré-

processador

Texto-Fonte equivalente (preparado)

Pré-Processador

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.

Atividades Adicionais

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?

Formalização das Linguagens de Programação.

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.

Gramáticas

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.

Reconhecedores

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.

Metalinguagem