Linguagens Livre de Contexto

Slides:



Advertisements
Apresentações semelhantes
FAPE - Curso de Ciência da Computação
Advertisements

Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
I - Noções dum compilador
Elementos de Lógica Matemática
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Prof. Yandre Maldonado e Gomes da Costa
Teoria da Computação FIC– Ciência da Computação
Análise Sintática Ascendente ­
Capítulo 2 - Derivadas No final do capítulo 1, já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x0. Chamamos esse limite, quando.
Derivadas Já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x0. Chamamos esse limite, quando ele existia, de derivada de f em.
Nice Maria Americano da Costa
Forma Normal de Chomsky
Lema do Bombeamento – Gramáticas Livres do Contexto
Linguagens Livres de Contexto
Lema da Bomba (Pumping Lemma) para linguagens livre de contexto
esquerda p/ direita,read only
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
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.
Identificando Linguagens Não Regulares
Métodos de Classificação por Seleção: HeapSort
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Sintática Ascendente
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
Alfabetos, Palavras e Linguagens
Exercícios Linguagens Formais.
Conceitos Básicos.
Campus de Caraguatatuba
Prof. Bruno Moreno Aula 4 – 11/03/2011
Prof. Roberto Cristóvão
Lema do Bombeamento Linguagens Livres de Contexto
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 9 João M. P. Cardoso
Lema do Bombeamento Linguagens Livres de Contexto
Aula 07 – Limite e Continuidade
Teorema de Rolle e Teorema do Valor Médio
Algorítmos e estrutura de dados III
Gramáticas Livres de Contexto
Informática Teórica Engenharia da Computação
Expressões Regulares e Gramáticas
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Matemática Matriz Inversa
Compiladores.
Polinômios e equações algébricas
Tradução Dirigida por Sintaxe

Linguagens Formais e Autômatos
Disciplina Análise de Algoritmos Bacharelado em CC
LFA: Unidade 03 – Parte B Engenharia/Ciência da Computação
Estado Final Único para NFAs e DFAs
Programação Lógica com Prolog
Linguagens Livres de Contexto

Faculdade Pernambucana - FAPE Setembro/2007

Engenharia/Ciência da Computação
Sintaxe de uma Linguagem
Analisador sintático: Tipos de análises sintáticas
Prof. Daniel Morais dos Reis
Reverso de uma Linguagem Regular
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Árvores (introdução) Anjolina Grisi de Oliveira Obs: vários slides foram cedidos por Adolfo Almeida Duran (UFBA)
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:

Linguagens Livre de Contexto <stmt>::=<if-stmt>|<while-stmt>| <begin-stmt>|<assg-stmt> <if-stmt>::=if <bool-expr> then <stmt> else <stmt> <while-stmt>::=while <bool-expr> do <stmt> <begin-stmt>::=begin <stmt-list> end <stmt-list>::=<stmt>;<stmt-list>|<stmt> <assg_stmt>::=<var>:=<arith-expr>

<bool-expr>::= <arith-expr><comp-op><arith-expr> <comp.-op>::=<|>|≤|≥|≠|=| <arith-expr>::=<var>|<const>| (<arith-expr><arith-op><arith-expr>) <arith-op>::=+ | - | *| / <const>::=0|1|2|3|4|5|6|7|8|9 <var>::=a|b|c|…|x|y|z BNF (Backus-Naur form)dando a definição formal de uma linguagem de “programação”.

Mais Exemplos L = {anbn|n0} é livre de contexto. Se em L substituirmos ‘a’ por ‘(‘ e ‘b’ por ‘)’, cadeias de parênte-ses tais como ( ( ) ) e ( ( ( ) ) ) estarão em L. L descreve uma estrutura aninhada comum em linguagens de progra-mação.

Gramáticas Livre De Contexto As produções numa gramática regu-lar são restritas de duas formas: o lado esquerdo deve conter uma única variável, enquanto o lado direito tem uma forma especial. Para criar uma gramática “mais poderosa”, devemos relaxar algumas dessas condições .

Mantemos a restrição sobre o lado esquerdo, mas permitimos qualquer coisa no lado direito. Definição: Uma gramática G=<V,T,S,P> é livre de contexto se todas as produções em P tem a forma Ax, onde AV e x(VT)*.

A linguagem L é livre de contexto sss existe uma gramática livre de contexto G tal que L = L(G). Obs: Toda linguagem regular é livre de contexto.

Exemplos G=<{S},{a,b},S,P>, com produ-ções SaSa; SbSb, S Uma derivação típica nessa gramática é SaSaaaSaaaabSbaaaaabbaa Isto torna claro que L(G)={WWR|W{a, b}*}

G=<{S, A, B}, {a, b}, S, P>, Mais Exemplos A gramática G=<{S, A, B}, {a, b}, S, P>, onde P é SabB; AaaBb; BbbAa; A L(G)={ab (bbaa)n bba (ba)n |n0}

