1 / 53

Linguagens Livre-de-contexto

Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC. Linguagens Livre-de-contexto. Teoria da Computação 2005.1. Linguagens Livre-de-contexto. Gramática

Download Presentation

Linguagens Livre-de-contexto

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universidade Federal de Campina Grande – UFCGCentro de Engenharia Elétrica e Informática – CEEIDepartamento de Sistemas e Computação – DSC Linguagens Livre-de-contexto Teoria da Computação 2005.1

  2. Linguagens Livre-de-contexto Gramática • Gramática é um método de descrever linguagens através de um processo de geração de suas palavras • (em oposição ao processo de reconhecimento inerente aos AF’s).

  3. Gramática Livre-de-Contexto Definição Formal:Uma gramática livre-de-contexto G é uma quádrupla (V, , R, S), onde: • V é um conjunto finito de variáveis (não-terminais). • é um conjunto finito de elementos (terminais) • R é um conjunto finito de regras do tipo   onde   V e  (V )* • S  Vé o símbolo inicial.

  4. GLC: exemplos • GLC que descreve uma parte da língua portuguesa • <FRASE>  <FRASE NOMINAL><FRASE VERBAL> • <FRASE NOMINAIL>  <SUJEITO COMPOSTO>| <SUJEITO COMPOSTO><FRASE PREPOSICIONAL> • <FRASE VERBAL>  <VERBO COMPOSTO>|<VERBO COMPOSTO><FRASE PREPOSICIONAL> • <FRASE PREPOSICIONAL>  <PREPOSIÇÃO><SUJEITO COMPOSTO> • <SUJEITO COMPOSTO>  <ARTIGO><SUJEITO> • <VERBO COMPOSTO>  <VERBO> | <VERBO><FRASE NOMINAL> • <ARTIGO>  um(a) | o(a) • <SUJEITO>  garoto | garota | flor • <VERBO>  toca | gosta | vê • <PREPOSIÇÃO>  com

  5. GLC: exemplos • um garoto vê <FRASE>  <FRASE NOMINAL><FRASE VERBAL>  <SUJEITO COMPOSTO> <FRASE VERBAL>  <ARTIGO><SUJEITO><FRASE VERBAL>  um <SUJEITO> <FRASE VERBAL>  umgaroto <FRASE VERBAL>  um garoto <VERBO COMPOSTO>  um garoto <VERBO>  um garoto vê • Derive: o garoto vê uma flor

  6. GLC: exemplos • G1= (V, S, R, S) • V = {A,B}, • S = {0,1}, • R = {A  0B, B  1}, • S = A • G2= ({A}, {a}, {A  aA, A  a}, A) • G3= ({A,B}, {0,1}, {A  0A1, A  }, A)

  7. Derivação: definição • Sejam: • (i) G = (V, , R, S) uma gramática livre-de-contexto, • (ii) u, v e w (V )* e • (iii) A w uma regra de G. • Dizemos que uAv produz/derivauwv pela aplicação da regra A w, e expressamos isso como: uAv uwv . • Escrevemos u* v para o caso de: • u = v , ou • existir uma seqüência u1, u2, ... uk tal que: • u1 = u • uk = v • uiui+1 para 1 i  k

  8. Derivação • u* v sse • u = v , ou • existir uma derivação de v a partir de u u = u1  u2  ...  uk = v Exemplos: • G2= ({A}, {a}, {A  aA, A  a}, A) • AA * aAaA pois AA  AaA  aAaA • AA * aa pois AA  aA  aa

  9. Palavra gerada Definição: Uma gramática livre-de-contexto G=<V, , R, S> gera uma palavraw* se, e somente se, S *w Exemplo: G4 = ({A, B}, {0, 1, #}, R, A) R: A  0A1 A  B A  # A palavra 00 #11  * é gerada pela gramática G1, pois: 0A1  00A11  00B11 00#11 A Ou seja, A * 00#11

  10. Palavra gerada Exemplo: G5 = ({S}, {0, 1}, R, S) R: S  0S1 S   • S  • S 0S1  00S11  0011 • S 0S1  00S11  000S111  000111

  11. Linguagem Livre-de-contexto • Seja G=<V, , R, S> uma gramática livre-de-contexto. Então, L(G) = {wS*: S * w} • L é uma linguagem livre-de-contexto se, e somente se, existir uma gramática G livre-de-contexto tal que L = L(G).

  12. Concepção de Gramática Livre-de-contexto Se a linguagem em mente pode ser “quebrada” em linguagens mais simples, então construa uma gramática para cada linguagem simples. As gramáticas individuas podem ser facilmente combinadas em uma gramática para a linguagem original.

  13. Gramática Livre-de-contexto Exemplo: obter uma gramática para a linguagem: {0n1n: n ≥ 0}  {1m0m: m ≥ 0} Primeiro, construir uma gramática para {0n1n: n ≥ 0}: S1 0S11 |  Segundo, construir uma gramática para {1m0m: m ≥ 0}: S2 1S20 |  E por fim, adicionar a regra S  S1 | S2 : S  S1 | S2 S1 0S11 |  S2 1S20 | 

  14. Gramática Livre-de-contexto Construir uma gramática livre-de-contexto para uma linguagem regular é fácil se podemos primeiro construir um AFD para aquela linguagem. • Converter uma AFD para uma GLC: • Crie uma variável Ri para cada estado qi doAFD. • Adicione a regra Ri  aRjà GLC se (qi , a) = qj é uma transição no AFD. • Adicione a regra Ri  l se qié um estado de reconhecimento do AFD. • Faça R0 o símbolo inicial, onde q0é o estado inicial.

  15. Gramática Livre-de-contexto Exemplo: L = {w {0, 1}* : w = x1, x {0, 1}* }. G = <V, , R, S>, V = {R1, R2}, = {0, 1}, S = R1 R: R1 0R1 R1 1R2 R2 0R1 R2 1R2 R2 

  16. Árvore de derivação (Parse tree) Considere a gramática G4 = <V, , R, S>, onde : V = {<EXPR>, <TERMO>, <FATOR>}  = {a, +, , (, )} R = <EXPR>  <EXPR> + <TERMO> | <TERMO> <TERMO>  <TERMO>  <FATOR> | <FATOR> <FATOR>  (<EXPR>) | a S = <EXPR>

  17. Árvore As palavras a + a  a e (a + a)  a podem ser geradas em G4. As seguintes figuras(árvores) ilustram esse fato:

  18. Ambigüidade • Algumas gramáticas podem gerar o mesmo string (palavra) de formas diversas. • Tais palavras terão diferentes árvores de derivação e assim diferentes significados. • Esse é um resultado indesejável em algumas aplicações como, por exemplo, em linguagens de programação onde um programa deve ter um único significado. • Se uma gramática gera uma mesma palavra de diferentes maneiras, dizemos que a palavra éderivada ambiguamentepela gramática. • Se uma gramática gera alguma palavra ambiguamente, dizemos que a gramática éambígua.

  19. Ambigüidade Exemplo: G5 <EXPR>  <EXPR> + <EXPR> <EXPR>  <EXPR>  <EXPR> <EXPR>  (<EXPR>) <EXPR>  a A palavra a + a  a é derivada ambiguamente em G5.

  20. Ambigüidade • Uma derivação de uma palavra w em uma gramática G é uma derivação mais à esquerda se em todos os passos, a variável mais à esquerda remanescente é a substituída. • Uma palavra wé derivada ambiguamente em uma gramática livre-de-contexto G se ela tem duas ou mais diferentes derivações mais à esquerda. • Geralmente, quando temos uma gramática ambígua, podemos encontrar uma gramática não-ambígua que gera a mesma linguagem. • Contudo, algumas linguagens livre-de-contexto só podem se geradas por gramáticas ambíguas. Essas linguagens são chamadas de inerentemente ambíguas.

  21. Gramática Linear-à-Direita Definição: Uma GLC G = <V, , R, S> é dita ser linear-à-direita se suas produções forem da forma A  xB, onde A  V, B  (V ) e x  * Exemplo: • G = <{S}, {a, b}, {S  aS, S  baa}, S> • L(G) = L(a*baa)

  22. Gramática Linear-à-Direita Teorema 9 Dado um AFD M = <Q, , , q, F>, então existe uma gramática linear-à-direita GM para a qual L(M) = L(GM). Prova: Assuma que Q = {q0, q1, ..., qn}, para algum n. Defina GM = <Q, , RM, q0 >, onde: RM = {q  a(q,a) | q  Q, a  }  {q   | q  F}. Ou seja, existe uma produção da forma s  bt para cada transição no autômato do estado s para o estado t tendo lido b, e uma produção da forma s   para cada estado final s em F.

  23. Gramática Linear-à-Direita • Então existe uma seqüência de estados: q0, q1, ..., qn, onde q0é inicial e qné final e as transições q0  q1  q2  ...  qn. • Então, existe a derivação seguinte em GM: q0  a1, (q0, a)  a1a2 (q1,a2 )  ....  a1a2...aM qM  a1a2...aM. • Seja w = a1a2...an L(M) • Assim, w  L(GM).

  24. Gramática Linear-à-Direita Exemplo: Seja M = < {S, T}, {a, b},  , S,{T}>, onde: (S, a) = T (T, a) = S (S, b) = T (T, b) = S. Então, GM = <{S, T}, {a, b}, RM, S>, onde: S  aT | bT T  aS | bS | 

  25. Gramática Linear-à-Direita Teorema 10 • Seja G = < V, , R, S > uma gramática linear-à-direita. Então, existe um AFND NG para o qual L(G) = L(NG).

  26. Gramática Linear-à-Direita Prova: Defina NG = <QG, , G, q0G, FG>, onde: • QG = {<z> | z =  ou z V ou existe um y  * e um B  V tal que B  yz é uma produção em R}. • q0G = {<S>}. • FG = {<  >}. • G (<w>, a) = {<x>|existe um y  * e um B  V tal que w = ax e B  yw  R}. • G Também contém: G (<B>, ) = {< v >| B v  R }.

  27. Gramática Linear-à-Direita Exemplo: G = <{T, S}, {a, b}, {S aS, S bT, T aa}, S>. Então: NG = <QG, {a, b}, G ,{<  >} >, onde: • QG = {<aS>, <S>, <bT>, <T>, <aa>, <a>, <>} • G(<S>, ) = {<aS>, <bT>} G(<T>, ) = {<aa>} G(<aS>, a) = {<S>} G(<bT>, b) = {<T>} G(<aa>, a) = {<a>} G(<a>, a) = {<  >} • e todas as outras são vazias: G(<S>, a) = , etc.

  28. Gramática Regular Teorema 11 Uma gramática livre-de-contexto G é dita ser regular ou tipo3 se ela é linear-à-direita / linear-à-esquerda.

  29. Forma Normal de Chomsky Definição: Uma gramática livre-de-contexto está na Forma Normal de Chomsky (FNC) se cada regra é da forma: A  BC A a onde aé um terminal e A, B e C são variáveis - exceto que B e C não podem ser a variável inicial. Permitimos também a regra S l, onde S é a variável inicial.

  30. Forma Normal de Chomsky Teorema 12 Qualquer linguagem de livre contexto é gerada por uma gramática de livre contexto na forma normal de Chomsky Idéia da prova Efetuar modificações na gramática original preservando a linguagem gerada • Adicionamos um novo símbolo inicial S0 e a regra S0 S, onde S era o símbolo inicial original. Esta modificação nos certifica de que o símbolo inicial não ocorrerá no lado esquerdo de uma regra.

  31. Forma Normal de Chomsky • Removemos uma regra vazia A l, onde A não é a variável inicial. Então, para cada ocorrência de A na parte direita de uma regra, adicionamos uma nova regra com esta ocorrência eliminada. Em outras palavras, se R uAvé uma regra em que u e v são cadeias de variáveis e terminais, adicionamos a regra R uv. Fazendo isto para cada ocorrência de A, então a regra R uAvAw nos leva a adicionar a regra R uvw. Se tivermos a regra R  A, adicionamos R l, a não ser que tenhamos removido a regra anteriormente. Repetimos o procedimento até que sejam eliminadas todas as regras vazias que não envolvam a variável inicial

  32. Forma Normal de Chomsky • Terceiro, tratamos de todas as regras unitárias. Remove-se regras unitárias do tipo A  B, e então sempre que surge uma regra do tipo B u, a substituímos por A u , a não ser que esta seja uma regra unitária removida anteriormente. Como antes, ué uma cadeia de variáveis e terminais. Repetimos o processo até que tenhamos eliminado todas as regras unitárias.

  33. Forma Normal de Chomsky • Convertemos todas as regras restantes para a forma apropriada. Substituímos cada regra A u1u2...uk, onde k  3 e cada uié uma variável ou símbolo terminal, com as regras A u1A1, A1u2A2, A2u3A3, ... Ak-1uk. Os Ai são novas variáveis. Se k  2, substituímos qualquer terminal uina regra anterior com a(s) nova(s) variável(is) Ui e adicionamos a regra Uiui.

  34. Forma Normal de Chomsky Exemplo: original GLC G6 : S  ASA | aB A  B | S B  b | l 1)S0 S S  ASA | aB A  B | S B  b | l

  35. Forma Normal de Chomsky 2.1) Remover regra B l: S0 SS  ASA | aB | a A  B | S | lB  b 2.2) Remover regra A l: S0 SS  ASA | aB | a | SA | AS | S A  B | S B  b

  36. Forma Normal de Chomsky 3.1) Remover regras S  S e S0 S : S0ASA | aB | a | SA | ASS ASA | aB | a | SA | AS A  B | S B  b 3.2) Remover regras A  B e A  S : S0 ASA | aB | a | SA | AS S  ASA | aB | a | SA | AS A b | ASA | aB | a | SA | AS B  b

  37. Forma Normal de Chomsky 4)Converter as regras remanescentes p/ a forma apropriada: S0 AA1 | UB | a | SA | AS S  AA1 | UB | a | SA | AS A  b | AA1 | UB | a | SA | AS A1  AS U  a B  b

  38. Forma Normal de Chomsky • Gramáticas FNC permitem uma correspondência exata entre o comprimento de uma palavra (apenas terminais) e o comprimento da derivação que produz a palavra. • As árvores de derivação de uma gramática FNC são árvores binárias e os limites máximo e mínimo de profundidade (nível) da árvore de derivação para uma palavra de comprimento n pode ser calculado.

  39. Forma Normal de Greibach Definição: Uma gramática livre-de-contexto G é dita estar na Forma Normal de Greibach (FNG) se as suas produções são da forma A  aB,   , B  (V )* e B não contem o símbolo inicial S. É permitido a produção S  . • Assim como FNC, toda gramática G pode ser colocada na forma FNG. • Toda produção contém no mínimo um terminal. (|w| > 0), então G produz palavras de comprimento n > 0 em no máximo n passos. • Evita a ocorrência de recursão à esquerda.

  40. Controle de Estados x y a b b a entrada z pilha Autômato de Pilha (Pushdown) • Q é o conjunto de estados •  é o alfabeto de entrada •  é o alfabeto da pilha •  : Q x  x l P(Q x l ) • q0 Q é o estado inicial • F é o conjunto de estados finais (ou de aceitação). Definição: Um autômato de pilha P é uma 6-tupla <Q, , , , q0, F>, onde:

  41. Autômato de Pilha: palavra aceita Um AP aceita uma palavra w = w1w2...wm, wi, sse existem sequências: r0, r1,..., rm ri Q e s0, s1,…, sm sj  * tais que: r0 =q0 e s0 =  (começa no estado inicial e a pilha vazia). para i = 0,… , m-1, (ri+1, b)  d(ri, wi+1, a), onde: si=at e si+1=bt para algum a, b e t  * rm F

  42. P1 : Autômato de Pilha a,b  c : a máquina lê um a na entrada e substitui o símbolo b do topo da pilha pelo símbolo c. Se a = , ela faz a transição sem ler qualquer símbolo da entrada. Se b = , ela insere o símbolo c no topo da pilha (empilhar). Se c = , ela retira o símbolo b do topo da pilha (desempilha). Exemplo 1 L(P1) = ?

  43. P2 : Autômato de Pilha Exemplo 2 L(P2) = ?

  44. Autômato de Pilha Construir P tal que L(P) = { wwR : w  {0,1}* } Exercício:

  45. q1 q2 a, s  z q q a, s  xyz  r r ,  y ,  x Autômato de Pilha (extensão de ) • ’(q,a,s) = (r, xyz)

  46. Autômato de Pilha (equivalência) Lema 1 Se uma linguagem é livre-de-contexto então ela é reconhecida por um autômato de pilha P. Idéia: P é construido a partir da gramática que define a linguagem. P aceita entrada w determinando (não-deterministicamente) se existe alguma série de substituições usando regras da gramática que leve do símbolo inicial à w.

  47. Autômato de Pilha (equivalência) Funcionamento de P: • Colocar a cadeia S$ na pilha. • Repetir • Se o topo da pilha é uma variável A, selecionar (não-deterministicamente) uma das regras para A, (A  w), e substituir A na pilha pelo lado direito da regra (w). • Se o topo da pilha é um terminal a, ler a entrada e compará-la com a. Se“casa”, desempilha a e repetir. Se não, rejeitar esse ramo do não-determinismo. • Se o topo da pilha é $ entrar no estado de aceitação. A palavra é aceita.

  48. qinicial ,   S$ qloop , A  w para a regar A  w a, a   para o terminal a qfinal , $   Autômato de Pilha (equivalência) • (qinicio, , ) = { (qloop, S$) } • (qloop, , A) = { (qloop, w) : A  w  R }(qloop, a, a) = { (qloop, ) } (qloop, , $) = { qaceita, )}

  49. Autômato de Pilha (equivalência) Lema 2 Se um autômato de pilha reconhece uma linguagem, então ela é livre-de-contexto. Prova: ver o livro Teorema 13 Uma linguagem é livre de contexto se e somente se existe um autômato de pilha que a reconhece.

  50. Linguagens Livre de contexto LinguagensRegulares Linguagens R e LC Sabemos que : E que existem outro tipo de linguagens além dessas ( LR e LLC ) : - Pelo teorema do bombeamento. Por exemplo : {anbncn : n  0} - Por existir um número incontável de linguagens e a classe LLC é contável (enumerável).

More Related