INE5622 INTRODUÇÃO A COMPILADORES

Documentos relacionados
INE5421 LINGUAGENS FORMAIS E COMPILADORES

I.2 Introdução a Teoria da Computação

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

INE5317 Linguagens Formais e Compiladores. Ricardo Azambuja Silveira INE-CTC-UFSC URL:

Introdução à Programação

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

CAP. VI ANÁLISE SEMÂNTICA

Noções de compilação

Compiladores. Introdução

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Compiladores. Introdução à Compiladores

Mecanismos de Interrupção e de Exceção, Barramento, Redes e Sistemas Distribuídos. Sistemas Operacionais, Sistemas

Compiladores I Prof. Ricardo Santos (cap 1)

Linguagens e Compiladores

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Introdução aos Compiladores

Conceitos de Linguagens de Programação

Projeto de Compiladores

EA876 - Introdução a Software de Sistema

As fases de um compilador

COMPILAÇÃO. Ricardo José Cabeça de Souza

Prof. Adriano Maranhão COMPILADORES

As fases de um compilador

PROGRAMAÇÃO I. Introdução

CAP. VII GERAÇÃO DE CÓDIGO

Linguagens de Programação Aula 3

SCC-5832 Teoria da Computação

IV.2 Aspectos Léxicos Convencionais

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Identificadores Nome de variáveis, constantes, métodos, etc...

Linguagens Formais e Autômatos

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Compiladores. Prof. Bruno Moreno

Compiladores. Conceitos Básicos

Máquina de Turing Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente

Sistema Computacional

Compiladores Aula 1. Celso Olivete Júnior.

Máquinas de Turing - Computabilidade

Autômatos e Linguagens

SCC Teoria da Computação e Linguagens Formais

Teoria da Computação. Computabilidade e complexidade computacional

CAP. VII GERAÇÃO DE CÓDIGO

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Projeto de Compiladores

Infraestrutura de Hardware. Funcionamento de um Computador

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

SCC Introdução à Teoria da Computação

Linguagens de Programação Classificação

Programação de Computadores:

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Estrutura geral de um compilador programa-fonte

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Paradigmas de Programação

Linguagens Formais e Autômatos. Tiago Alves de Oliveira

Compiladores. Fabio Mascarenhas

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang

Teoria da Computação (BBC244)

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

Programação de Computadores

MC-102 Aula 01. Instituto de Computação Unicamp

Capítulo 1 Linguagens e processadores

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018

Programação de Computadores

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Transcrição:

INE5622 INTRODUÇÃO A COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer o processo de especificação e implementação de linguagens de programação, a partir do estudo dos conceitos, modelos, técnicas e ferramentas que compõem a Teoria das Linguagens Formais e a Teoria de Compiladores. Objetivos específicos Adquirir uma visão geral sobre o Processo de Compilação sob o ponto de vista de implementação. Adquirir noções básicas sobre a Teoria das Linguagens Formais. Saber especificar aspectos léxicos e sintáticos de linguagens através de autômatos e gramáticas. Conhecer critérios e características usados no projeto/avaliação de Linguagens de Programação. Conhecer as principais técnicas e ferramentas de apoio usadas na construção de compiladores, sabendo usá-las na especificação e implementação de linguagens de programação. Obter Subsídios que permitam um melhor entendimento, utilização e avaliação das Linguagens de Programação. Programa Avaliação Bibliografia 1

MOTIVAÇÃO Linguagens Formais e Autômatos Necessidade de uma visão geral dos Fundamentos Teóricos da Computação Contato com Modelos e Técnicas Formais usadas na especificação/implementação de Linguagens Capacidade para correlacionar aspectos teóricos e práticos da Computação Base para a melhoria no entendimento, no uso e na produção de software (básico e aplicativo) Linguagens de Programação e Compiladores Melhorar o entendimento de L.P. aspectos conceituais x implementações escolha e uso mais racional/eficiente facilitar o aprendizado de novas linguagens Capacidade para Especificar/Implementar Linguagens Uso geral novas, extensões, atualizações Uso específico Tempo Real, Robótica, Descriçao de Hardware S. O., B.D., Protocolos, Redes, Ling. Naturais Uso dos modelos/ técnicas em outros sistemas Proc. de textos, Reconh. de padrões, SI em geral Ponto de partida para estudos avançados 2

