Linguagens Livres de Contexto

Slides:



Advertisements
Apresentações semelhantes
Contadores e Registradores
Advertisements

FAPE - Curso de Ciência da Computação
Software Básico Silvio Fernandes
Matrizes especiais Matriz linha Matriz do tipo 1 x n, ou seja, com uma única linha. Por exemplo, a matriz A =[ ], do tipo 1 x 4. Matriz coluna.
Linguagem Fabrício Dias
Unidade 7 SEQUÊNCIAS E REGULARIDADES
II – Análise léxica DEI Conversão de expressões regulares em autómatos finitos determinísticos mínimos Bibliografia aconselhada: Aho, Sethi e Ullman –
I - Noções dum compilador
Prof. Yandre Maldonado e Gomes da Costa
Linguagens Formais e Autômatos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
TEORIA DOS AUTÓMATOS FINITOS E DAS SUAS LINGUAGENS
Software Básico Silvio Fernandes
Eletrônica Digital Operações Aritméticas Binárias
Eletrônica Digital Álgebra de Boole e Simplicação
Lema do Bombeamento – Gramáticas Livres do Contexto
Resolução.
Árvores.
Soma de Produtos Soma de produtos é uma forma padrão de representação de funções Booleanas constituida pela aplicação da operação lógica OU sobre um conjunto.
BCC101 – Matemática Discreta
Strings, Linguagens, Autômatos
Linguagens Livre de Contexto
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
Polinômios Prof. Marlon.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
Exercícios Linguagens Formais.
Razão e Proporção Razão: é o quociente indicado (exato) entre dois números racionais, sendo que o segundo número é diferente de zero. Como você pode perceber,
1ª aula - Álgebra de Boole
Derivada e integral de uma função
INTRODUÇÃO À ENGENHARIA
Lema do Bombeamento Linguagens Livres de Contexto
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 5 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Teoremas Booleanos e Simplificação Algébrica
Linguagens Livres de Contexto
Lema do Bombeamento Linguagens Livres de Contexto
Aspectos Formais da Computação CCO 410
Algorítmos e estrutura de dados III
Gramáticas Livres de Contexto
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Ling. Formais e Autômatos AFN-ε
Capítulo 11 Programação Lógica
Rotação Simples e Dupla Katia Guimarães
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Campus de Caraguatatuba Aula 8: Noções Básicas sobre Erros (2)
Expressões Regulares e Gramáticas
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.
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Capítulo II Gramáticas e Linguagens
Máquina de Turing Universal
Analise sintática aula-07-analise-sintática.pdf.
BCC 101 – Matemática Discreta I
BCC101 Matemática Discreta I
Operações Aritméticas no Sistema binário
Linguagens Livres de Contexto
Faculdade Pernambucana - FAPE Setembro/2007
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
Linguagens Formais - aula 02
Computabilidade e Linguagens Formais
Engenharia/Ciência da Computação
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
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.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

Linguagens Livres de Contexto

Motivação - Exemplo pal = { x{0,1}* | x =x R } = { e, 0,1, 00,11, 000,010, 101,111, 0000,0110,1001,1111, … } Vimos que pal não é regular. Mas existe um padrão p/ construção dos strings. Q: Se você tem um palindromo, como pode gerar outro a partir desse?

Motivação - Exemplo pal = { x{0,1}* | x =x R } R: Podemos gerar pal recursivamente do seguinte modo: CASO BASE: e, 0 e 1 são palindromos INDUÇÃO: se x é um palindromo, então 0x0 e 1x1 são palindromos. NOTAÇÃO: x  e|0|1|0x 0|1x 1 All palindromes can be obtained by repeating the recursive state.

Motivação - Exemplo x  e|0|1|0x 0|1x 1 Como podemos gerar 11011011? x  1x1  11x11  110x 011 1101x1011  1101e1011 = 11011011 All palindromes can be obtained by repeating the recursive state. x  1x1  11x11  110x 011 1101x1011

Gramática Livre de Contexto. Definição DEF: Uma gramática livre de contexto consiste de G=(V, S, R, S ) onde: V – conjunto finito de variáveis (ou símbolos não terminais) S – conjunto finito de terminais (ou alfabeto ) R – conjunto finito de regras (ou produções) da forma v  w onde vV, e w(SV )* (lê-se “v produz w ” ) S V –símbolo inicial. Q: O que é (V, S, R, S ) para pal ?

Gramática Livre de Contexto. Definição R: V = {x} S = {0,1}, R = {xe, x0, x1, x0x 0, x1x 1} S = x Adotando a notação padrão - pal: V = {S }, S = S R = {Se, S0, S1, S0S 0, S1S 1}

Derivações DEF: O símbolo de derivação “”, (lê-se “deriva em 1-passo” ou “produz em 1-passo”) denota uma relação entre strings em (SV )*. Escrevemos x y se x e y podem ser divididos como x = svt e y = swt , onde v w é uma regra de R Q: Que possíveis y satisfazem (em pal) S 0000S y ?

