Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de...
Transcript of Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de...
![Page 1: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/1.jpg)
LinguagensLinguagens
Livre-de-contextoLivre-de-contexto
Teoria da Computação 2005.1
Universidade Federal de Campina Grande – UFCGUniversidade Federal de Campina Grande – UFCGCentro de Engenharia Elétrica e Informática – CEEICentro de Engenharia Elétrica e Informática – CEEIDepartamento de Sistemas e Computação – DSCDepartamento de Sistemas e Computação – DSC
![Page 2: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/2.jpg)
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).
![Page 3: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/3.jpg)
Definição Formal: Uma gramática livre-de-contexto G é uma quádrupla (V, , R, S), onde:
1. V é um conjunto finito de variáveis (não-terminais).2. é um conjunto finito de elementos (terminais)3. R é um conjunto finito de regras do tipo onde
V e (V )*4. S V é o símbolo inicial.
Gramática Livre-de-Contexto
![Page 4: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/4.jpg)
GLC: exemplos
<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 que descreve uma parte da língua portuguesa
![Page 5: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/5.jpg)
GLC: exemplos
um garoto vê
<FRASE NOMINAL><FRASE VERBAL>
um garoto <VERBO COMPOSTO>
um garoto <VERBO>
um garoto vê
Derive: o garoto vê uma flor
<SUJEITO COMPOSTO> <FRASE VERBAL>
<ARTIGO><SUJEITO> <FRASE VERBAL>
um <SUJEITO> <FRASE VERBAL>
um garoto <FRASE VERBAL>
<FRASE>
![Page 6: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/6.jpg)
G1= (V, , R, S) V = {A,B}, = {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)
GLC: exemplos
![Page 7: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/7.jpg)
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
Derivação: definição
![Page 8: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/8.jpg)
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
Derivação
![Page 9: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/9.jpg)
Definição: Uma gramática livre-de-contexto G=<V, , R, S> gera uma palavra w * se, e somente se, S * w
A palavra 00 #11 * é gerada pela gramática G1, pois:
Exemplo: G4 = ({A, B}, {0, 1, #}, R, A)
R: A 0A1 A B A #
Palavra gerada
A
Ou seja, A * 00#11
0A1 00A11 00B11 00#11
![Page 10: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/10.jpg)
Exemplo: G5 = ({S}, {0, 1}, R, S)
R: S 0S1 S
Palavra gerada
0S1 00S11 0011
0S1 00S11 000S111 000111
S S
S
![Page 11: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/11.jpg)
Seja G=<V, , R, S> uma gramática livre-de-contexto. Então,
L(G) = {w *: 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).
Linguagem Livre-de-contexto
![Page 12: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/12.jpg)
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.
Concepção de Gramática Livre-de-contexto
![Page 13: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/13.jpg)
Exemplo: obter uma gramática para a linguagem:
{0n1n: n ≥ 0} {1m0m: m ≥ 0}
Gramática Livre-de-contexto
S1 0S11 |
S2 1S20 |
S S1 | S2
S1 0S11 | S2 1S20 |
Primeiro, construir uma gramática para {0n1n: n ≥ 0}:
Segundo, construir uma gramática para {1m0m: m ≥ 0}:
E por fim, adicionar a regra S S1 | S2 :
![Page 14: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/14.jpg)
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:1. Crie uma variável Ri para cada estado qi do AFD.2. Adicione a regra Ri aRj à GLC se (qi , a) = qj é
uma transição no AFD.3. Adicione a regra Ri se qi é um estado de
reconhecimento do AFD.
4. Faça R0 o símbolo inicial, onde q0 é o estado inicial.
Gramática Livre-de-contexto
![Page 15: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/15.jpg)
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
Gramática Livre-de-contexto
![Page 16: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/16.jpg)
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 de derivação (Parse tree)
![Page 17: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/17.jpg)
As palavras a + a a e (a + a) a podem ser geradas em G4. As seguintesfiguras(árvores) ilustram esse fato:
Árvore
![Page 18: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/18.jpg)
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.
Ambigüidade
![Page 19: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/19.jpg)
Exemplo: G5
<EXPR> <EXPR> + <EXPR>
<EXPR> <EXPR> <EXPR> <EXPR> (<EXPR>) <EXPR> a
A palavra a + a a é derivada ambiguamente em G5.
Ambigüidade
![Page 20: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/20.jpg)
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.
Ambigüidade
![Page 21: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/21.jpg)
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
![Page 22: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/22.jpg)
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
![Page 23: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/23.jpg)
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.
Gramática Linear-à-Direita
Seja w = a1a2...an L(M)
Assim, w L(GM).
![Page 24: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/24.jpg)
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 | bTT aS | bS |
Gramática Linear-à-Direita
![Page 25: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/25.jpg)
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).
![Page 26: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/26.jpg)
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
![Page 27: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/27.jpg)
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 Linear-à-Direita
![Page 28: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/28.jpg)
Teorema 11Uma gramática livre-de-contexto G é dita ser regular ou tipo3 se ela é linear-à-direita / linear-à-esquerda.
Gramática Regular
![Page 29: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/29.jpg)
Definição:
Uma gramática livre-de-contexto está na Forma Normal de Chomsky (FNC) se cada regra é da forma:
A BCA 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 , onde S é a variável inicial.
Forma Normal de Chomsky
![Page 30: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/30.jpg)
Teorema 12
Qualquer linguagem de livre contexto é gerada por uma gramática de livre contexto na forma normal de Chomsky
Idéia da provaEfetuar modificações na gramática original preservando a linguagem gerada
1. 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
![Page 31: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/31.jpg)
2. Removemos uma regra vazia A , 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 , 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
![Page 32: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/32.jpg)
3. 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
![Page 33: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/33.jpg)
4. 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.
Forma Normal de Chomsky
![Page 34: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/34.jpg)
Exemplo: original GLC G6 :
Forma Normal de Chomsky
S ASA | aBA B | SB b |
1) S0 S
S ASA | aB A B | SB b |
![Page 35: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/35.jpg)
2.1) Remover regra B :
S0 S S ASA | aB | a
A B | S | B b
2.2) Remover regra A :
S0 S S ASA | aB | a | SA | AS | S
A B | S B b
Forma Normal de Chomsky
![Page 36: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/36.jpg)
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 | ASS ASA | aB | a | SA | AS
A b | ASA | aB | a | SA | AS B b
Forma Normal de Chomsky
![Page 37: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/37.jpg)
4) Converter as regras remanescentes p/ a forma apropriada:
Forma Normal de Chomsky
S0 AA1 | UB | a | SA | AS
S AA1 | UB | a | SA | AS
A b | AA1 | UB | a | SA | AS
A1 AS
U aB b
![Page 38: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/38.jpg)
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 Chomsky
![Page 39: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/39.jpg)
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.
Forma Normal de Greibach
![Page 40: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/40.jpg)
Autômato de Pilha (Pushdown)
1. Q é o conjunto de estados
2. é o alfabeto de entrada
3. é o alfabeto da pilha
4. : Q x x l P(Q x l )
5. q0 Q é o estado inicial
6. F é o conjunto de estados finais (ou de aceitação).
Um autômato de pilha P é uma 6-tupla <Q, , , , q0, F>, onde:Controle
de Estados
a a b b
entrada
y
x
z
pilha
Definição:
![Page 41: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/41.jpg)
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:
1. r0 = q0 e s0 = (começa no estado inicial e a pilha vazia).
2. 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 *
3. rm F
![Page 42: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/42.jpg)
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).
L(P1) = ?
P1 :
Exemplo 1
![Page 43: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/43.jpg)
Autômato de Pilha
P2 :
L(P2) = ?
Exemplo 2
![Page 44: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/44.jpg)
Autômato de Pilha
Construir P tal que L(P) = { wwR : w {0,1}* }
Exercício:
![Page 45: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/45.jpg)
Autômato de Pilha (extensão de )
’(q,a,s) = (r, xyz)
q
r
a, s xyz
q2
q1
q
r
a, s z
, y
, x
![Page 46: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/46.jpg)
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.
![Page 47: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/47.jpg)
Autômato de Pilha (equivalência)
Funcionamento de P:
1. Colocar a cadeia S$ na pilha.2. Repetir
1. 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).
2. 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.
3. Se o topo da pilha é $ entrar no estado de aceitação. A palavra é aceita.
![Page 48: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/48.jpg)
Autômato de Pilha (equivalência)
1. (qinicio, , ) = { (qloop, S$) }
2. (qloop, , A) = { (qloop, w) : A w R }(qloop, a, a) = { (qloop, ) } (qloop, , $) = { qaceita, )}
qinicial
qloop
qfinal
, S$
, A w para a regar A wa, a para o terminal a
, $
![Page 49: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/49.jpg)
Autômato de Pilha (equivalência)
Lema 2Se 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.
![Page 50: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/50.jpg)
Linguagens R e LC
Sabemos que :Linguagens Livre de contexto
LinguagensRegulares
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).
![Page 51: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/51.jpg)
Linguagem sensível-ao-contexto
Seja G = < {S,B,C},{a,b,c},S,R >, onde R:
S S aSBCS AbcCB BCaB abbB bbbC bccC cc
L(G) = { anbncn : n 0 }
![Page 52: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/52.jpg)
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.
![Page 53: Linguagens Livre-de-contexto Livre-de-contexto Teoria da Computação 2005.1 Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica.](https://reader034.fdocuments.net/reader034/viewer/2022051820/552fc0f8497959413d8b53d4/html5/thumbnails/53.jpg)
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