I.1 - Introducão a Compiladores I.1.1 - Definições preliminares Tradutor É um programa que traduz um programa fonte escrito em uma linguagem qualquer (denominada linguagem fonte) para um programa objeto equivalente escrito em outra linguagem (denominada linguagem objeto) Pf / Lf Tradutor Po / Lo Compilador É um Tradutor em que a linguagem fonte é uma linguagem de alto nível e a linguagem objeto é uma linguagem de baixo nível (assembly ou máquina) Pf / Lan Compilador Po / La Po / Lm Interpretador É um programa que interpreta diretamente as instruções do programa fonte, gerando o resultado. Pf / Lq Interpretador Resultados 3

Tradutor / Interpretador Esquema híbrido para implementação de linguagens de programação Pf / Lan Tradutor Po / Lint Interpretador Resultados Montador É um Tradutor em que o programa fonte está escrito em linguagem assembly e o programa objeto resultante está em linguagem de máquina Pf / La Montador Po / Lm Pré-processador É um Tradutor em que tanto o programa fonte quanto o programa objeto estão escritos em linguagens de alto nível Pf/Lan1 Pré-Proc. Po/Lan2 Cross - Compiler Compilador que gera código para uma máquina diferente da utilizada na compilação. 4

I.1.2 - Estrutura geral de um Compilador (Modelo Análise - Síntese) P. Fonte Análise Compilador Análise Léxica T a b e l a d e S Í m b o l o s Análise Sintática Análise Semântica Geração de Código Intermediário Otimização de Código Síntese T r a t a m e n t o d e E r r o s Geração de Código P. Objeto 5

Modelo Front-end Back-end Front-end Independente de máquina Compreende: o Análise (Léxica, Sintática e Semântica) o Geração de Código Intermediário Back-end Independente de linguagem Compreende: o Otimização de Código o Geração de Código Infraestrutura de desenvolvimento de Compiladores Front-end s Back-end s Linguagem 1 Máquina 1 Linguagem 2 Código Intermediário Máquina 2...... Linguagem N Máquina M 6

I.1.3 - Formas de Implementação de Compiladores Fase - Procedimento que realiza uma função bem definida no processo de compilação. Passo - Passagem completa do programa compilador sobre o programa fonte que está sendo compilado. Formas de Implementação Compiladores de 1 passo o Todas as funcionalidades (fases) são executadas simultaneamente Compiladores de vários passos o Diferentes composições (agrupamento de fases) o Exemplos : Critérios para escolha Memória disponível Tempo de Compilação Tempo de execução Características da Linguagem Referências futuras Características das Aplicações Necessidades de Otimização Tamanho / Experiência da Equipe Disponibilidade de Ferramentas de Apoio Prazo para desenvolvimento Vantagens X Desvantagens 7

I.1.4 - Fases de um Compilador I.1.4.1 - Analisador Léxico Interface entre o programa fonte e o compilador Funções básicas: o Ler o programa fonte o Agrupar caracteres em itens léxicos (tokens) Identificadores Palavras Reservadas Constantes (numéricas e literais) Símbolos especiais (simples, duplos,...) o Ignorar elementos sem valor sintático Espaços em brancos, comentários e caracteres de controle o Detectar e diagnosticar erros léxicos Símbolos inválidos, elementos mal formados Exemplo: Programa Fonte program exemplo; var A, B : integer; begin (* Inicio do programa *) read ( A ); B := A + 2.5;... end. Tokens Reconhecidos program 1 - PR exemplo 2 - ID ; 3 - SE var 4 - PR A 2 - ID, 5 - SE...... end 37 - PR. 38 - SE 8

