Gramáticas Livres de Contexto

Documentos relacionados
Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Compiladores. Transformações de GLCs. Plano da aula. Análise Top-Down. Análise Top-Down Exemplo. Gramáticas Livres de Contexto.

Revisão de GLC e Analisadores Descendentes

Árvores de Derivação para GLC Ambigüidade nas GLC Precedência, Prioridade e Associatividade de operadores

Compiladores. Prof. Bruno Moreno Aula 11 20/05/2011

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

p. 2 Trechos de Material Didático (Apostila) e Conteúdo do Livro Texto, de autoria de Marcus Ramos, João José Neto e Ítalo Vega i <= 1

Compiladores. A seção das regras. Especificação (F)lex. Plano da aula. Escolha das regras. Compilação típica com FLEX

Um Tradutor Dirigido por Sintaxe

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto


03. [Sebesta, 2000] Descreva a operação de um gerador de linguagem geral.

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

Análise Sintática. Fabiano Baldo

Análise Sintática Introdução

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Compiladores - Análise Léxica

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Análise Sintática (Cap. 04) Análise Sintática Descendente

Compiladores Aula 4. Celso Olivete Júnior.

Análise Léxica. Sumário

Compiladores - Análise Léxica

Bases Matemáticas. Daniel Miranda de maio de sala Bloco B página: daniel.miranda

Isomorfismos de Grafos, Grafos Planares e Árvores

ESCOLA SUPERIOR DE TECNOLOGIA DE VISEU

CURSO DE MATEMÁTICA BÁSICA PROGRAMA DE EDUCAÇÃO TUTORIAL CENTRO DE ENGENHARIA DA MOBILIDADE

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.

Teoria de Jogos. Algoritmo Minimax e Alfa-Beta AED

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Definição de determinantes de primeira e segunda ordens. Seja A uma matriz quadrada. Representa-se o determinante de A por det(a) ou A.

Orientação a Objetos

(1, 6) é também uma solução da equação, pois = 15, isto é, 15 = 15. ( 23,

1. À primeira coluna (P), atribui-se uma quantidade de valores V igual à metade do total de linhas

Congruências Lineares

Exercícios de Teoria da Computação Autómatos, gramáticas e expressões regulares

Árvore de Decisão. 3. Árvore de Decisão

Inversão de Matrizes

INDUÇÃO MATEMÁTICA. Primeiro Princípio de Indução Matemática

A escrita antes de aprender a escrever, isto é, como as crianças se vão apropriando do sistema de linguagem escrita

Linguagens Livres de Contexto

Métodos Formais. Agenda. Relações Binárias Relações e Banco de Dados Operações nas Relações Resumo Relações Funções. Relações e Funções

TEORIA 5: EQUAÇÕES E SISTEMAS DO 1º GRAU MATEMÁTICA BÁSICA

Herança. Prof. Leonardo Barreto Campos 1

Compiladores - Gramáticas

Roteiro da aula. MA091 Matemática básica. Conjuntos. Subconjunto. Aula 12 Conjuntos. Intervalos. Inequações. Francisco A. M. Gomes.

Notas de aula de Lógica para Ciência da Computação. Aula 11, 2012/2

Algoritmos APRENDENDO A PROGRAMAR COM C#

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

IV Gramáticas Livres de Contexto

CURSO PRÉ-VESTIBULAR MATEMÁTICA AULA 2 TEORIA DOS CONJUNTOS

Aula 8: Gramáticas Livres de Contexto

Conceitos Básicos de Linguagens

Matemática Básica Intervalos

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

Lógica para computação Professor Marlon Marcon

Compiladores Aula 6. Celso Olivete Júnior.

Determinantes. ALGA 2008/2009 Mest. Int. Eng. Electrotécnica Determinantes 1 / 17

CONTEÚDOS PARA A PROVA DE RECUPERAÇÃO SEMESTRAL AGOSTO / 2016 MATEMÁTICA

Construção de Compiladores Aula 16 - Análise Sintática

Álgebra Linear I - Aula 20

Unidade 3 Função Afim

Capítulo Bissetrizes de duas retas concorrentes. Proposição 1

Forma Normal de Boyce-Codd

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Trabalho de Implementação de Analisador Léxico Parte 1

Proporcionar a modelagem de sistemas utilizando todos os conceitos da orientação a objeto;

NBR 10126/87 CORTE TOTAL LONGITUDINAL E TRANSVERSAL

Teoria da Computação Aula 02 Introdução

= Pontuação: A questão vale dez pontos, tem dois itens, sendo que o item A vale até três pontos, e o B vale até sete pontos.

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

2. Qual dos gráficos abaixo corresponde à função y= x? a) y b) y c) y d) y