Derivação Mais à Esquerda e Mais à Direita G=<{A,B,S},{a,b},S,P> com produções: 1. SAB; 2. AaaA; 3. A; 4. BBb; 5. B. L(G)={a2nbm|n0, m0} S1AB2aaAB3aaB4aaBb5aab S1AB4ABb 2aaABb5aaAb 3aab

Definição: Uma derivação diz-se mais à esquerda se em cada etapa a variável mais a esquerda é trocada na forma sentencial. Se em cada etapa a variável mais a direita é trocada, dizemos que a derivação é mais à direita.

Exemplos Considere a gramática com produ-ções SaAB, AbBb, BA| uma derivação mais à esquerda da cadeia abbbb: SaABabBbBabAbBabbBbbBabbbBabbbb uma derivação mais à direita: SaABaAabBbabAbabbBbbabbbb.

Árvores de Derivação Mostra derivações independente da ordem em que as produções são usadas. Uma árvore de derivação é uma árvore ordenada onde: os nodos são rotulados com os lados esquerdos das produções e o filho de cada nodo representa seus correspondentes lados direitos.

Exemplo Aa b A B c A a b B c

Definição Seja G=<V, T, S, P> uma gramática livre de contexto. Uma árvore ordenada é uma árvore de derivação para G se e somente se ela tem as seguintes propriedades: 1. A raiz tem rótulo S 2. Toda folha tem rótulo de T{} 3. Todo vértice interior tem um rótulo de V.

4. Se um vértice tem rótulo A  V, e seus filhos são rotulados(da es-querda para direita) a1, a2, …,an, então P deve conter uma produção da forma Aa1a2…an 5. Uma folha rotulada  o seu pai não tem nenhum filho além dàquele rótulado .

árvore de derivação parcial: Uma árvore que tem as proprieda-des 3, 4 e 5 mas não necessaria-mente 1 e a propriedade 2 é trocada por: 2a.Toda folha tem rótulo em VT{}

cadeia gerada A cadeia de símbolos obtida lendo-se, da esquerda para à direita, omitindo qualquer  encontrado, diz-se gerada pela árvore. Exemplo: Considere a gramática G, com produções SaAB AbBb BA | 

Exemplo (a) S a B A b a) ( A árvore (a) é uma ár-vore de derivação par-cial para G. A cadeia abBbB, gera-da pela árvore, é uma forma sentencial de G.

Exemplo (b) a árvore (b) é uma árvore de derivação. A cadeia gerada, abbbb é uma sentença de L(G). (b) S a A b B 

Relação entre Formas Sentenciais e Árvores de Derivações Árvores de derivação dão uma des-crição explícita e compreensível de derivações. Assim como grafo de transições para autômatos finitos, elas são úteis nos argumentos.

Teorema Seja G=<V, T,S, P> uma gramática livre de contexto. Então pra todo wL(G) existe uma árvore de derivação G cuja cadeia gerada é w. Inversamente a cadeia gerada por qual-quer árvore de derivação está em G. Além disso, se tG é qualquer árvore de derivação parcial para G cuja raiz é rotulada S, então tG gera uma forma sentencial de G.

Prova Primeiramente, mostraremos que para toda forma sentencial de G existe uma árvore de derivação parcial. Faremos isso por indução no número de etapas da derivação.

Prova (cont.): base Como base, observemos que a afir-mação é verdadeira pra toda forma sentencial derivada em uma etapa. Como Su implica que existe uma produção Su, isto segue imediata-mente da definição da árvore de derivação.

Prova(cont.): passo Suponhamos que para toda forma sentencial derivável em n etapas, existem uma árvore de derivação parcial correspondente.

Prova(cont.): passo Agora qualquer w derivável em n+1 etapas deve ser tal que S*x A y, x, y  (V U T)*, A V em n etapas, e x A yx a1, a2…amy = w, ai  VT.

mas por hipótese de indução existe uma árvore de derivação parcial que gera x A y. como G deve ter produção Aa1a2…am, expandindo as folhas rotuladas A, obtemos uma árvore de derivação parcial que gera w. Logo, por indução, o resultado é verdadeiro para toda forma senten-cial.

Usando um argumento análogo, podemos mostrar que toda árvore de derivação parcial representa alguma forma sentencial. Uma árvore de derivação é uma árvore de derivação parcial cujas folhas são terminais. Logo toda sentença em L(G) é gerada por alguma árvore de deri-vação de G e toda árvore de derivação gerada está em L(G). q.e.d

Árvores de derivação mostram quais produções são usadas para se obter uma sentença, mas não dá a ordem de suas aplicações. Árvores de derivações são capazes de representar qualquer derivação, refletindo o fato de que esta ordem é irrelevante, uma observação que nos permite fechar o buraco na discussão anterior.

Por definição, qualquer wL(G) tem uma derivação mais a esquerda e uma mais a direita. dada uma árvore de derivação, po-demos sempre obter uma derivação mais a esquerda pensando na árvore como tendo sido construída de tal modo que a variável mais a esquerda foi sempre expandida primeiro. Todo w  L(G) tem pelo menosuma derivação mais a esquerda e uma mais a direita.