Derivações R: S 0000S y : Qualquer dos seguintes: 0000S, 00000S, 10000S, 0S00000S, 1S10000S, S0000, S00000, S00001, S00000S0, S00001S1

Derivações DEF: O símbolo de derivação “*” (lê-se “deriva” ou “produz”) denota uma relação entre strings de (SV )*. Escrevemos x *y se existe uma sequência de derivações em 1-passo de x para y. I.e., existem strings xi , i variando de 0 a n, tais que x = x0, y = xn e x0  x1, x1  x2, x2  x3, … , xn-1  xn Q: Quais LHS’s derivam quais RHS’s em pal? 01S, SS ? 01, 0, 01S, 01110111, 0100111

Derivações R: Não há apenas uma resposta: 01S * 01 SS * 0 01S * 01S Nenhum deles deriva 0100111

Linguagem Gerada por uma CFG DEF: Seja G uma gramática livre de contexto A linguagem gerada por G é o conjunto de todos os strings de símbolos terminais que podem ser derivados a partir do símbolo inicial. Formalmente: L(G ) = {w  S* | S * w}

Exemplo: Expressões Aritméticas Expressões envolvendo {+, , a, b, c, (, )} E representa uma expressão (mais geral) F representa um fator (parte da multiplicação) T representa um termo (produto de fatores) V representa uma variável, i.e. a, b, or c A gramática tem as seguintes regras: E  T | E +T T  F | T F F  V | (E ) V  a | b | c CONVENÇÃO: Variável inicial - E

Exemplo: Expressões Aritméticas EX: Considere o string u = a  b + (c + (a + c ) ) Essa é uma expressão aritmética válida. Portanto deve poder ser gerada a partir de E. É uma soma de duas expressões, então a primeira derivação deve ser E  E +T A sub-expressão a b é um produto, portanto um termo gerado por E +T  T +T  T F +T * a b +T A segunda sub-expressão é um fator, por causa dos parenteses: a b +T  a b +F  ab +(E )  ab +(E +T )

Exemplo: Expressões Aritméticas Resumindo: E  E +T  T +T  T F +T  F F +T  V F+T  aF+T  aV+T  a b +T  a b +F  a b + (E )  a b + (E +T )  ab+(T+T)  ab+(F+T) ab+(V+T )  a b + (c +T )  a b + (c +F )  a b + (c + (E ) )  a b + (c +(E +T ))  ab+(c+(T+T ) )  a b +(c + (F +T ) )  ab+(c+(a+T ) )  a b +(c +(a + F ) )  ab+(c+(a+V ) )  a b + (c + (a+c ) ) Esta é dita uma derivação mais à esquerda.

Derivação mais à direita Em uma derivação mais à direita, sempre substituimos a variável mais à direita. E  E +T  E + F  E + (E )  E + (E +T )  E + (E +F )  etc. Para abstrair dessa ambiguidade na ordem de aplicação das regras, usualmente representamos um derivação na forma de uma árvore de derivação.

Árvore de Derivação Em uma árvore de derivação (ou parse tree) cada nodo é um símbolo. Cada nodo-pai é uma variável cujos filhos correspondem ao lado direito de uma regra dessa variável. Por ex., v  abcdefg : A raiz da árvore é o símbolo inicial. As folhas representam o string derivado (lido da esquerda para a direita). v a b c d e f g

Árvore de Derivação Uma árvore de derivação para a  b + (c + (a + c ) ) Vantagem: Árvores de derivação ajudam também a entender a semântica! Podemos ver, a partir da árvore, como a expressão deve ser avaliada.

Ambiguidade. Definição DEF: Um string x é dito ambíguo em relação a uma gramática G se existem duas maneiras essencialmente diferentes de derivar x em G. I.e. x admite duas (ou mais) árvores de derivação distintas (ou equivalentemente, x admite diferentes derivações mais à esq.[dir]) Uma gramática G é dita ambígua se existe algum string x  L(G ) que seja ambíguo. Q: A gramática S  ab | ba | aSb | bSa | SS é ambígua? Qual é a linguagem gerada?

Ambiguidade R: L(G ) = linguagem dos strings com igual no. de a’ s e b’ s Sim, a gramática é ambígua: a a S S Exercícios Sipser pag.119: 2.8, 2.9 b b S S S S S a a S S b b

Exercícios Para cada uma das linguagens a seguir, sobre o alfabeto {0,1}, escreva uma gramática livre de contexto que gere a linguagem: L1 = {0,1}* L2 = {w | w começa e termina com o mesmo símbolo} L3 = { w | |w| é ímpar e símbolo do meio é 0} L4 ={0k 1i 0j | k,i,j≥0, k=i } L5={0k 1i 0j | k,i,j≥0, i=j} L6 = ∅

Propriedades de Fecho de CFLs Thm: O conjunto das linguagens livres de contexto é fechado em relação às operações de união (∪), concatenação (•) e fecho de Kleene (✷).

Exercícios Considere as linguagens do exercício anterior e construa uma gramática para cada uma das seguintes linguagens: L4 ∪ L5 L2 • L3 L2✴