Manual de. Geometria Descritiva. António Galrinho

Programação de Computadores I. Linguagem C Função

Propriedade: Num trapézio isósceles os ângulos de uma mesma base são iguais e as diagonais são também iguais.

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Algoritmo e Pseudo-código

Como construir um compilador utilizando ferramentas Java

Determinantes. Matemática Prof. Mauricio José

2. Tipos Abstratos de Dados

Departamento de Matemática da Universidade de Coimbra Álgebra Linear e Geometria Analítica Engenharia Civil Ano lectivo 2005/2006 Folha 1.

Transcrição:

Conteúdo da aula Gramáticas Livres de Contexto Marcelo Johann Trabalho - primeira etapa Definição, código e estrutura Mais elementos e detalhes de lex GLCs Gramática, produção, derivações, árvores Ambíguas, sem ciclos, ε-livres, fatoradas à esquerda, recursivas à esquerda, simplificadas Transformações liminação de produções vazias, de recursividade à esquerda (direta, indireta), fatoração INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 2 Hierarquia de Linguagens de Chomsky Definições Gramáticas Produção Derivações Árvores de Derivação INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 3 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 4 Usando Gramáticas para definir a sintaxe Muitas construções de linguagens de programação são recursivas Regexp não podem reconhecer tais construções. xemplo de definição recursiva: se S 1 e S 2 são enunciados e é uma expressão, então if then S 1 else S 2 é um enunciado xemplo de definição com uma gramática: cmd if expr then cmd else cmd expr ( bool ) expr && expr expr expr bool true false Gramáticas formais: Notações e Definições Uma Gramática Formal é um conjunto de 4 elementos: G := {S, P, N, T} S: o Símbolo Inicial (S N) P: Conjunto de regras de produções do tipo u v T: conjunto de símbolos terminais Palavras ou tokens da linguagem N: conjunto de símbolos não terminais Símbolos que podem ser substituídos pelas produções Vocabulário e notações: V: alfabeto V = N T (N T = ) u: string pertencente a V INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 6 1

Derivações Seja: um não-terminal A N, uma regra de produção p = { A v } P, e w, z dois strings quaisquer. A transformação: waz wvz É chamada derivação em um passo usando p Se w 1 w 2 w 3 w n então podemos dizer w 1 * w n derivação em múltiplos (0 ou mais) passos ; também + (um ou mais) INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 7 Definição da Linguagem Gerada A linguagem gerada G (notada L(G)) é: O conjunto formado por todos os strings de símbolos terminais deriváveis a partir do símbolo inicial S L(G) = {s s é um elemento de T* e S + s} quivalência: G 1 e G 2 são equivalentes se L(G 1 ) = L(G 2 ) Todos strings gerados estão em L Todos strings w L podem ser gerados Convenções Símbolos que representam terminais em minúsculos: u, v, x, y,... Símbolos que representam não-terminais em maiúsculos: X, Y, TRM, S,... Símbolos que representam formas sentenciais (seqüências de terminais e não-terminais): letras gregas ou sublinhadas: α, β, ω, w, z INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 8 Caso particular: Gramática Regular Gramática regular: produções exclusivamente da forma: A wb A w, onde w T* e A, B N (gramática linear à direita) A linguagem gerada por uma gramática regular é regular. Pode-se gerar os mesmos strings através de uma expressão regular. N = {S, B, C, D} T = {0, 1} S -> 0B 1C B -> 1S C -> 0C 0D 1 D -> 0 S xemplo G={N,T,P,S} xercício: fornecer expressão regular equivalente à gramática acima. INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 9 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 10 Árvore de derivação (Parse Tree) Árvore de derivação exemplo 1 Árvore de derivação: representação gráfica da derivação de uma sentença (string) estrutura hierárquica que originou a sentença A raiz da árvore representa o símbolo inicial Os vértices interiores são não-terminais Os símbolos terminais e a palavra vazia são folhas Gramática G = ( {NUMRO, NUM, DIGITO}, {0,1,2,...,9}, P, NUMRO ) P (regras de produção) = NUMRO NUM NUM NUM DIGITO DIGITO DIGITO 0 1... 9 NUMRO NUM NUM DIGITO DIGITO 4 Árvore de derivação para a sentença 4 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 11 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 12 2

