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

20
Prof. Claudio Benossi

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

Page 1: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

Prof. Claudio Benossi

Page 2: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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.

Page 3: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

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

Page 4: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 5: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 6: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 7: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 8: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 9: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 10: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 11: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 12: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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)

Page 13: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 14: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 15: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 16: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 17: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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.

Page 18: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 19: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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

Page 20: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise léxica,

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