I.1.4.2 - Analisador Sintático Funções básicas Agrupar TOKENS em estruturas sintáticas (expressões, comandos, declarações, etc....) Verificar se a sintaxe da linguagem na qual o programa foi escrito está sendo respeitada Detectar/Diagnosticar erros sintáticos Exemplos: B := A * 2.5 <var> <expressão> <comando> var A, B : integer <lista-var> <tipo> <declaração> 9

I.1.4.3 - Analisador Semântico SEMÂNTICA COERÊNCIA SIGNIFICADO SENTIDO LÓGICO Funções básicas: Verificar se as construções utilizadas no P.F. estão semanticamente corretas Detectar e diagnosticar erros semânticos Extrair informações do programa fonte que permitam a geração de código Verificações Semânticas Usuais Análise de escopo Declaração de variáveis Obrigatória? Múltiplas declarações permitidas? Compatibilidade de tipos Coerência entre declaração e uso de identificadores Correlação entre parâmetros formais e atuais Referências não resolvidas Procedimentos e desvios 10

Tabela de Símbolos : Definição - Estrutura onde são guardadas as informações (os atributos) essenciais sobre cada identificador utilizado no programa fonte. Atributos mais comuns nome endereço relativo (nível e deslocamento) categoria variável simples - tipo array - dimensões, tipo dos elementos record - campos (quant. e apontadores)... constante tipo e valor procedimentos procedure ou função número de parâmetros ponteiro para parâmetros se função, tipo do resultado parâmetro tipo forma de passagem (valor, referência) campo de record tipo, deslocamento dentro do Record 11

Tratamento ou Recuperação de ERROS: Funções Diagnosticar erros léxicos, sintáticos e semânticos encontrados na etapa de análise Tratar os erros encontrados, permitindo que o compilador recupere-se da situação de erro e possa concluir a análise. I.1.4.4 - Gerador de Código Intermediário Função Consiste na geração de um conjunto de instruções (equivalentes ao programa fonte de entrada) para uma máquina hipotética (virtual) Exemplo E := ( A + B ) * ( C + D ) Quadrupla ( +, A, B, T1) ( +, C, D, T2) ( +, T1, T2, E) Máquina de acumulador carregue A some B armazene T1 carregue C some D armazene T2 carregue T1 multiplique T2 armazene E 12

I.1.4.5 - Otimizador de código Função Melhorar o código, de forma que a execução seja mais eficiente quanto ao tempo e/ou espaço ocupado Otimizações mais comuns Agrupamento de sub-expressões comuns ex. c := (a + b ) * ( a + b ) Eliminação de desvios para a próxima instrução Retirada de comandos invariantes ao LOOP Eliminação de código inalcançável Redução em força Transformação/avaliação parcial Alocação ótima de registradores I.1.4.6 - Gerador de Código Função : Converter o programa fonte (diretamente ou a partir de sua representação na forma de código intermediário) para uma sequência de instruções (assembler ou máquina) de uma máquina real. 13

I.1.5 - Planejamento da Construção de um Compilador Por que é necessário construir um novo compilador? Criação de uma nova Linguagem Extensão de uma linguagem existente Surgimento de uma nova máquina Desempenho do compilador existente Definição Preliminar da Ling. fonte Objetivos Propósito geral ou específico Comercial ou experimental Filosofia de Programação Imperativa (Estruturada/Objetos) Funcional, Lógica Mista (Multi - Paradigma) Potencialidade(s) Básica(s) Sistema de Tipos Concorrência (Multi-Thread) Distribuição, Facilidades de B. D. Abstração Funcional 14

Definição preliminar da ling. objeto Nível Alto nível, Intermediária Assembly, Máquina Máquina Alvo Real ou Hipotética (Virtual) Definição do Tipo de Tradutor Compilador Interpretador Tradutor/Interpretador Pré-Processador Montador Estrutura do Tradutor Número de fases Número de passos Forma de Integração Linguagens Intermediárias Definição do Ambiente Operacional Hardware e sistema Operacional Linguagem de Implementação Disponibilidade de Ferramentas 15