Derivação mais à esquerda e mais à direita Derivação mais à esquerda de uma sentença: seqüência de formas sentenciais que se obtém derivando sempre o símbolo nãoterminal mais à esquerda. Derivação mais à direita de uma sentença: seqüência de formas sentenciais que se obtém derivando sempre o símbolo nãoterminal mais à direita. Árvore de derivação exemplo 2 Gramática G = ({}, {+, -, *, /, (, ), x}, P, ) sendo P = { + * / () x} + A mesma árvore pode representar mais de uma derivação x * para uma mesma sentença x Possíveis derivações para a árvore: + x + x + * x + x * x + x * x + + * + * x + x * x x + x * x + + * x + * x + x * x + x * x Isso não é problema. MAS. x INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 13 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 14 Gramática Ambígua OP ( ) x OP * / + - Considere 3 * 2 - * Quando há mais de uma árvore de derivação para uma mesma sentença - * 2 Tipos ou Características Gramáticas Ambíguas Gramáticas sem ciclos Gramáticas ε-livres Gramáticas fatoradas à esquerda Gramáticas recursivas à esquerda Gramáticas simplificadas 3 2 3 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 1 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 16 Outras Classificações de Gramáticas Gramática sem ciclos: Uma gramática sem ciclos é uma GLC que não possui derivações da forma A + A para algum A N Gramática ε-livre : GLC que não possui produções vazias do tipo A ε exceto a produção S ε (S é o símbolo inicial). Outras Classificações de Gramáticas Gramática fatorada à esquerda: GLC que não possui produções do tipo A αβ 1 αβ 2 para alguma forma sentencial α. Gramática recursiva à esquerda: GLC que permite a derivação A + Aα para algum A N O não terminal A deriva ele mesmo, de forma direta ou indireta, como símbolo mais à esquerda de uma subpalavra gerada. OBS: RCONHCDOR TOP-DOWN não aceita gramáticas recursivas à esquerda INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 17 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 18 3

Transformações de GLCs liminação de Produções Vazias (A) liminação de produções vazias (B) liminação de recursividade à esquerda: recursão direta recursão indireta (C) Fatoração de uma gramática INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 19 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 20 liminação de Produções Vazias liminação de Produções Vazias INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 21 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 22 (B) liminação de recursividade à esquerda xemplo de GLC recursiva à esquerda: A Aa b Gramáticas transformadas equivalentes: Com a palavra vazia A bx X ax ε Obs: pode ainda haver recursão indireta! Sem a palavra vazia A b bx X a ax (B) Outro exemplo de recursividade -> +T T T -> T*F F F -> () Id A regra -> +T T se torna: -> T -> +T ε A regra T- > T*F F se torna: T -> FT T -> *FT ε INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 23 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 24 4

(C) Fatoração de uma gramática limina a indecisão de qual produção aplicar quando duas ou mais produções iniciam com a mesma forma sentencial A αβ 1 αβ 2 Se torna: A αx X β 1 β 2 (C) xemplo de Fatoração a squerda Cmd if xpr then Cmd else Cmd Cmd if xpr then Cmd Cmd Outro Fatorando a esquerda: Cmd if xpr then Cmd lseopc Cmd Outro lseopc else Cmd ε INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 2 INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 26 Leituras e Tarefas Fazer o Trabalho! INF01033 - Compiladores B - Marcelo Johann - 2010/2 Aula 04 : Slide 27