A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagens Livre-de-contexto

Apresentações semelhantes


Apresentação em tema: "Linguagens Livre-de-contexto"— Transcrição da apresentação:

1 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

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ê Derive: o garoto vê uma flor <FRASE>
 <FRASE NOMINAL><FRASE VERBAL>  <SUJEITO COMPOSTO> <FRASE VERBAL>  <ARTIGO><SUJEITO> <FRASE VERBAL>  um <SUJEITO> <FRASE VERBAL>  um garoto <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) G2= ({A}, {a}, {A  aA, A  a}, A)
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/deriva uwv 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 Exemplos: G2= ({A}, {a}, {A  aA, A  a}, A)
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 palavra w  * 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: A  0A1  00A11  00B11  00#11 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

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 do AFD. 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 ambiguamente pela 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>  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 ui na 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  S S  ASA | aB | a A  B | S | l B  b 2.2) Remover regra A  l : S0  S S  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 | AS S  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 Autômato de Pilha (Pushdown)
Definição: Um autômato de pilha P é uma 6-tupla <Q, , , , q0, F>, onde: Controle de Estados a b entrada y x z pilha 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).

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 Autômato de Pilha P1 : L(P1) = ?
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 P1 : L(P1) = ?

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

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

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

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 Autômato de Pilha (equivalência)
qinicial qloop qfinal ,   S$ , A  w para a regar A  w a, a   para o terminal a , $   (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 R e LC Sabemos que :
Linguagens Livre de contexto Linguagens Regulares 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).

51 Linguagem sensível-ao-contexto
Seja G = < {S,B,C},{a,b,c},S,R >, onde R: S   S  aSBC S  Abc CB  BC aB  ab bB  bb bC  bc cC  cc L(G) = { anbncn : n  0 }

52 Hierarquia de Chomsky Linguagens Regulares (tipo 3)
AFND,AFD Gramáticas Regulares (lineares), Expressões regulares Linguagens Livre-de-Contexto (tipo 2) APND Gramáticas livre-de-contexto APD Gramáticas não-ambíguas Linguagens Sensíveis-ao-Contexto (tipo 1) LBA Gramáticas Sensíveis-ao-contexto Linguagens em Geral (tipo 0) Máquina de Turing Gramáticas tipo 0.

53 Hierarquia de Chomsky Tipo 1 – reconhecida por LBA
Tipo 2 – reconhecida por AP’s Tipo 3 – AF’s Tipo 0 – reconhecida por Máquina de Turing


Carregar ppt "Linguagens Livre-de-contexto"

Apresentações semelhantes


Anúncios Google