prof. claudio benossi. objetivos introdução à construção de compiladores noções básicas de...
TRANSCRIPT
![Page 1: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/3.jpg)
Programa 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](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/4.jpg)
ProgramaConceitos Básicos: compiladores, interpretadores e
parsers;Análise Léxica: introdução, recuperação de erros,
sistemas de entrada, linguagens, expressões regulares, implementação de um analisador léxico;
Análise Sintática: introdução, autômatos, máquinas de estado, implementação de um analisador sintático;
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](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/5.jpg)
Análise LéxicaAnálise léxica é o processo de analisar a entrada de linhas de caracteres
(tal como o código-fonte de um programa de computador) e produzir uma seqüência de símbolos chamado "símbolos léxicos" (lexical tokens), ou somente "símbolos" (tokens), que podem ser manipulados mais facilmente por um parser (leitor de saída).
A Análise Léxica é a forma de verificar determinado alfabeto. Quando analisamos uma palavra, podemos definir através da análise léxica se existe ou não algum caracter que não faz parte do nosso alfabeto, ou um alfabeto inventado por nós. O analisador léxico é a primeira etapa de um compilador, logo após virá a análise sintática.
![Page 6: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/6.jpg)
Análise SintáticaA análise sintática transforma um texto na entrada em uma
estrutura de dados, em geral uma árvore, o que é conveniente para processamento posterior e captura a hierarquia implícita desta entrada. Através da análise léxica é obtido um grupo de tokens, para que o analisador sintático use um conjunto de regras para construir uma árvore sintática da estrutura.
Em termos práticos, pode também ser usada para decompor um texto em unidades estruturais para serem organizadas dentro de um bloco, por exemplo.
![Page 7: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/7.jpg)
Análise SemânticaAnálise semântica é um sinônimo de Análise
sintática e é a terceira fase da compilação onde se verifica os erros semânticos, (por exemplo, uma multiplicação entre tipos de dados diferentes) no código fonte e coleta as informações necessárias para a próxima fase da compilação que é a geração de código objeto.
![Page 8: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/8.jpg)
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
![Page 9: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/9.jpg)
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/ Apostilas
http://www-di.inf.puc-rio.br/~rangel/comp.htmlExemplo de analisador lexico
http://www.hpjanio.hpg.ig.com.br/compiladores.htm
![Page 10: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/10.jpg)
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 sistemas
Processamento de texto, ling. naturaisEntender melhor as Linguagens de Programação
Escolha e uso mais racional/eficiênteEstudos avançados
Pesquisa e pós-graduação
![Page 11: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/11.jpg)
Compiladores 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 12: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/12.jpg)
Compiladores 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 realocá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 13: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/13.jpg)
CompiladoresAtualmente 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 14: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/14.jpg)
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 15: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/15.jpg)
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)
TradutorTexto-Objeto(redigido em ling. objeto)
![Page 16: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/16.jpg)
CompiladoresGeneralizando: 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 )
![Page 17: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/17.jpg)
FiltroCaso 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)
![Page 18: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/18.jpg)
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?
Texto-Fonte(não preparado) Pré-
processador
Texto-Fonte equivalente (preparado)
![Page 19: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/19.jpg)
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.
![Page 20: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/20.jpg)
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?
![Page 21: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/21.jpg)
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.
![Page 22: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/22.jpg)
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.
![Page 23: Prof. Claudio Benossi. Objetivos Introdução à construção de compiladores Noções Básicas de Compiladores, Interpretadores e Analisadores. Análise](https://reader036.vdocuments.com.br/reader036/viewer/2022062312/552fc140497959413d8ded2b/html5/thumbnails/23.jpg)
MetalinguagemA 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.