Especificação da Linguagem Fonte Completa e Detalhada Aspectos Léxicos Aspectos Sintáticos Aspectos Semânticos Especificação da Linguagem Objeto Completa e Detalhada Arquitetura da Máquina Alvo Repertório de Instruções Procedimentos de Tradução 16

I.2 Introdução à Teoria das Linguagens Formais Teoria da Computação O que é? Fundamento da Ciência da Computação Tratamento Matemático da Ciência da Computação Estudo Matemático da Transformação da Informação Guia : Que problemas podem ser efetivamente computáveis, como e com que complexidade Qual sua importância? Classificação dos problemas: Não-Computáveis Computáveis Indecidíveis Decidíveis Intratáveis Tratáveis Exemplos de problemas: Computabilidade / Decidibilidade Equivalência entre Programas Garantia de parada de um programa Complexidade de Algoritmos Significado e Correção de Programas 17

Teoria da Computação X Teoria das Linguagens Formais Definição de Teoria da Computação sob a ótica da Teoria das Linguagens Formais: Conjunto de Modelos Formais (autômatos e gramáticas, p. ex.), que juntamente com suas propriedades (decidibilidade, equivalência e complexidade), fundamentam a Ciência da Computação. 18

Conceitos e Propósitos Fundamentais da Teoria da Computação PROCEDURE X ALGORITMO Procedure: Sequência finita de passos, executáveis mecanicamente de forma discreta. Algoritmo : É uma procedure que, independentemente das entradas, possui parada garantida. Exemplos: Determinar se I 1 é um número primo Determinar se existe um número perfeito > I Determinar se um programa está sintaticamente correto Determinar se um programa qualquer entrará em loop para uma entrada qualquer (Halting Problem) Conj. Recursivos e Recursivamente Enumeráveis X Algoritmos e Procedures X Problemas Decidíveis e Problemas Indecidíveis 19

Propósitos da Teoria da Computação (ou : Modelos que formalizam a noção do que é do que não é efetivamente computável) Máquinas de Turing (Turing, 1936) Tese de CHURCH Todo processo efetivo pode ser realizado por uma máquina de turing) Gramáticas (Chomsky, 1959) Tipos 0, 1, 2 e 3 Algoritmos de Markov (Markov, 1951) Sistemas de regras de produção Processamento de strings λ-calculus (Church, 1936) Método para especificação de funções Influenciou programação funcional Sistemas de POST (Emil Post, 1936) Formalização de sistemas de re-escrita Lógica formal e sistemas especialistas Funções Recursivas (Kleene, 1936) Método para definição de funções a partir de um conjunto de equações exemplo : X Y = 1, se y = 0 = X. X Y-1, se y > 0 20

Teoria das Linguagens Formais O que é LINGUAGEM FORMAL? O que é LINGUAGEM? Forma de comunicação Conjunto de símbolos + conjunto de regras Exemplos: L. Máquina, PASCAL, Português,... Conceitos Básicos Alfabeto : Conjunto finito e não vazio de símbolos Sentença: Sequência de símbolos de um alfabeto Tamanho de uma sentença: Quantidade de símbolos de uma sentença Sentença vazia: denotada por ε, é uma sentença de tamanho 0 Potência de uma sentença: exemplo: a 3 = aaa Fechamento de um alfabeto: Reflexivo : V * Transitivo (ou Positivo) : V + 21

Linguagens e suas Representações Linguagem : L V * Formas de Representação: Enumeração Sistemas Geradores Sistemas Reconhecedores Linguagens Formais Dispositivos / Modelos matemáticos Linguagens Recursivas: Algoritmos Linguagens Recursivamente Enumeráveis Procedures Teoria das Linguagens Formais: Estudo dos modelos matemáticos que possibilitam a especificação, o reconhecimento, a classificação, as propriedades e o interrelacionamento entre linguagens. Importância da Teoria das Linguagens: Apóia aspectos básicos da Teoria da Computação: Decidibilidade, Computabilidade e complex. Fundamenta Aplicações Computacionais: Processamento de Linguagens (esp. / impl.), Rec.de Padrões, Modelagem de Sistemas,... 22