540 likes | 661 Views
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
E N D
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
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).
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.
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
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
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)
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 • uiui+1 para 1 i k
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
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
Palavra gerada Exemplo: G5 = ({S}, {0, 1}, R, S) R: S 0S1 S • S • S 0S1 00S11 0011 • S 0S1 00S11 000S111 000111
Linguagem Livre-de-contexto • Seja G=<V, , R, S> uma gramática livre-de-contexto. Então, L(G) = {wS*: 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).
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.
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 |
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.
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
Á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>
Árvore As palavras a + a a e (a + a) a podem ser geradas em G4. As seguintes figuras(árvores) ilustram esse fato:
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.
Ambigüidade Exemplo: G5 <EXPR> <EXPR> + <EXPR> <EXPR> <EXPR> <EXPR> <EXPR> (<EXPR>) <EXPR> a A palavra a + a a é derivada ambiguamente em G5.
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.
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)
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.
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).
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 |
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).
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 }.
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.
Gramática Regular Teorema 11 Uma gramática livre-de-contexto G é dita ser regular ou tipo3 se ela é linear-à-direita / linear-à-esquerda.
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.
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.
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
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.
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, A1u2A2, A2u3A3, ... Ak-1uk. 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 Uiui.
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
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
Forma Normal de Chomsky 3.1) Remover regras S S e S0 S : S0ASA | 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
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
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.
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.
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:
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
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) = ?
P2 : Autômato de Pilha Exemplo 2 L(P2) = ?
Autômato de Pilha Construir P tal que L(P) = { wwR : w {0,1}* } Exercício:
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)
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.
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.
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, )}
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.
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).