Compiladores.

Slides:



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

III – Análise sintáctica
III – Análise sintáctica
Teoria da Computação FIC– Ciência da Computação
Análise Sintática Ascendente ­
Forma Normal de Chomsky
Envolvendo Autômatos e Linguagens Livres do Contexto
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
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
Linguagens Livres de Contexto
Linguagens Livre de Contexto
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Lex e Yacc.
Análise Sintática Ascendente
Relações em uma Gramática
Linguagem de Prog. e Programas
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Verificação de Tipos.
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Revisão da Linguagem C.
Prof. Bruno Moreno Aula 4 – 11/03/2011
Lema do Bombeamento Linguagens Livres de Contexto
Análise léxica e sintática
Lex Linguagem (e compilador) para especificar analisadores léxicos.
Compiladores, Aula Nº 11 João M. P. Cardoso
Compiladores, Aula Nº 19 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Linguagens Livres de Contexto
Lema do Bombeamento Linguagens Livres de Contexto
Compiladores, Aula Nº 10 João M. P. Cardoso
Teoria e Implementação de Linguagens Computacionais
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Análises léxica e sintática
Análise Léxica Primeira fase de um compilador
Análise Léxica e Sintática
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
Análise Léxica.
Capítulo II Gramáticas e Linguagens
Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.
Analise sintática aula-07-analise-sintática.pdf.
Análises léxica e sintática
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Linguagens Livres de Contexto
Compiladores Análise Sintática
Revisão Compiladores – AP1
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Semântica de Linguagens de Programação
Sintaxe de uma Linguagem
Teoria e Implementação de Linguagens Computacionais Revisão 1º EE André Ricardo Schäffer Lopes – Rodrigo Diego Melo Amorim–
Analisador sintático: Tipos de análises sintáticas
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
1 Decidibilidade continuação…. 2 Teorema: Para qualquer linguagem recursivamente enumerável é indecidível determinar se é finita Prova: Vamos reduzir.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
Transcrição da apresentação:

Compiladores

Código de Máquina Programa Add v,v,0 cmp v,5 jmplt ELSE THEN: add x, 12,v ELSE: WHILE: cmp x,3 ... v = 5; if (v>5) x = 12 + v; while (x !=3) { x = x - 3; v = 10; } ...... Compilador

Compilador analisador léxico parser entrada saída código de programa máquina programa

Um parser conhece a gramática da linguagem de programação

Parser PROGRAM STMT_LIST STMT_LIST STMT; STMT_LIST | STMT; STMT EXPR | IF_STMT | WHILE_STMT | { STMT_LIST } EXPR EXPR + EXPR | EXPR - EXPR | ID IF_STMT if (EXPR) then STMT | if (EXPR) then STMT else STMT WHILE_STMT while (EXPR) do STMT

O parser encontra a derivação para uma entrada particular derivação Parser entrada E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5 E -> E + E | E * E | INT 10 + 2 * 5

árvore de derivação derivação E E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5 E + E 10 E E * 2 5

árvore de derivação E código de máquina E + E mult a, 2, 5 add b, 10, a 10 E E * 2 5

Parsing

Parser string de entrada derivação gramática

Exemplo: Parser derivação entrada ?

Busca Exaustiva Fase 1: Encontrar derivação Todas as possíveis derivações de comprimento 1

Fase 2 Fase 1

Fase 2 Fase 3

Resultado final da busca exaustiva (top-down parsing) Parser entrada derivação

Complexidade de tempo da busca exaustiva Suponha que não existam produções da forma Número de fases para um string :

Para uma gramática com regras Tempo para a fase 1: possíveis derivações

Tempo para a fase 2: possíveis derivações

Tempo para a fase : possíveis derivações

Extremamente ruim!!! Tempo total requerido para um string : fase 1 fase 2|w| fase 2 Extremamente ruim!!!

Existem algoritmos mais rápidos para tipos especiais de gramáticas S-grammar: símbolo string de variáveis Par ocorre apenas uma vez

S-grammar - exemplo: Cada string tem uma única derivação

Para S-grammars: No parser por busca exaustiva existe uma única escolha em cada fase Tempo para cada fase: Tempo total para parsing de :

Para gramáticas livres de contexto em geral: Existe um algoritmo de parsing que faz parsing de um string em tempo

Simplificações de Gramáticas Livres de Contexto

Regra de Substituição gramática equivalente Substitua B

Em geral: Substitua B gramática equivalente

Produções Inúteis Produção Inútil Algumas derivações nunca terminam...

Outra gramática: Produção inútil Nunca é atingida a partir de S

Em geral: Se Então a variável é útil Caso contrário, a variável é inútil

Uma produção é útil se todas as suas variáveis são úteis

Removendo Produções Inúteis Gramática Exemplo:

Primero: encontre todas as variáveis que produzem strings só com terminais Passo 1: Passo 2:

Mantenha apenas as variáveis que produzem símbolos terminais

Segundo: Encontre todas as variáveis atingíveis a partir de Grafo de Dependência não atingível

Mantenha apenas as variáveis atingíveis a partir de S Gramática Final

Variáveis Nulas Variável Nula:

Removendo Variáveis Nulas Gramática Exemplo: Variável nula

Gramática Final Substitua

Produções Unitárias Produção Unitária:

Removendo Produções Unitárias Observação: É removida imediatamente

Gramática Exemplo:

Substitua

Remova

Substitua

Remova produções repetidas Gramática final

Removendo Tudo Passo 1: Remova Variáveis Nulas Passo 2: Remova Produções Unitárias Passo 3: Remova Variáveis Inúteis