Linguagens Formais e Autômatos
Ricardo Terra
rterrabh [at] gmail.com
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 1 / 468
CV
Nome: Ricardo Terra
Email: terra [at] dcc.ufla.br
www: dcc.ufla.br/⇠terra
Twitter: rterrabh
Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo),
Post-Ph.D. (INRIA/Université Lille 1)
Background
Acadêmico : UFLA (desde 2014), UFSJ (1 ano ), FUMEC (3 anos ), UNIPAC (1 ano ), FAMINAS (3 anos )
Profissional : DBA Eng. (1 ano ), Synos (2 anos ), Stefanini (1 ano )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 2 / 468
1. Revisão – Conteúdo
Conjuntos, relações e funções 4
1 Revisão 3
Definições Recursivas 8
Indução Matemática 13
Linguagens Formais e Autômatos (LFA) 17
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 3 / 468
Revisão
Conjuntos, relações e funções
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 4 / 468
Revisão – Conjuntos, relações e funções (1–34)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 5 / 468
Revisão – Conjuntos, relações e funções (1–9)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 6 / 468
Revisão – Conjuntos, relações e funções (1–7)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 7 / 468
Revisão
Definições Recursivas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 8 / 468
Revisão – Definições Recursivas
Definições Recursivas
Conjuntos enumeráveis podem ser definidos por meio de
uma definição recursiva
Uma definição recursiva especifica como um conjunto
pode ser gerado a partir de um subconjunto do mesmo
aplicando-se operações um número finito de vezes
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 9 / 468
Revisão – Definições Recursivas
Definições Recursivas
Uma definição recursiva de um conjunto A consta de três
partes:
(i) base: especificação de um conjunto base B ⇢ A
(ii) passo recursivo: especificação de um elenco de operações
que, se aplicadas a elementos de B, geram elementos de A
(iii) fechamento: afirmação que os únicos elementos de A são
aqueles que podem ser obtidos a partir dos elementos de B
aplicando-se um número finito de vezes as operações
especificadas em (ii)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 10 / 468
Revisão – Definições Recursivas
Exemplo #1: Conjunto N
O conjunto N pode ser definido a partir de {0} usando-se a
operação s (sucessor)
(i) base: {0} ⇢ N
(ii) passo recursivo: se n 2 N, então s(n) 2 N
(iii) fechamento: só pertence a N, o número que pode ser
obtido de acordo com (i) e (ii)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 11 / 468
Revisão – Definições Recursivas
Exemplo #2: Função Fatorial fat : N ! N
(i) base: fat(0) = 1
(ii) passo recursivo: fat(n) = n x fat(n 1), para n 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 12 / 468
Revisão – Definições Recursivas
Exemplo #2: Função Fatorial fat : N ! N
(i) base: fat(0) = 1
(ii) passo recursivo: fat(n) = n x fat(n 1), para n 1
Mais formalmente
(i) base: {(0, 1)} ⇢ fat
(ii) passo recursivo: se n 1 e (n 1, k) 2 fat, então
(n, n x k) 2 fat
(iii) fechamento: só pertence a fat, o par que pode ser obtido
conforme (i) e (ii)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 12 / 468
Revisão
Indução Matemática
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 13 / 468
Revisão – Indução Matemática
Indução Matemática
Técnica usada para provar que uma propriedade é válida
para todos elementos de um conjunto definido
recursivamente (Veja Sudkamp [6], Seção 1.7)
Considere X um conjunto tendo como base X0
Seja X0, X1, . . . , Xn a sequência de conjuntos gerados por um
processo recursivo e P uma propriedade
Prova consiste em:
Base: Mostrar que P é válido 8x 2 X0
Hipótese: P é válido 8x 2 X0, X1, ..., Xk
Passo indutivo: Mostrar que P também é válido 8x 2 Xk+1
Assim, P é válido 8x 2 X
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 14 / 468
Revisão – Indução Matemática
Exemplo #1: Provar que
Pn
i=1 i = n(n+1)
2
Base: P(1) é verdadeiro, i.e.,
P1
i=1 i = 1(1+1)
2 = 1
Hipótese: P é verdadeira para 0, 1, 2, 3, . . . , k, ou seja,
kX
i=1
i =
k(k + 1)
2
Passo indutivo: Provar que
PK+1
i=1 i = (K+1)((K+1)+1)
2 = (K+1)(K+2)
2
PK+1
i=1 i
=
PK
i=1 i + (k + 1) (definição somatório)
= k(k+1)
2 + (k + 1) (uso da hipótese de indução)
= k(k+1) + 2(k+1)
2 (matemática básica)
= (k+1)(k+2)
2
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 15 / 468
Revisão – Indução Matemática
Exemplo #2: Provar que n! > 2n, 8n > 4
Base: P(5) é verdadeiro, i.e., (5! = 120) > (32 = 25)
Hipótese: P é verdadeira para 5, 6, 7, . . . , k, ou seja,
k! > 2k
, 8k > 4
Passo indutivo: Provar que (k + 1)! > 2(k+1)
(k + 1)!
= k! ⇥ (k + 1) (definição fatorial)
> 2k
⇥ (k + 1) (uso da hipótese de indução)
> 2k
⇥ 2 (pela certeza que k > 4)
= 2k+1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 16 / 468
Revisão
Linguagens Formais e Autômatos (LFA)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 17 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 18 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Definições Básicas
Linguagem: conjunto de palavras sobre um alfabeto
Alfabeto (⌃): conjunto de símbolos de uma linguagem
Palavra: sequência finita de símbolos de um alfabeto ⌃
|w| = no
de símbolos da palavra w
= palavra vazia, constituída de zero símbolos
Fecho de Kleene (*)
{a}⇤
= { , a, aa, aaa, aaaa, ...}
⌃⇤
= conjunto de todas as palavras do alfabeto
Fecho Positivo de Kleene (+)
{a}+
= {a}{a}⇤
= {a, aa, aaa, aaaa, ...}
⌃+
= ⌃⇤
{ }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 19 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Linguagem Regular (LR)
Uma linguagem regular é aquela que pode ser definida por
um conjunto regular
Um conjunto regular pode ser gerado a partir de ⌃ usando
operador de Kleene, união e concatenação
Definição recursiva:
Base: , { } e {a}(8a 2 ⌃) são conjuntos regulares
Passo recursivo: se X e Y são conjuntos regulares, então
X [ Y, XY e X⇤
também são conjuntos regulares
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 20 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Linguagem Regular (LR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
Conjunto regular: {a}{a, b}⇤{b}{a, b}⇤{a}
Linguagem Regular (LR) – Exercício de Fixação
1 L = palavras sobre {a, b} que começam com a e tenham
número par de b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 21 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Expressão Regular (ER)
Alguns autores (e.g., Sudkamp) usam abreviações para denotar
conjunto regulares:
{ } !
{a}(8a 2 ⌃) ! a(8a 2 ⌃)
{a, b} ! (a [ b)
{ab} ! (ab)
{u}⇤
! u⇤
{xx⇤
} ! x+
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 22 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Expressão Regular (ER) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
Expressão regular:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Expressão Regular (ER) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
Expressão regular: a(a [ b)⇤b(a [ b)⇤a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Expressão Regular (ER) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
Expressão regular: a(a [ b)⇤b(a [ b)⇤a
Expressão Regular (LR) – Exercícios de Fixação
1 L = palavras sobre {a, b} que começam com b e tenham
número ímpar de a
2 L = palavras sobre {a, b, c} que todo a seja precedido de
um b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Regular (GR)
Uma GR é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 V (i.e., µ é um elemento de V)
⌫ 2 | ⌃ | ⌃V (i.e., palavra formada por elementos de V e ⌃)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 24 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Gramática Regular (GR) – Exercícios de Fixação
1 L = palavras sobre {a, b, c} que todo b seja seguido de a
2 L = palavras sobre {a, b} com número par de a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Derivação
Aplicação consecutiva de regras
Definição de regra (!) 6= Aplicação de regra ())
v )⇤ w w é derivável a partir de v (aplicando 0 ou mais regras)
v )+ w w é derivável a partir de v (aplicando 1 ou mais regras)
v )n w w é derivável a partir de v (aplicando n regras)
Portanto:
Uma palavra w 2 (V [ ⌃)⇤
é uma forma sentencial se S )⇤
w
Uma palavra w 2 ⌃⇤
é uma sentença se S )⇤
w
L(G) = {w 2 ⌃⇤
| S )⇤
w}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 26 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
S ) aA
) abB
) abaB
) ababB
) ababa
É uma sentença válida uma vez que S )⇤ ababa
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
S ) aA
) abB
) abaB
) ababB
) ababa
É uma sentença válida uma vez que S )⇤ ababa
E abbabb 2 L(G)?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Finito
Máquina Reconhecedora de LR
Podem ser determinísticos (AFD)
Podem ser não-determinísticos (AFND)
Podem ser não-determinísticos com transições- (AFND- )
Verifica se uma palavra satisfaz condições (i.e., se 2 ou 62 L)
Entrada: palavra qualquer do alfabeto
Saída: sim (palavra válida) ou não (palavra inválida)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 28 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Finito Determinístico (AFD)
Um AFD é uma quíntupla (Q, ⌃, D, q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
D : Q x ⌃ ! Q = função (total) de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFD quando,
partindo do estado inicial, forem lidos todos os símbolos
de w e efetuadas as correspondentes transições de modo
que, ao ler o último símbolo, o AFD para em um estado final
A linguagem aceita por um AFD M (Q, ⌃, D, q0, F) é o
conjunto L(M) = {w 2 ⌃⇤ | ˆ(q0, w) 2 F}, onde ˆ é a função
de transição estendida para M
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 29 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
q0 q1 q2 q3
a
a
b
b
a
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
q0 q1 q2 q3
a
a
b
b
a
a
b
Sim, na verdade, é um AFD incompleto, por quê?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
q0 q1 q2 q3
a
a
b
b
a
a
b
Sim, na verdade, é um AFD incompleto, por quê?
Exercício de Fixação
1 L = palavras sobre {a, b} que contém aaa
2 L = palavras sobre {a, b} com número par de a e ímpar de b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Finito Não-Determinístico (AFND)
Um AFND é uma quíntupla (Q, ⌃, ND, q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
ND : Q x ⌃ ! P(Q) = função (total) de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFND se, e
somente se, existe uma computação que a consome e
para em um estado final
Para todo AFND, existe um AFD equivalente
i.e., não aumenta poder de expressão
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 31 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
q0 q1 q2 q3
a b
a a,b
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
q0 q1 q2 q3
a b
a a,b
a
Sim, na verdade, é um AFND incompleto, por quê?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
q0 q1 q2 q3
a b
a a,b
a
Sim, na verdade, é um AFND incompleto, por quê?
Exercício de Fixação
1 L = palavras sobre {a, b} que contém aa ou bb
2 L = (a [ b)⇤bb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Finito Não-Determinístico com Transições- (AFND- )
Um AFND- é uma quíntupla (Q, ⌃, ND , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
ND : Q x (⌃ [ { }) ! P(Q) = f. de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Para todo AFND- , existe um AFND e um AFD equivalentes
i.e., não aumenta poder de expressão
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 33 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} com tamanho par
AFND- :
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 34 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo
L = palavras sobre {a, b} com tamanho par
AFND- :
q0 q1 q3
a,b a,b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 34 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 35 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Livre de Contexto (GLC)
Uma GLC é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 V (i.e., um não-terminal)
⌫ 2 (V [ ⌃)⇤
(i.e., palavra formada por elementos de V e ⌃)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 36 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L(G) = {aibi | i > 0}
GLC(L):
Toda LLC é aceita por um Autômato com Pilha (não-determinístico)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 37 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L(G) = {aibi | i > 0}
GLC(L):
S ! aSb | ab
Toda LLC é aceita por um Autômato com Pilha (não-determinístico)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 37 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico 2
L(G) = {w 2 {a, b}⇤ | w = wR}
GLC(L):
Toda LLC é aceita por um Autômato com Pilha (não-determinístico)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 38 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico 2
L(G) = {w 2 {a, b}⇤ | w = wR}
GLC(L):
S ! aSa | bSb | a | b |
Toda LLC é aceita por um Autômato com Pilha (não-determinístico)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 38 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exercício de Fixação
1 L = {anbman|n > 0, m > 0}
2 L = {anbmcmd2n|n 0, m > 0}
3 L = palavras sobre {a, b} com número par de a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 39 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato com Pilha
Máquina Aceitadora de LLC
Podem ser determinísticos (APD)
Aceita todas as LR e um sub-grupo de LLC
Se forem não-determinísticos (APND)
Aceita todas as LLC
i.e., aumenta o poder de expressão
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 40 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato com Pilha Determinístico (APD)
Um APD é uma sextupla (Q, ⌃, , , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da pilha
: Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ ))
= função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Não permite transições (qi, a, b) e (qi, a0, b0) compatíveis:
(a = a0
ou a = ou a0
= ) e (b = b0
ou b = ou b0
6= )
Uma palavra w 2 ⌃⇤ é dita ser aceita por um APD quando
for totalmente consumida e que a máquina termine em um
estado final com pilha vazia (aceitação por parada em estado final e pilha vazia)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 41 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L(G) = {aibi | i > 0}
APD:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 42 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L(G) = {aibi | i > 0}
APD:
q0 q1
a /X
b X/
b X/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 42 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato com Pilha Não-Determinístico (APND)
Um APND é uma sextupla (Q, ⌃, , , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da pilha
: Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ ))
= função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Permite transições (qi, a, b) e (qi, a0, b0) compatíveis:
(qi, a, b) = {[qj, B], [qk , C]}
Uma palavra w 2 ⌃⇤ é dita ser aceita por um APND se, e
somente se, existe uma computação que a consome e
para em um estado final com pilha vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 43 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico 2
L(G) = {w 2 {a, b}⇤ | w = wR}
APND:
Toda LLC é aceita por um APND
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 44 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico 2
L(G) = {w 2 {a, b}⇤ | w = wR}
APND:
q0 q1
a /A
b /B a /
b /
/
a A/
b B/
Toda LLC é aceita por um APND
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 44 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 45 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Sensível ao Contexto (GSC)
Uma GSC é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
⌫ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
|µ|  |⌫| (i.e., regras não-contráteis)
nunca é uma palavra válida em uma LSC
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 46 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L = {aibici | i > 0}
GSC(L):
S ! aAbc | abc
A ! aAbC | abC
Cb ! bC
Cc ! cc
Toda LSC é recursiva, logo:
existe uma ALL que aceita LSC
existe uma MT que decide LSC, i.e., sempre para para
qualquer entrada w 2 ⌃⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 47 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Linearmente Limitado (ALL)
Um ALL é uma óctupla (Q, ⌃, , , q0, <, >, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da fita
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
< e > = delimitadores da palavra de entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 48 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Autômato Linearmente Limitado (ALL)
Seja w uma palavra de entrada
Configuração inicial da fita: <w>
Delimitadores podem ser lidos, mas não apagados
Delimitadores não podem ser ultrapassados
Tamanho da fita = |w| + 2
Basicamente, um ALL é uma MT cuja quantidade de fita
disponível é limitada ao tamanho da palavra de entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 49 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L = {aibici | i > 0}
q0 q1 q2 q3 q4 q5
q6 q7
</<D a/X D
Y/Y D
b/Y D
Y/Y, D
a/a, D
c/Z D
Z/Z, D
b/b, D
> / > E
c/c D
X/X D
c/c, E
Z/Z, E
b/b, E
Y/Y, E
a/a, E
>/>E
Y/Y, D
Z/Z, D
Z/Z, E
Y/Y, E
X/X, E
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 50 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 51 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Gramática Irrestrita (GI)
Todo o universo de linguagens é gerado por GI
Uma GI é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
⌫ 2 (V [ ⌃)⇤
(i.e., palavra formada por elementos de V e ⌃)
“Quase” nenhuma restrição é imposta (|µ| > 0)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 52 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L = {u[u] | u 2 {a, b}⇤}
GI(L):
S ! aT[a] | bT[b] | []
T[! aT[A | bT[B | [
Aa ! aA
Ab ! bA
Ba ! aB
Bb ! bB
A] ! a]
B] ! b]
Toda GI é recursivamente enumerável, logo:
existe uma MT que reconhece LI, mas não necessariamente
para para qualquer entrada w 2 ⌃⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 53 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Máquina de Turing (MT)
Um MT é uma séxtupla (Q, ⌃, , , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da fita
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Memória ilimitada
Seja w uma palavra de entrada
Configuração inicial da fita: BwBBBBBBBB...
A fita é infinita à direita
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 54 / 468
Revisão – Linguagens Formais e Autômatos (LFA)
Exemplo Clássico
L = {u[u] | u 2 {a, b}⇤}
q0 q1
q2 q3
q4q5
q6 q7q8
q9 q10
B/B D
a
/X
D
b/Y
D
[/[ D
[/[ D
a/a D
b/b D
a
/X
E
X/X D
Y/Y D
[/[ E X/X E
Y/Y E
X/X D
Y/Y D
a/a E
b/b E
[/[ D
a/a D
b/b D
b/Y
E
X/X D
Y/Y D]/] D
X/X D
Y/Y D
B/B E
X/a E
Y/b E
[/[E
]/]E
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 55 / 468
Revisão
Lemas, Teoremas, Corolários, etc.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 56 / 468
Revisão – Lemas, Teoremas, Corolários, etc.
Definições
Definem objetos e noções que são úteis em um
determinado estudo
Exemplo: Um AP é uma sextupla (Q, ⌃, , , q0, F)...
Lema e Teorema
Lema: É um pré-teorema, i.e., um resultado que leva a um
teorema ou que é usado na prova de um teorema
Teorema: É um resultado mais importante e interessante
Existem exceções, e.g., Pumping Lemma é um teorema
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 57 / 468
Revisão – Lemas, Teoremas, Corolários, etc.
Corolário
Consequência imediata de um teorema
Proposição
Uma observação que pode ser facilmente comprovada
não associada a um teorema em particular
Axioma (ou postulado)
Proposição que não precisa ser provada
por ser evidente, consensual, etc.
Exemplo: o sucessor de um natural é outro natural
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 58 / 468
2. Introdução – Conteúdo
1 Revisão 3
Hierarquia de Chomsky 60
Conceitos Básicos 63
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 59 / 468
Introdução
Hierarquia de Chomsky
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 60 / 468
Introdução – Hierarquia de Chomsky
Hierarquia de Chomsky
Noam Chomsky (1927-presente): poeta, filósofo, linguista,
professor do MIT, e crítico do capitalismo e da política
externa americana
Noam Chomsky (1956) constitui uma classificação para
linguagens, gramáticas e autômatos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 61 / 468
Introdução – Hierarquia de Chomsky
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Toda categoria é um subconjunto próprio da categoria superior
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 62 / 468
Introdução
Conceitos Básicos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 63 / 468
Introdução – Conceitos Básicos
Definições
Linguagem: conjunto de palavras sobre um alfabeto
Alfabeto (⌃): conjunto de símbolos de uma linguagem
Palavra (string): sequência de símbolos de um alfabeto
Convenções:
a, b, c, . . . representam elementos de um alfabeto
p, q, u, v, w, x, y, z representam palavras
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 64 / 468
Introdução – Conceitos Básicos
Definições
⌃⇤ é o conjunto de todas as palavras geradas por ⌃
⇤ (estrela): operador de Kleene
Definição Recursiva Revisão
⌃⇤ é definido recursivamente da seguinte forma:
1 base: 2 ⌃* ( é a palavra vazia)
2 passo recursivo: se w 2 ⌃* e a 2 ⌃ então wa 2 ⌃*
3 fechamento: w 2 ⌃* sse puder ser obtida a partir de com
um número finito de aplicações de (2)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 65 / 468
Introdução – Conceitos Básicos
Exemplo
Se ⌃ = {a, b, c}, então ⌃⇤ inclui:
Tamanho zero:
Tamanho um: a b c
Tamanho dois: aa ab ac ba bb bc ca cb cc
etc.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 66 / 468
Introdução – Conceitos Básicos
Definições
Tamanho de uma palavra w: número de aplicações do
passo recursivo para se obter w
Linguagem (L): subconjunto do conjunto de todas as
possíveis palavras de um alfabeto (L ✓ ⌃⇤)
Palavras que interessam são as palavras válidas
e.g., se ⌃ = {Maria, fala, alto}, quais são as palavras válidas?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 67 / 468
Introdução – Conceitos Básicos
Concatenação
Seja u, v 2 ⌃⇤. A concatenação de u e v, escrita uv, é uma
operação binária em ⌃⇤ definida assim:
base: se tam(v) = 0, então v = e uv = u
passo recursivo: se tam(v) = n, onde n > 0 então:
v = wa, com tam(w) = n 1 e a 2 ⌃
Assim, uv = u(wa) = (uw)a
Concatenação não é comutativa
Prova: (por contra-exemplo)
Se u = ab e v = ca então uv = abca e vu = caab
Concatenação é associativa: (uv)w = u(vw)
Sim? Então prova! Revisão de Indução Matemática
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 68 / 468
Introdução – Conceitos Básicos
Prova de Associatividade (por indução no comprimento da palavra w)
Teorema: Seja u, v, w 2 ⌃⇤, então (uv)w = u(vw)
Base: se tam(w) = 0, então w =
(uv)w = (uv) = uv e u(vw) = u(v ) = u(v) = uv
Logo, (uv)w = u(vw)
Hipótese: (uv)w = u(vw) 8w, tam(w)  k
Passo indutivo: provar (uv)w = u(vw) 8w, tam(w) = k + 1
Seja w = xa, tam(x) = k, a 2 ⌃
(uv)w = (uv)(xa) =
= ((uv)x)a (definição concatenação)
= (u(vx))a (uso da hipótese de indução)
= u((vx)a) (definição concatenação)
= u(v(xa)) (definição concatenação)
= u(vw)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 69 / 468
Introdução – Conceitos Básicos
Subpalavra, Prefixo, Sufixo, Reverso
x é uma subpalavra de y se 9x, v, z | y = zxv
x é dito prefixo de y se z = , ou seja, y = xv
x é dito sufixo de y se v = , ou seja, y = zx
Seja w 2 ⌃⇤. O reverso de w, ou wR, é definido por:
base: se tam(w) = 0, então w = e R
=
passo recursivo: se tam(w) = n, onde n 1 então:
w = ua, com tam(u) = n 1 e a 2 ⌃
Assim, wR
= (ua)R
= a(u)R
= auR
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 70 / 468
Introdução – Conceitos Básicos
Prova de Reverso (por indução no comprimento da palavra v)
Teorema: seja u, v 2 ⌃⇤, então (uv)R = vRuR
Base: se tam(v) = 0, então v =
(uv)R
= (u )R
= uR
e vR
uR
= R
uR
= uR
Hipótese: (uv)R = vRuR 8w, tam(w)  k
Passo indutivo: provar (uv)R = vRuR 8v, tam(v) = k + 1
Seja v = wa, tam(w) = k, a 2 ⌃
(uv)R
= (u(wa))R
=
= ((uw)a)R
(associatividade concatenação)
= a(uw)R
(definição de reverso)
= a(wR
uR
) (uso da hipótese de indução)
= (awR
)uR
(associatividade)
= (wa)R
uR
(definição de reverso)
= vR
uR
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 71 / 468
Introdução – Conceitos Básicos
Concatenação de Linguagens
Uma linguagem L é um subconjunto de ⌃* (L ✓ ⌃*)
Concatenação das linguagens X e Y, denotada XY, é a
linguagem: XY = {xy | x 2 X e y 2 Y}
Exemplo: X = {a, b, c} e Y = {abb, ba}
XY = {aabb, aba, babb, bba, cabb, cba}
Xn: concatenação de X com X mesmo n vezes
X0
= { }
X1
= {a, b, c}
X2
= {aa, ab, ac, ba, bb, bc, ca, cb, cc}
X⇤: todas as palavras construídas a partir de X
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 72 / 468
Introdução – Conceitos Básicos
X⇤ (definição formal)
X⇤
=
1[
i=0
Xi
X+ (definição formal)
X+
=
1[
i=1
Xi
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 73 / 468
3. Linguagens Regulares – Conteúdo
1 Revisão 3
2 Introdução 59
Conjuntos Regulares 76
Expressões Regulares 80
Gramáticas Regulares 85
Autômatos Finitos 92
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Autômatos com Saída 116
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Algoritmos 134
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Propriedades 156
Lema do Bombeamento 163
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 74 / 468
Linguagens Regulares – Hierarquia de Chomsky
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 75 / 468
Linguagens Regulares
Conjuntos Regulares
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 76 / 468
Linguagens Regulares – Conjuntos Regulares
Especificação Finita de Linguagens
Requer uma descrição não ambígua das palavras
Exemplo #1 (⌃ = {a, b})
Palavras com pelo menos uma ocorrência de bb:
L = {a, b}⇤
{bb}{a, b}⇤
Palavras que possuem prefixo aa ou sufixo bb
L = {aa}{a, b}⇤
[ {a, b}⇤
{bb}
Exemplo #2 (⌃ = {b})
L1 = {bb} e L2 = { , bb, bbbb}
Palavras com número par de b: L1
⇤
e L2
⇤
L1
⇤
= { , bb, bbbb, bbbbbb, ...}
L2
⇤
= { , bb, bbbb, bbbbbb, ...}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 77 / 468
Linguagens Regulares – Conjuntos Regulares
Conjuntos Regulares
Uma linguagem regular é aquela que pode ser definida por
um conjunto regular
Um conjunto é regular se pode ser gerado a partir de ⌃
usando operador de Kleene, união e concatenação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 78 / 468
Linguagens Regulares – Conjuntos Regulares
Definição Recursiva Revisão
Um conjunto regular é definido recursivamente da seguinte
forma:
1 base: ;, { } e {a}8a 2 ⌃ são conjuntos regulares
2 passo recursivo: se X e Y são conjuntos regulares, então
X [ Y, XY e X⇤
também são conjuntos regulares
Exemplo
Palavras sobre {a, b} que começam e terminam com a e
contêm pelo menos um b
{a}{a, b}⇤
{b}{a, b}⇤
{a}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 79 / 468
Linguagens Regulares
Expressões Regulares
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 80 / 468
Linguagens Regulares – Expressões Regulares
Expressões Regulares
Abreviação para conjuntos regulares
PS: x+
denota xx⇤
Definição Recursiva Revisão
Uma expressão regular é definido recursivamente da
seguinte forma:
1 base: ;, e a(8a 2 ⌃), são expressões regulares
2 passo recursivo: se u e v são expressões regulares, então
u [ v, uv e u⇤
são expressões regulares
Exemplos
{a}{a, b}⇤{b}{a, b}⇤{a} = a(a [ b)⇤b(a [ b)⇤a
{a, b}⇤{bb}{a, b}⇤ = (a [ b)⇤bb(a [ b)⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 81 / 468
Linguagens Regulares – Expressões Regulares
Exercícios
1 Considerando ⌃ = {a, b}, crie expressões regulares para as
seguintes linguagens:
L1 = {bawab | w 2 {a, b}⇤
}
L2 = palavras contendo aa ou bb
L3 = palavras contendo aa e bb
L4 = palavras com número par de b
L5 = palavras que não contém aa
2 Considerando ⌃ = {a, b, c} e L = c⇤(b [ (ac⇤))⇤, verifique se
as seguintes palavras estão em L:
acabacc
bbaaacc
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 82 / 468
Linguagens Regulares – Expressões Regulares
Identidades
1 ;w = w; = ;
2 w = w = w
3 ;⇤ =
4 ⇤ =
5 w [ u = u [ w
6 w [ ; = w
7 w [ w = w
8 w⇤w⇤ = w⇤
9 (w⇤)⇤ = w⇤
10 w⇤w = ww⇤ = w+
11 w(x [ y) = wx [ wy
12 (x [ y)w = xw [ yw
13 (wy)⇤w = w(yw)⇤
14 (w [ y)⇤ = (w⇤ [ y)⇤
= w⇤(w [ y)⇤
= (w [ yw⇤)⇤
= (w⇤y⇤)⇤
= w⇤(yw⇤)⇤
= (w⇤y)⇤w⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 83 / 468
Linguagens Regulares – Expressões Regulares
Exercícios
Mostre que:
b⇤
(ab+
)⇤
[ b⇤
(ab+
)⇤
a = (b [ ab)⇤
( [ a)
a⇤
(a⇤
ba⇤
ba⇤
)⇤
= a⇤
(ba⇤
ba⇤
)⇤
PS
ERs em Compiladores normalmente adotam | ao invés de [
i.e., a | b , a [ b
PS2
Existem linguagens que não podem definidas por
expressões regulares
Por exemplo, {an
bn
| n 0}
E aí, o que isso significa?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 84 / 468
Linguagens Regulares
Gramáticas Regulares
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 85 / 468
Linguagens Regulares – Gramáticas Regulares
Gramática Regular (GR)
Uma GR é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 V (i.e., µ é um elemento de V)
⌫ 2 | ⌃ | ⌃V (i.e., palavra formada por elementos de V e ⌃)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 86 / 468
Linguagens Regulares – Gramáticas Regulares
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468
Linguagens Regulares – Gramáticas Regulares
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468
Linguagens Regulares – Gramáticas Regulares
Gramática Regular (GR) – Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Propriedade interessante de gramáticas regulares:
Uma forma sentencial possui no máximo uma variável
sempre o símbolo mais à direita
Toda aplicação de regra adiciona um terminal na palavra
que está sendo derivada
exceto regra da forma A !
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468
Linguagens Regulares – Gramáticas Regulares
Gramática Regular (GR) – Exercícios de Fixação
1 L = a+b⇤
2 L = { } [ {ab}{ab}⇤{a}⇤
3 L = palavras sobre {a, b, c} que todo b seja seguido de a
4 L = palavras sobre {a, b} com número par de a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 88 / 468
Linguagens Regulares – Gramáticas Regulares
Derivação
Aplicação consecutiva de regras
Definição de regra (!) 6= Aplicação de regra ())
v )⇤ w w é derivável a partir de v (aplicando 0 ou mais regras)
v )+ w w é derivável a partir de v (aplicando 1 ou mais regras)
v )n w w é derivável a partir de v (aplicando n regras)
Portanto:
Uma palavra w 2 (V [ ⌃)⇤
é uma forma sentencial se S )⇤
w
Uma palavra w 2 ⌃⇤
é uma sentença se S )⇤
w
L(G) = {w 2 ⌃⇤
| S )⇤
w}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 89 / 468
Linguagens Regulares – Gramáticas Regulares
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468
Linguagens Regulares – Gramáticas Regulares
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
S ) aA
) abB
) abaB
) ababB
) ababa
É uma sentença válida uma vez que S )⇤ ababa
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468
Linguagens Regulares – Gramáticas Regulares
Dada a seguinte GR(L):
S ! aA
A ! aA | bB
B ! aB | bB | a
Pergunta-se: ababa 2 L(G)?
S ) aA
) abB
) abaB
) ababB
) ababa
É uma sentença válida uma vez que S )⇤ ababa
E abbabb 2 L(G)?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468
Linguagens Regulares – Gramáticas Regulares
Enfim
Uma linguagem é regular se pode ser gerada por alguma
gramática regular (ou CR ou ER)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 91 / 468
Linguagens Regulares
Autômatos Finitos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 92 / 468
Linguagens Regulares – Autômatos Finitos
Autômato Finito
Máquina Reconhecedora de LR
Podem ser determinísticos (AFD)
Podem ser não-determinísticos (AFND)
Podem ser não-determinísticos com transições- (AFND- )
Verifica se uma palavra satisfaz condições (i.e., se 2 ou 62 L)
Entrada: palavra qualquer do alfabeto
Saída: sim (palavra válida) ou não (palavra inválida)
Linguagem L é regular sse existe um AF que reconhece L
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 93 / 468
Linguagens Regulares
Autômatos Finitos
Autômatos Finitos Determinísticos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 94 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Autômato Finito Determinístico (AFD)
Um AFD é uma quíntupla (Q, ⌃, D, q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
D : Q x ⌃ ! Q = função (total) de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFD quando,
partindo do estado inicial, forem lidos todos os símbolos
de w e efetuadas as correspondentes transições de modo
que, ao ler o último símbolo, o AFD para em um estado final
A linguagem aceita por um AFD M (Q, ⌃, D, q0, F) é o
conjunto L(M) = {w 2 ⌃⇤ | ˆD(q0, w) 2 F}, onde ˆD é a função
de transição estendida para M
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 95 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
q0 q1 q2 q3
a
a
b
b
a
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468
D a b
q0 q1
q1 q1 q2
q2 q3 q2
q3 q3 q2
Linguagens Regulares – Autômatos Finitos – AFD
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFD:
q0 q1 q2 q3
a
a
b
b
a
a
b
Sim, na verdade, é um AFD incompleto, por quê?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468
D a b
q0 q1
q1 q1 q2
q2 q3 q2
q3 q3 q2
Linguagens Regulares – Autômatos Finitos – AFD
Exercícios de Fixação
1 L = palavras sobre {a, b} que contém aa ou bb
2 L = palavras sobre {a, b} que contém aaa
3 L = palavras sobre {a, b} com número par de a e ímpar de b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 97 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Função de Transição ( D)
D : Q x ⌃ ! Q
se total, então
em todos os estados (Q), existe transições para todos os
símbolos (⌃)
AFD é completo
AFD nunca trava
se parcial, então
em algum estado (Q), pode não existir transição para algum
símbolo (⌃)
AFD é incompleto
AFD pode travar
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 98 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Como transformar uma função parcial em uma total?
1 Criar um estado não final qerro
2 8x 2 ⌃ =) (qerro, x) ! qerro
qerro tem um loop com todos os símbolos do alfabeto
3 (qi, x) # =) (qi, x) ! qerro
toda transição indefinida agora vai para qerro
q0 q1 q2 q3
a b
a b
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 99 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Como transformar uma função parcial em uma total?
1 Criar um estado não final qerro
2 8x 2 ⌃ =) (qerro, x) ! qerro
qerro tem um loop com todos os símbolos do alfabeto
3 (qi, x) # =) (qi, x) ! qerro
toda transição indefinida agora vai para qerro
q0 q1 q2 q3
qerro
a
b
b
a b
a
a,b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 99 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Aceitação / Rejeição
Um AF aceita a entrada quando
após processar o último símbolo, assume um estado final (F)
Um AF rejeita a entrada quando
após processar o último símbolo, assume um estado não final
trava durante seu processamento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 100 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Função de Transição Estendida (ˆD)
É uma extensão da função de transição original que a partir
de um estado de origem (Q) e uma palavra (⌃⇤), retorna o
estado final do processamento (Q)
ˆD : Q x ⌃⇤ ! Q
ACEITA(M) = {w 2 ⌃⇤ | ˆD(q0, w) 2 F} = L(M)
REJEITA(M) = {w 2 ⌃⇤ | ˆD(q0, w) 62 F}
Pergunta-se: o que ocorre se D não for total?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 101 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Outros Exercícios
1 L = ⌃⇤
2 L = ;
Pergunta-se
Qual a principal diferença?
Logo, como modificar um AFD M que reconhece L para
reconhecer L?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 102 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Questões importantes
1 Pode um AF entrar em loop?
2 Dado dois AFs M1 e M2, pergunta-se:
Quando os dois AFs são equivalentes?
ACEITA(M)  REJEITA(M) =
ACEITA(M) [ REJEITA(M) =
⇠ACEITA(M) =
⇠REJEITA(M) =
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 103 / 468
Linguagens Regulares – Autômatos Finitos – AFD
Questões importantes
1 Pode um AF entrar em loop?
2 Dado dois AFs M1 e M2, pergunta-se:
Quando os dois AFs são equivalentes? L(M1) = L(M2)
ACEITA(M)  REJEITA(M) = ;
ACEITA(M) [ REJEITA(M) = ⌃⇤
= U
⇠ACEITA(M) = REJEITA(M)
⇠REJEITA(M) = ACEITA(M) = L(M)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 103 / 468
Linguagens Regulares
Autômatos Finitos
Autômatos Finitos Não-Determinísticos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 104 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Composição
A construção de sistemas é composicional, geralmente
É importante diferenciar três formas de composição:
Sequencial: A execução do próximo componente depende
do término do anterior
Concorrente: A execução dos componentes é irrelevante,
i.e., são componentes independentes
Não-determinista: A execução do próximo componente é
uma escolha entre diversos componentes alternativos
Exemplo: sistema bancário (atendimento em caixas)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 105 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Autômato Finito Não-Determinístico (AFND)
Um AFND é uma quíntupla (Q, ⌃, ND, q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
ND : Q x ⌃ ! P(Q) = função (total) de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFND se, e
somente se, existe uma computação que a consome e
para em um estado final
Para todo AFND, existe um AFD equivalente
i.e., não aumenta poder de expressão
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 106 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
q0 q1 q2 q3
a b
a a,b
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468
ND a b
q0 {q1} ;
q1 {q1} {q2}
q2 {q2, q3} {q2}
q3 ; ;
Linguagens Regulares – Autômatos Finitos – AFND
Exemplo
L = palavras sobre {a, b} que começam e terminam com a
e possuem pelo menos um b
AFND:
q0 q1 q2 q3
a b
a a,b
a
Qual seria a árvore de computações para a palavra abaaa?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468
ND a b
q0 {q1} ;
q1 {q1} {q2}
q2 {q2, q3} {q2}
q3 ; ;
Linguagens Regulares – Autômatos Finitos – AFND
Exercício de Fixação
1 L1 = palavras sobre {a, b} que contém aa ou bb
2 L2 = (a [ b)⇤bb
3 L3 = palavras sobre {a, b} que terminam com aaa
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 108 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Aceitação / Rejeição
Um AF aceita a entrada quando
após processar o último símbolo, em alguma das possíveis
computações, assume um estado final (F)
Um AF rejeita a entrada quando
(1) após processar o último símbolo, em todas as possíveis
computações, assume um estado não final
(2) trava durante seu processamento, em todas as possíveis
computações
(3) qualquer combinação de (1) ou (2)
e.g., das 10 possíveis computações, 7 assumem estado
não final e 3 travam
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 109 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Função de Transição Estendida (ˆND)
É uma extensão da função de transição original que a partir
de um estado de origem (Q) e uma palavra (⌃⇤), retorna
todos os possível estados finais do processamento (P(Q))
ˆND : Q x ⌃⇤ ! P(Q)
ACEITA(M) = {w 2 ⌃⇤ | ˆND(q0, w)  F 6= ;} = L(M)
REJEITA(M) = {w 2 ⌃⇤ | ˆND(q0, w)  F = ;}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 110 / 468
Linguagens Regulares – Autômatos Finitos – AFND
Pontos Importantes
Muitas vezes, é muito mais fácil desenvolver um AFND do
que um AFD
Por exemplo:
L = palavras sobre {a, b} cujo quinto último símbolo é a
Solução AFD: trabalhosa, 32 estados
Solução AFND: simples, 6 estados
Um estratégia bem conhecida:
Construir o AFND
Aplicar o algoritmo AFND ! AFD Algoritmo AFND ! AFD
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 111 / 468
Linguagens Regulares
Autômatos Finitos
Autômatos Finitos Não-Determinísticos com Transições-
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 112 / 468
Linguagens Regulares – Autômatos Finitos – AFND-
Autômato Finito Não-Determinístico com Transições- (AFND- )
Um AFND- é uma quíntupla (Q, ⌃, ND , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto
ND : Q x (⌃ [ { }) ! P(Q) = f. de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Para todo AFND- , existe um AFND e um AFD equivalentes
i.e., não aumenta poder de expressão
É muito similar ao AFND
Tem como vantagem facilitar construções e demonstrações
Por exemplo, o algoritmo ER ! AFND- Algoritmo ER ! AFND-
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 113 / 468
Linguagens Regulares – Autômatos Finitos – AFND-
Exemplo
L = {0k | k é múltiplo de 2 ou 3}
AFND- :
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 114 / 468
Linguagens Regulares – Autômatos Finitos – AFND-
Exemplo
L = {0k | k é múltiplo de 2 ou 3}
AFND- :
q0
q1 q2
q3
q5
q4
0
0
0
00
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 114 / 468
ND 0
q0 ; {q1, q3}
q1 {q2} ;
q2 {q1} ;
q3 {q4} ;
q4 {q5} ;
q5 {q3} ;
Linguagens Regulares – Autômatos Finitos – AFND-
Exercício de Fixação
1 L = (a [ b)⇤bb ou aa(a [ b)⇤
2 L = palavras sobre {a, b, c} que terminam com a ou bb ou
ccc
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 115 / 468
Linguagens Regulares
Autômatos com Saída
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 116 / 468
Linguagens Regulares
Autômatos com Saída
Máquina de Moore
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 117 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Máquina de Moore
Uma máquina de Moore é uma sêxtupla (Q, ⌃, , D, , q0):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da saída
D : Q x ⌃ ! Q = função (total) de transições de estados
: Q ! = função (total) de saída
qo 2 Q = estado inicial
Uma máquina de Moore é um AFD com um símbolo de
saída associado a cada estado
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 118 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Funcionamento da Máquina de Moore
Funcionamento semelhante aos AFDs
Ao invés de uma saída binária (aceita/rejeita), é uma
palavra
Na prática, é uma máquina de estados finitos transdutora
O primeiro símbolo da palavra de saída é sempre (q0)
Logo, o tamanho da saída é igual a w + 1
Sempre que se atingir um estado Q/Y, concatena-se o
simbolo Y = (Q) à direita da palavra de saída
No exemplo abaixo, ao se atingir o estado q3, concatena-se
“2” à direita da palavra de saída, i.e., (q3) = 2
q3/2
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 119 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Exemplo #1
Máquina de Moore que determina o número de a
presentes nos dois últimos símbolos da palavra de entrada
bb/0 aa/2
ab/1
ba/1
b
a a
ba
b
a
b
O último símbolo da palavra de saída indica o resultado
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 120 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Função de Saída Estendida (r)
Dados um estado (Q) e uma palavra de entrada (⌃⇤),
retorna a palavra de saída da máquina de Moore:
r : Q ⇥ ⌃⇤
! +
Formalização:
r(Q, ) = (Q)
r(Q, ay) = (Q) r( D(Q, a), y), 8a 2 ⌃ e y 2 ⌃⇤
Saída Computada:
A saída de uma máquina de Moore M = (Q, ⌃, , D, , q0)
para a palavra w 2 ⌃⇤
é r(q0, w)
Assim, retome o Exemplo #1 e compute r(bb, aaab)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 121 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Simulação de AFDs com Máquinas de Moore
Qualquer AFD M pode ser simulado utilizando-se uma
máquina de Moore
Uma possibilidade é fazer:
= {0, 1}
(Q) =
⇢
1, se Q 2 F
0, se Q 62 F
Logo, w 2 L(M) sse r(q0, w) termina em 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 122 / 468
Linguagens Regulares – Autômatos com Saída – Moore
Exemplo #2
Máquina de Moore que simula um AFD que reconhece as
palavras que terminam com aa
bb/0 aa/1
ab/0
ba/0
b
a a
ba
b
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 123 / 468
Linguagens Regulares – Autômatos com Saída – Exercícios
Exercício
1 Projetar uma AFD que cuja soma dos símbolos da palavra
seja divisível por 4, considerando ⌃ = {0, 1, 2, 3}
Dica1: A máquina deve aceitar “13”, “1111”, “202”, . . .
Dica2: Um estado para cada resto (e.g., 0%4, 1%4, . . . )
2 Projetar uma Máquina de Moore cujo último símbolo da
palavra de saída represente o resto da divisão por 4,
considerando ⌃ = {0, 1, 2, 3}
Dica: Pequena alteração em (1)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 124 / 468
Linguagens Regulares
Autômatos com Saída
Máquinas de Mealy
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 125 / 468
Linguagens Regulares – Autômatos com Saída – Mealy
Máquina de Mealy
Uma máquina de Mealy é uma sêxtupla (Q, ⌃, , D, , q0):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da saída
D : Q x ⌃ ! Q = função (total) de transições de estados
: Q ⇥ ⌃ ! = função (total) de saída
qo 2 Q = estado inicial
Uma máquina de Mealy é um AFD com um símbolo de
saída associado a cada transição
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 126 / 468
Linguagens Regulares – Autômatos com Saída – Mealy
Funcionamento da Máquina de Mealy
Funcionamento semelhante aos AFDs
Ao invés de uma saída binária (aceita ou rejeita), é uma
palavra
Na prática, é uma máquina de estados finitos transdutora
O tamanho da saída é igual ao tamanho da palavra
Sempre que, a partir de um estado Q, é efetuada uma
transição a/d , concatena-se o símbolo d = (Q, a) à
direita da palavra de saída
No exemplo abaixo, a partir do estado q2, ao se efetuar a
transição a/1, concatena-se “1” à direita da palavra de
saída, i.e., (q2, a) = 1
q2 q3
a/1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 127 / 468
Linguagens Regulares – Autômatos com Saída – Mealy
Exemplo #3
Máquina de Mealy que determina o quociente da divisão
de um número binário por 6
q0
q1
q2
q3
q4q5
0/0
1/0
1/0
0/0
1/0
0/0
1/1
0/1
1/10/1
1/1
0/1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 128 / 468
Linguagens Regulares – Autômatos com Saída – Mealy
Exemplo #4
Modificação 2 em 1
Mealy: quociente da divisão por 6 (transições)
Moore: resto da divisão por 6 (estados)
q0/0
q1/1
q2/2
q3/3
q4/4q5/5
0/0 1/0
1/0
0/0
1/0
0/0
1/1
0/1
1/10/1
1/1
0/1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 129 / 468
Linguagens Regulares – Autômatos com Saída – Mealy
Função de Saída Estendida (s)
Dados um estado (Q) e uma palavra de entrada (⌃⇤),
retorna a palavra de saída da máquina de Mealy:
s : Q ⇥ ⌃⇤
! ⇤
Formalização:
s(Q, ) =
s(Q, ay) = (Q, a) s( D(Q, a), y), 8a 2 ⌃ e y 2 ⌃⇤
Saída Computada:
A saída de uma máquina de Mealy M = (Q, ⌃, , D, , q0)
para a palavra w 2 ⌃⇤
é s(q0, w)
Assim, retome o Exemplo #3 e compute s(q0, 1000) e
s(q0, 1100)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 130 / 468
Linguagens Regulares – Autômatos com Saída – Exercícios
Exercício
1 Projetar uma Máquina de Mealy que troque a por b e
vice-versa, considerando ⌃ = {a, b}
Dica: Não complique o que é simples
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 131 / 468
Linguagens Regulares
Autômatos com Saída
Algoritmos de Transformação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 132 / 468
Algoritmos de Transformação
Algoritmos de Transformação
Existem algoritmos de transformação de uma Máquina de
Moore para uma Máquina de Mealy e vice-versa, com
certas ressalvas
No entanto, não serão abordados na disciplina
Os algoritmos podem ser encontrados em Vieira [8]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 133 / 468
Linguagens Regulares
Algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 134 / 468
Linguagens Regulares
Algoritmos
Transformação AFND- para AFD
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 135 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
Transformação de um AFND- para AFD
1 AFND- ! AFND
i.e., ND ! ND
Importante: AFND pode ter mais de um estado inicial
2 AFND ! AFD
i.e., ND ! D
Importante: Dado um AFND com n estados, o AFD
correspondente pode ter até 2n
estados (e.g., 5 ! 32)
Por isso, abordaremos um algoritmo de construção de estados
sob demanda (para evitar estados inúteis)
Caso não haja transições , pular passo (1)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 136 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
1 ND ! ND
i. São estados iniciais: fecho (q0)
Se um estado inicial alcança um
estado final, tal inicial será final
ND a b c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
1 ND ! ND
i. São estados iniciais: fecho (q0)
Se um estado inicial alcança um
estado final, tal inicial será final
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
1 ND ! ND
i. São estados iniciais: fecho (q0)
Se um estado inicial alcança um
estado final, tal inicial será final
ii. Para os outros estados qi :
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
1 ND ! ND
i. São estados iniciais: fecho (q0)
Se um estado inicial alcança um
estado final, tal inicial será final
ii. Para os outros estados qi :
considera todo estado em fecho (qi )
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND-
q0 q1
q2
a
a
a
b
c
ND a b c fecho( )
q0 {q0, q1, q2} ; ; ; {q0}
q1 ; {q1} ; ; {q1}
q2 ; ; {q2} {q1} {q2, q1}
*fecho (qi ) = qi + estados acessíveis a partir de qi lendo
1 ND ! ND
i. São estados iniciais: fecho (q0)
Se um estado inicial alcança um
estado final, tal inicial será final
ii. Para os outros estados qi :
considera todo estado em fecho (qi )
consome, para em um estado qj e então
adiciona fecho (qj )
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND (agora)
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND (agora)
q0 q1
q2
a
a
a
b
b,c
c
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND (agora)
q0 q1
q2
a
a
a
b
b,c
c
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
2 ND ! D (construção de subconjuntos sob demanda)
i. É inicial: a união de todos
os estados iniciais: {q0} D a b c
q0 = hq0i hq0, q1, q2i
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND (agora)
q0 q1
q2
a
a
a
b
b,c
c
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
2 ND ! D (construção de subconjuntos sob demanda)
i. É inicial: a união de todos
os estados iniciais: {q0}
ii. Cada novo Q obtém a
união das transições dos
seus estados integrantes
D a b c
q0 = hq0i hq0, q1, q2i
hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i
hq1i hq1i
hq1, q2i hq1i hq1, q2i
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFND (agora)
q0 q1
q2
a
a
a
b
b,c
c
ND a b c
q0 {q0, q1, q2} ; ;
q1 ; {q1} ;
q2 ; {q1} {q1, q2}
2 ND ! D (construção de subconjuntos sob demanda)
i. É inicial: a união de todos
os estados iniciais: {q0}
ii. Cada novo Q obtém a
união das transições dos
seus estados integrantes
iii. São finais: os estados que
contém pelo menos um
estado final
D a b c
q0 = hq0i hq0, q1, q2i
F 3 hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i
F 3 hq1i hq1i
F 3 hq1, q2i hq1i hq1, q2i
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
AFD (enfim)
hq0i hq0, q1, q2i hq1, q2i
hq1i
a
b
c
a
b
c
b
D a b c
hq0i hq0, q1, q2i
hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i
hq1i hq1i
hq1, q2i hq1i hq1, q2i
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 139 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
Exercício de Fixação #1
q0
q1 q2
q3
a
b
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 140 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
Exercício de Fixação #2
q0 q1 q2 q3
0,1
1 0,1 0,1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 141 / 468
Linguagens Regulares – Algoritmos – AFND- para AFD
Exercício de Fixação #3
q0 q1 q2
q3 q4
a b
a
a,b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 142 / 468
Linguagens Regulares
Algoritmos
Minimização de AFD
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 143 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
Minimização de um AFD
1 Todos os estados são equivalentes
2 Se um é estado final e o outro não, logo não são
equivalentes
3 Conferir, estado por estado, se são "equivalentes"
Procedimento a ser detalhado
Toy Example (propósito ilustrativo apenas)
q0
q1
q2
q3
q4
q5
a
b
c
a
b
c
a
b
c
a,b
c
a,b,c
a,b,c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 144 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
Algoritmo
Entrada: AFD M = (Q, ⌃, , q0, F)
1 Para todos os pares de estados qi e qj , i < j, faça:
1.1 D[i, j] = 0
1.2 S[i, j] = ;
2 Para cada par [i, j], i < j, se um é estado final e o outro não, faça D[i, j] = 1
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
4 Para cada D[i, j] = 0, os estados i e j podem ser fundidos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 145 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
Exemplo
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 146 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
1 Para todos os pares de estados qi e qj , i < j, faça:
1.1 D[i, j] = 0 (aqui, 0=X, 1=x)
1.2 S[i, j] = ;
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ;
[0, 2] X ;
[0, 3] X ;
[0, 4] X ;
[0, 5] X ;
[0, 6] X ;
[1, 2] X ;
[1, 3] X ;
[1, 4] X ;
[1, 5] X ;
[1, 6] X ;
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X ;
[2, 4] X ;
[2, 5] X ;
[2, 6] X ;
[3, 4] X ;
[3, 5] X ;
[3, 6] X ;
[4, 5] X ;
[4, 6] X ;
[5, 6] X ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 147 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
2 Para cada par [i, j], i < j, se um é estado final e o outro não, faça D[i, j] = 1 (aqui, x)
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ;
[0, 2] X ;
[0, 3] X ;
[0, 4] x ;
[0, 5] x ;
[0, 6] x ;
[1, 2] X ;
[1, 3] X ;
[1, 4] x ;
[1, 5] x ;
[1, 6] x ;
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X ;
[2, 4] x ;
[2, 5] x ;
[2, 6] x ;
[3, 4] x ;
[3, 5] x ;
[3, 6] x ;
[4, 5] X ;
[4, 6] X ;
[5, 6] X ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 148 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X { }
[0, 2] X { }
[0, 3] X { }
[1, 2] X { }
[1, 3] X { }
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { }
[4, 5] X { }
[4, 6] X { }
[5, 6] X { }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
⌅ [0, 1] X { }
[0, 2] X { }
[0, 3] X { }
[1, 2] X { [0, 1] }
[1, 3] X { }
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { }
[4, 5] X { [0, 1] }
[4, 6] X { }
[5, 6] X { }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X { }
⌅ [0, 2] X { }
[0, 3] X { }
[1, 2] X { [0, 1] }
[1, 3] X { [0, 2] }
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { }
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X { }
[0, 2] X { }
⌅ [0, 3] X ! x { } a
[1, 2] X { [0, 1] }
[1, 3] X { [0, 2] }
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { }
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X { }
[0, 2] X { }
[0, 3] X ! x { } a
⌅ [1, 2] X { [0, 1] }
[1, 3] X { [0, 2] }
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { [1, 2] }
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X { }
[0, 2] X ! x { } [1, 3]
[0, 3] X ! x { } a
[1, 2] X { [0, 1] }
⌅ [1, 3] X ! x { [0, 2] } a
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X { [1, 2] }
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ! x { } [1, 2]
[0, 2] X ! x { } [1, 3]
[0, 3] X ! x { } a
[1, 2] X ! x { [0, 1] } [2, 3]
[1, 3] X ! x { [0, 2] } a
Índice D[i, j] = S[i, j] = Motivo
⌅ [2, 3] X ! x { [1, 2] } a
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ! x { } [1, 2]
[0, 2] X ! x { } [1, 3]
[0, 3] X ! x { } a
[1, 2] X ! x { [0, 1] } [2, 3]
[1, 3] X ! x { [0, 2] } a
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X ! x { [1, 2] } a
⌅ [4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
[5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ! x { } [1, 2]
[0, 2] X ! x { } [1, 3]
[0, 3] X ! x { } a
[1, 2] X ! x { [0, 1] } [2, 3]
[1, 3] X ! x { [0, 2] } a
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X ! x { [1, 2] } a
[4, 5] X { [0, 1] }
⌅ [4, 6] X { [0, 2] }
[5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
3 Para cada par [i, j], i < j e D[i, j] = 0, faça:
3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e
(D[m, n] = 1 ou D[n, m] = 1) então:
DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j]
3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn
se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n]
se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m]
Índice D[i, j] = S[i, j] = Motivo
[0, 1] X ! x { } [1, 2]
[0, 2] X ! x { } [1, 3]
[0, 3] X ! x { } a
[1, 2] X ! x { [0, 1] } [2, 3]
[1, 3] X ! x { [0, 2] } a
Índice D[i, j] = S[i, j] = Motivo
[2, 3] X ! x { [1, 2] } a
[4, 5] X { [0, 1] }
[4, 6] X { [0, 2] }
⌅ [5, 6] X { [1, 2] }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
q0 q1 q2 q3
q4 q5 q6
b
a
b
a
b
a
a,b
a,b a,b a,b
4 Para cada D[i, j] = 0, os estados i e j podem ser fundidos
q0 q1 q2 q3
{q4, q5, q6}
b
a
b
a
b
a
a,b
a,b
Logo, um mesmo estado para q4, q5 e q6, já que D[4, 5] = 0, D[4, 6] = 0 e
D[5, 6] = 0
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 150 / 468
Linguagens Regulares – Algoritmos – Minimização de AFD
Exercício de Fixação
q0
q1
q2
q3
q4
q5
q6
q7
a
b
a
b
a,b
b
a
a
b
a,b
b
a a,b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 151 / 468
Linguagens Regulares
Algoritmos
Transformação de ER para AFND-
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 152 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Algoritmo de Thompson
a b
a b
ab
a b
a [ b (ou a | b)
a
b
a⇤
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 153 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q2 q3
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q2 q3
q4 q5
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q1
q2 q3
q4 q5
q6
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q1
q2 q3
q4 q5
q6 q7 q8
a
b
c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q1
q2 q3
q4 q5
q6q0
6
q7 q8 q9
a
b
c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q1
q2 q3
q4 q5
q6 q7 q8 q9
a
b
c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exemplo: ((a [ b)c⇤)⇤
q0 q1
q2 q3
q4 q5
q6 q7 q8 q9 q10
a
b
c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
Linguagens Regulares – Algoritmos – ER para AFND-
Exercícios de Fixação
1 (a [ b [ c)⇤
2 (a [ b)⇤abb
3 (( [ a)b⇤)⇤
4 (a [ b)⇤abb(a [ b)⇤
5 letra (letra [ digito)⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 155 / 468
Linguagens Regulares
Propriedades
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 156 / 468
Linguagens Regulares – Propriedades
Como provar que uma linguagem é regular?
1 Através de uma GR (formalismo gerador)
2 Através de um AFD, AFND ou AFND- (formalismo operacional)
3 Através de um CR ou ER (formalismo axiomático)
4 Ou através de propriedades de fechamento
Por isso, é importante conhecer as propriedades de LR
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 157 / 468
Linguagens Regulares – Propriedades
Propriedades de Fechamento
Se L1 e L2 são regulares, então também são regulares:
L1 [ L2
L1L2
L1
⇤
Se L1 é regular, então L1 também é regular
Se L1 e L2 são regulares, então L1  L2 também é regular
Objetivos:
Originar novas LRs a partir de existentes
Provar (ou refutar) que alguma linguagem é regular
Se L1  L2 = {ai
bi
| i > 0}, uma das linguagens não é regular
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468
Linguagens Regulares – Propriedades
Propriedades de Fechamento
Se L1 e L2 são regulares, então também são regulares:
L1 [ L2
L1L2
L1
⇤
Se L1 é regular, então L1 também é regular
Prova: basta inverter os estados finais com não-finais
Se L1 e L2 são regulares, então L1  L2 também é regular
Objetivos:
Originar novas LRs a partir de existentes
Provar (ou refutar) que alguma linguagem é regular
Se L1  L2 = {ai
bi
| i > 0}, uma das linguagens não é regular
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468
Linguagens Regulares – Propriedades
Propriedades de Fechamento
Se L1 e L2 são regulares, então também são regulares:
L1 [ L2
L1L2
L1
⇤
Se L1 é regular, então L1 também é regular
Prova: basta inverter os estados finais com não-finais
Se L1 e L2 são regulares, então L1  L2 também é regular
Prova: Lei de Morgan: L1  L2 = (L1 [ L2)
Objetivos:
Originar novas LRs a partir de existentes
Provar (ou refutar) que alguma linguagem é regular
Se L1  L2 = {ai
bi
| i > 0}, uma das linguagens não é regular
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468
Linguagens Regulares – Propriedades
Propriedades de Fechamento
Prove que a linguagem formada por palavras sobre {a,b}
que tenham aa e não tenham bb é regular (Exemplo 6.4.1, Sudkamp [6])
L1 = palavras com aa = (a [ b)⇤
aa(a [ b)⇤
é regular
L2 = palavras com bb = (a [ b)⇤
bb(a [ b)⇤
é regular
L2 também é regular
Logo, L1  L2 é regular
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 159 / 468
Linguagens Regulares – Propriedades
Propriedades de Fechamento – Exemplo
Prove que L = {aibj | i, j 0 e i 6= j} não é regular
Suponha que L seja regular
Então, L também é regular
Mas, L = {ai
bj
| i, j 0 e i = j} não é regular
Logo, L não pode ser regular
Método utilizado: Prova por contradição
Supõe-se que o contrário do que se deseja provar é verdade
Então, demonstra-se que essa suposição leva a um absurdo
(contradição)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 160 / 468
Linguagens Regulares – Propriedades
LR é Vazia, Finita ou Infinita?
Dada uma linguagem L reconhecida por um AFD M com
n estados, logo L é:
1 Infinita sse M aceita palavras z tal que |z| n
i.e., possui ciclo
2 Finita sse M aceita apenas palavras z tal que |z| < n
i.e., não possui ciclo
3 Vazia sse M não aceita qualquer palavras z
i.e., F = ; ou é inalcançável (ocorre apenas em autômatos
incompletos)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 161 / 468
Linguagens Regulares – Propriedades
É possível garantir que duas LRs são iguais?
Sim, é possível verificar se L1 = L2
Prova
Suponha os AFs M1 e M2 onde L(M1) = L1 e L(M2) = L2
Pelas propriedades de fechamento, é possível construir um
AF M3 tal que:
L3 = (L1  L2) [ (L1  L2)
Portanto, L1 = L2 sse L3 for vazia
E, como vimos anteriormente, é possível determinar se uma
linguagem é vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 162 / 468
Linguagens Regulares
Lema do Bombeamento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 163 / 468
Linguagens Regulares – Lema do Bombeamento
Lema do Bombeamento (Pumping Lemma) (um teorema na verdade)
Técnica usada para provar que linguagem não é regular
e só para linguagens infinitas (pq?)
Se um AFD tem k estados, então qualquer caminho de
aceitação de uma palavra z de tamanho |z| k contém
um ciclo
q0 q1
a
b b
a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 164 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo (k=2, pense em qualquer z tal que |z| k e z 2 L)
q0 q1
a
b b
a
Caminhos de aceitação
O caminho de aceitação de qualquer palavra z tal que
|z| k e z 2 L contém um ciclo
e.g., aa, baa, bb, . . .
Podem existir palavras de tamanho menor que 2
e.g. e b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 165 / 468
Linguagens Regulares – Lema do Bombeamento
Decomposição
Suponha uma palavra z 2 L tal que |z| k
Logo, z pode ser dividida em três subpalavras z = uvw tal
que |uv|  k, v 6= e v é parte de z reconhecida pelo ciclo
Claramente, o ciclo pode ser executado (“bombeado”)
várias vezes
uvi
w 2 L para todo i 0
q0 Q(s) qf
u
v
w
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 166 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo
q0 q1
q2 q3
b
a a
ba
b
a, b
Decomponha as palavras z 2 L e |z| k em z = uvw
aabb
abaab
bababb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 167 / 468
Linguagens Regulares – Lema do Bombeamento
Enunciado do Lema do Bombeamento
“Seja L uma LR aceita pelo AFD M com k estados.
Seja z qualquer palavra de L tal que |z| k.
Então, z pode ser decomposta em z = uvw com
uv  k, v 6= e
uviw 2 L para todo i 0.”
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 168 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo #1: L = {aibi | i 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 169 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo #1: L = {aibi | i 0}
Assuma que L é regular e seja k a constante especificada pelo Lema.
Seja z = ak
bk
. Qualquer decomposição de z = uvw satisfazendo as
precondições do lema terão a seguinte forma:
u v w
ai
aj
ak i j
bk
onde i + j  k e j > 0. Bombeando alguma subpalavra nesta forma produzirá
uv2
w = ai
aj
aj
ak i j
bk
= ak
aj
bk
que não pertence a L.
Como z 2 L não possui decomposições que satisfaçam as condições do
Lema do Bombeamento, conclui-se que L não é regular.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 169 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo #2: L = {an | n é um quadrado perfeito }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 170 / 468
Linguagens Regulares – Lema do Bombeamento
Exemplo #2: L = {an | n é um quadrado perfeito }
Assuma que L é regular e seja k a constante especificada pelo Lema.
Seja z = ak2
e, portanto, |z| = k2
. Qualquer decomposição de z = uvw conterá
apenas a. Assim, conduziremos a prova no tamanho da palavra bombeada:
|uv2
w| = |uvw| + |v|
= k2
+ |v| (0 < |v|  k)
 k2
+ k
< k2
+ 2k + 1
= (k + 1)2
Como k2
< |uv2
w| < (k + 1)2
, uv2
w 62 L.
Como z 2 L não possui decomposições que satisfaçam as condições do
Lema do Bombeamento, conclui-se que L não é regular.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 170 / 468
Linguagens Regulares – Lema do Bombeamento
Exercício de Fixação
1 L1 = {0m1n | m > n}
2 L2 = {0n12n | n > 0}
3 L3 = {aibmcn | 0 < i, 0 < m < n}
4 L4 = {0m1n2m+n | m > 0 e n > 0}
5 L5 = {0n | n é um número primo }
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 171 / 468
4. Linguagens Livres de Contexto – Conteúdo
1 Revisão 3
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Gramática Livre de Contexto 178
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Formas Normais 207
Transformações de Gramática 214
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Forma Normal de Chomsky 248
Remoção de recursividade à esquerda 256
Forma Normal de Greibach 264
Autômatos com Pilha 278
Variantes
Critérios de Aceitação
Algoritmos de Reconhecimento 305
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Algoritmos 337
Transformação de GLCs para APs
Transformação de APs para GLCs
Propriedades 356
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 172 / 468
Linguagens Livres de Contexto
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 173 / 468
Linguagens Livres de Contexto
O que sabemos: LR, GR e AF (Tipo 3)
LR:
Ling. natural: Palavras sobre {a, b} que terminam com {a}
Conj. regular: {a, b}⇤
{a}
Abreviação: (a [ b)⇤
a
GR:
S ! bS | aA
A ! aA | bS |
AF:
S A
b
a
a
b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 174 / 468
Linguagens Livres de Contexto
LR x LLC
LR descrevem linguagens simples
Geradas por GR
Reconhecidas por AF
No entanto, existem uma ampla gama de linguagens que
não podem ser descritas por LR
Exemplo Clássico: L = {ai
bi
| i 0}
Como já visto, o lema do bombeamento indica que a
linguagem L não é regular
Logo, devemos “subir” na Hierarquia de Chomsky!
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 175 / 468
Linguagens Livres de Contexto
De LR (tipo 3) para LLC (tipo 2)
LLC aumentam o poder de expressão da linguagem
(veremos o porquê)
GLC é o sistema formal para geração de LLC
Assim, descrever L= {aibi | i 0} é possível com uma GLC
S ! aSb |
(e, pelo jeito, bem simples também)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 176 / 468
Linguagens Livres de Contexto
Aplicabilidade
Como já vimos, LR são fundamentais no projeto de um
analisador léxico
Padrões são descritos por ER
Diagramas de Transição (AF estendidos) são usados no
reconhecimento de tokens
Por outro lado, LLC são fundamentais no projeto de um
analisador sintático
A sequência de tokens segue a gramática da linguagem?
GLC especificam a gramática formal da LP
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 177 / 468
Linguagens Livres de Contexto
Gramática Livre de Contexto
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 178 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Gramática Livre de Contexto (GLC)
Uma GLC é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 V (i.e., um não-terminal)
⌫ 2 (V [ ⌃)⇤
(i.e., palavra formada por elementos de V e ⌃)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 179 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Regras
Mecânica: A ! w
o não-terminal A pode ser trocado por w
Exemplo: uAv ) uwv
Livre de contexto:
A sempre pode ser trocado por w (independentemente do
“contexto” u e v onde A ocorrer)
Característica Intrínseca
GLC permitem produzir duplo balanceamento
Em uma analogia com LPs
Permitem blocos balanceado, e.g., beginn
endn
ou {n
}n
Permitem parênteses balanceados (n
)n
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 180 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Derivação
Aplicação consecutiva de regras
Definição de regra (!) 6= Aplicação de regra ())
v )⇤
w w é derivável a partir de v aplicando 0 ou mais regras
v )+
w w é derivável a partir de v aplicando 1 ou mais regras
v )i
w w é derivável a partir de v aplicando i regras
Portanto:
Uma palavra w 2 (V [ ⌃)⇤
é uma forma sentencial se S )⇤
w
Uma palavra w 2 ⌃⇤
é uma sentença se S )⇤
w
L(G) = {w 2 ⌃⇤
| S )⇤
w}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 181 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplos
Definir GLCs para as seguintes linguagens:
1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤
| w = wR
}
2 Palavras sobre {a, b} com tamanho ímpar, i.e.,
L = {w 2 {a, b}⇤
| |w| (mod 2) = 1}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplos
Definir GLCs para as seguintes linguagens:
1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤
| w = wR
}
S ! aSa | bSb | a | b |
2 Palavras sobre {a, b} com tamanho ímpar, i.e.,
L = {w 2 {a, b}⇤
| |w| (mod 2) = 1}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplos
Definir GLCs para as seguintes linguagens:
1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤
| w = wR
}
S ! aSa | bSb | a | b |
2 Palavras sobre {a, b} com tamanho ímpar, i.e.,
L = {w 2 {a, b}⇤
| |w| (mod 2) = 1}
S ! A | a | b
A ! aaS | abS | baS | bbS
Essa linguagem é, de fato, livre de contexto?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exercícios
Definir GLCs para as seguintes linguagens:
1 L = {an
bm
an
| m > 0 e n > 0}
2 L = {an
bm
cm
d2n
| m > 0 e n 0}
3 L = {an
bm
| 0  n  m  2n}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 183 / 468
Linguagens Livres de Contexto
Gramática Livre de Contexto
Recursividade
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 184 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Recursividade
Uma regra A ! uAv é dita ser recursiva
Uma regra A ! Av é dita ser recursiva à esquerda
Uma regra A ! uA é dita ser recursiva à direita
Tipo de Derivações
Derivações mais à esquerda (usada por analisadores sintáticos descendentes)
Sempre trocam o V mais à esquerda da forma sentencial
Derivações mais à direita
Sempre trocam o V mais à direita da forma sentencial
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 185 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo
Assuma a seguinte GLC:
S ! AA
A ! AAA | bA | Ab | a
Possíveis derivações para palavra ababaa:
S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA )
ababaA ) ababaa
S ) AA ) AAAA ) aAAA ) abAAA ) abaAA )
ababAA ) ababaA ) ababaa
S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa )
Ababaa ) ababaa
S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa )
ababAa ) ababaa
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo
Assuma a seguinte GLC:
S ! AA
A ! AAA | bA | Ab | a
Possíveis derivações para palavra ababaa:
S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA )
ababaA ) ababaa (derivação mais à esq.)
S ) AA ) AAAA ) aAAA ) abAAA ) abaAA )
ababAA ) ababaA ) ababaa (derivação mais à esq.)
S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa )
Ababaa ) ababaa (derivação mais à dir.)
S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa )
ababAa ) ababaa (só derivação)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo
Assuma a seguinte GLC:
S ! AA
A ! AAA | bA | Ab | a
Possíveis derivações para palavra ababaa:
S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA )
ababaA ) ababaa (derivação mais à esq.)
S ) AA ) AAAA ) aAAA ) abAAA ) abaAA )
ababAA ) ababaA ) ababaa (derivação mais à esq.)
S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa )
Ababaa ) ababaa
S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa )
ababAa ) ababaa
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Teorema
Seja G uma GLC. Uma palavra w pertence a L(G) sse existe
uma derivação mais à esquerda para w a partir de S
Prova pode ser encontrada em Sudkamp [6]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 187 / 468
Linguagens Livres de Contexto
Gramática Livre de Contexto
Árvore de Derivação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 188 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Derivação de palavras em uma árvore
Partindo do símbolo inicial como raíz
Terminando em símbolos terminais como folhas
Conveniente em muitas aplicações
Compiladores
Processadores de texto
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 189 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Árvore de Derivação – Definição
Raíz: símbolo inicial
Vértices interiores: variáveis
Se A é um vértice interior e X1, X2, ..., Xn são “filhos” de A
A ! X1, X2, ..., Xn é uma produção da gramática
X1, X2, ..., Xn são ordenados da esquerda para a direita
Folha: terminal ou símbolo vazio
Se vazio: único filho de seu pai (A ! )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 190 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo #1
GLC: S ! aSb |
Palavra: aabb
S
a S b
a bS
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 191 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo #2
GLC: E ! E + E | E ⇤ E | (E) | id
Palavra: id + id * id
E
E + E
id E ⇤ E
id id
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 192 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Exemplo #2
GLC: E ! E + E | E ⇤ E | (E) | id
Palavra: id + id * id
E
E + E
id E ⇤ E
id id
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 192 / 468
Algum problema com a
GLC ou com a árvore?
Linguagens Livres de Contexto
Gramática Livre de Contexto
Ambiguidade
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 193 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade
Uma GLC G é ambígua se existir uma palavra w em L(G)
que possua duas derivações mais à esquerda diferentes
o que significa duas árvores de derivação diferentes
Exemplo: L(G) = a+
Exemplo de gramática ambígua para L(G):
S ! aS | Sa | a
Ambiguidade para aa:
Exemplo de gramática não-ambígua para L(G):
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade
Uma GLC G é ambígua se existir uma palavra w em L(G)
que possua duas derivações mais à esquerda diferentes
o que significa duas árvores de derivação diferentes
Exemplo: L(G) = a+
Exemplo de gramática ambígua para L(G):
S ! aS | Sa | a
Ambiguidade para aa: S ) aS ) aa e S ) Sa ) aa
Exemplo de gramática não-ambígua para L(G):
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade
Uma GLC G é ambígua se existir uma palavra w em L(G)
que possua duas derivações mais à esquerda diferentes
o que significa duas árvores de derivação diferentes
Exemplo: L(G) = a+
Exemplo de gramática ambígua para L(G):
S ! aS | Sa | a
Ambiguidade para aa: S ) aS ) aa e S ) Sa ) aa
Exemplo de gramática não-ambígua para L(G):
S ! aS | a (além de não-ambígua, é regular)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #1
Assuma a seguinte GLC G:
S ! aSb | aSbb |
Pergunta-se: Essa GLC é ambígua?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #1
Assuma a seguinte GLC G:
S ! aSb | aSbb |
Pergunta-se: Essa GLC é ambígua?
Sim. Assuma w = aabbb, logo:
S ) aSb ) aaSbbb ) aabbb
S ) aSbb ) aaSbbb ) aabbb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #1
Assuma a seguinte GLC G:
S ! aSb | aSbb |
Pergunta-se: Essa GLC é ambígua?
Sim. Assuma w = aabbb, logo:
S ) aSb ) aaSbbb ) aabbb
S ) aSbb ) aaSbbb ) aabbb
Gramática equivalentemente não ambígua:
S ! aSb | A |
A ! aAbb | abb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #2
Assuma a seguinte GLC G usada reconhecer expressões
aritméticas em um analisador sintático
E ! E + E | E ⇤ E | (E) | id
Pergunta-se: Essa GLC é ambígua?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 196 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #2
Assuma a seguinte GLC G usada reconhecer expressões
aritméticas em um analisador sintático
E ! E + E | E ⇤ E | (E) | id
Pergunta-se: Essa GLC é ambígua?
Sim. Assuma w = id + id ⇤ id, logo:
E ) E + E ) id + E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id
E ) E ⇤ E ) E + E ⇤ E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 196 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #2 – Árvores de Derivação
GLC: E ! E + E | E ⇤ E | (E) | id
Derivações:
E ) E + E ) id + E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id
E ) E ⇤ E ) E + E ⇤ E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id
E
E + E
id E ⇤ E
id id
E
E⇤E
idE+E
idid
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 197 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Exemplo #2 – Gramática equivalentemente não
ambígua
Deve definir a prioridade de operadores:
E ! E + T | T
T ! T ⇤ F | F
F ! (E) | id
É possível duas derivações mais à esquerda para
id + id ⇤ id?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 198 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Indecibilidade
O problema de determinar se uma GLC arbitrária é
ambígua é indecidível
Portanto, isso significa que ...
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 199 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Para refletir!
Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤:
S ! abSA |
A ! Aa |
Pergunta-se: Essa GLC é ambígua?
Pergunta-se: Essa GLC gera uma LLC?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Para refletir!
Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤:
S ! abSA |
A ! Aa |
Pergunta-se: Essa GLC é ambígua?
Não
Pergunta-se: Essa GLC gera uma LLC?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Para refletir!
Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤:
S ! abSA |
A ! Aa |
Pergunta-se: Essa GLC é ambígua?
Não
Pergunta-se: Essa GLC gera uma LLC?
Então, ela gera, de fato, uma LR. No entanto, LR ⇢ LLC
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Gramáticas Inerentemente ambíguas
Maioria das LLC podem ser geradas por uma GLC não
ambígua
No entanto...
Nem toda LLC pode ser gerada por uma GLC não ambígua
Tais LLC são inerentemente ambíguas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 201 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Gramáticas Inerentemente ambíguas
Exemplo clássico:
L= {an
bm
cm
dn
ou an
bn
cm
dm
| m 1 e n 1}
Crie uma GLC para L
Mostre a derivação de, e.g., aabbccdd
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 202 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Ambiguidade – Gramáticas Inerentemente ambíguas
Exemplo clássico:
L= {an
bm
cm
dn
ou an
bn
cm
dm
| m 1 e n 1}
Crie uma GLC para L
Mostre a derivação de, e.g., aabbccdd
G(L):
S ! aNd | aXbcYd
N ! aNd | bMc
M ! bMc |
X ! aXb |
Y ! cYd |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 202 / 468
Linguagens Livres de Contexto
Gramática Livre de Contexto
Backus-Nahur Form (BNF)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 203 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
Notação Backus-Nahur Form (BNF)
Proposta em ⇠1960
Notação normalmente utilizada para definir GLCs de LPs
Notação BNF:
“!” é substituído por “::=” (ou apenas “:”)
Terminais: negrito (ou começando com minúsculas)
Variáveis: < . . . > (ou começando com maiúsculas)
Não se usa
{A} denota zero ou mais repetições de A
[A] denota que A é opcional
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 204 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
BNF de Java
The Java Language Specification (http://java.sun.com/docs/books/jls/)
Fragmento de exemplo:
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
BasicForStatement:
for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 205 / 468
Linguagens Livres de Contexto – Gramática Livre de Contexto
BNF de DCL (não apenas LP)
1 S ::= ModDecl | DCDecl
3 ModDecl ::= module ModId : ModDef { , ModDef} ( ModDecl | DCDecl )
5 ModDef ::= ClassName | ClassName+ | Pkg* | Pkg** | RegExpr
7 DCDecl ::=
only RefMod can-Type { , can-Type} RefMod [ DCDecl ] |
9 RefMod cannot-Type {, cannot-Type} RefMod [DCDecl] |
RefMod can-Type-only {, can-Type-only} RefMod [DCDecl] |
11 RefMod must-MustType { , must-MustType } RefMod [ DCDecl ]
13 RefMod ::= ( ModDef | ModId ) { , RefMod}
15 MustType ::= extend | implement | derive | throw | useannotation
17 Type ::= access | declare | handle | create | depend | MustType
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 206 / 468
Linguagens Livres de Contexto
Formas Normais
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 207 / 468
Linguagens Livres de Contexto – Formas Normais
Problema
GLCs são muito flexíveis
Não existem restrições na forma do lado direito das regras
Isso facilita a construção das gramáticas
Embora dificulte a construção de analisadores sintáticos
Formas Normais (FN)
Impõem restrições no lado direito das regras de uma GLC
Mas não reduzem o poder de expressão de GLC
Geradas automaticamente (via algoritmo)
Serão abordadas:
FN de Chomsky
FN de Greibach
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 208 / 468
Linguagens Livres de Contexto – Formas Normais
FN de Chomsky
Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas
regras têm uma das seguintes formas:
A ! BC onde B, C 2 V {S}
A ! a onde a 2 ⌃
S !
Propriedade: árvores de derivação são sempre binárias
Não é complexo converter uma GLC para a FN de
Chomsky quando a mesma:
Símbolo inicial não é recursivo (S 6! ↵S )
É essencialmente não-contrátil (só S ! )
Não possui regras de cadeia (A 6! B)
Não possui símbolos inúteis (8B | B ) ⌃+
e S ) ↵B )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 209 / 468
Linguagens Livres de Contexto – Formas Normais
FN de Chomsky
Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas
regras têm uma das seguintes formas:
A ! BC onde B, C 2 V {S}
A ! a onde a 2 ⌃
S !
Propriedade: árvores de derivação são sempre binárias
Não é complexo converter uma GLC para a FN de
Chomsky quando a mesma:
Símbolo inicial não é recursivo (S 6! ↵S ) ?
É essencialmente não-contrátil (só S ! ) ?
Não possui regras de cadeia (A 6! B) ?
Não possui símbolos inúteis (8B | B ) ⌃+
e S ) ↵B ) ?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 209 / 468
Linguagens Livres de Contexto – Formas Normais
Forma normal não é minimização! (Parte 1)
Assuma a GLC clássica:
S ! aSb |
Símbolo inicial não recursivo: (S 6! ↵S )
S0
! S
S ! aSb |
Essencialmente não-contrátil: (só S ! )
S0
! S |
S ! aSb | ab
Sem regras de cadeia: (A 6! B)
S0
! aSb | ab |
S ! aSb | ab
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 210 / 468
Linguagens Livres de Contexto – Formas Normais
Forma normal não é minimização! (Parte 1 ainda)
Sem regras de cadeia: (A 6! B)
S0
! aSb | ab |
S ! aSb | ab
Sem símbolos inúteis (que não geram terminais): (8B | B ) ⌃+
)
Todos geram terminais!
Sem símbolos inúteis (que não são alcançáveis): (8B | S ) ↵B )
Todos são alcançáveis!
Forma Normal de Chomsky (FNC):
S0
! AX | AB |
X ! SB
S ! AX | AB
A ! a
B ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 211 / 468
Linguagens Livres de Contexto – Formas Normais
FN de Greibach
Uma GLC G = (V, ⌃, P, S) está na FN de Greibach se suas
regras têm uma das seguintes formas:
A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S}
A ! a
S !
1o passo:
Transformar GLC para FN de Chomsky
2o passo:
Em um futuro próximo...
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 212 / 468
Linguagens Livres de Contexto – Formas Normais
Forma normal não é minimização! (Parte 2)
Forma Normal de Chomsky (FNC):
S0
! AX | AB |
X ! SB
S ! AX | AB
A ! a
B ! b
Forma Normal de Greibach (FNG):
S0
! aX | aB |
X ! aXB | aBB
S ! aX | aB
B ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 213 / 468
Linguagens Livres de Contexto
Transformações de Gramática
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 214 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Transformações de Gramática
Para alcançar uma FN, é importante que transformações
sejam realizadas na GLC
As quais adicionam, modificam ou eliminam regras
Veremos uma série de transformações em GLC:
Remoção de recursividade no símbolo inicial (S 6! ↵S )
Eliminação de regras (NULLABLE, só S ! )
Eliminação de regras de cadeia (CHAIN, A 6! B)
Remoção de símbolos inúteis [TERM, 8B | B )⇤
⌃+
e REACH, 8B | S )⇤
↵B )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 215 / 468
Linguagens Livres de Contexto
Transformações de Gramática
Remoção de recursividade no símbolo inicial
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 216 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Remoção de recursividade no símbolo inicial
Símbolo inicial (S) deve se limitar a iniciar derivações
i.e., S não deve ser uma variável recursiva
Não deve ser possível ter S )⇤
↵S
Assuma uma GLC G = (V, ⌃, P, S) onde S é recursivo, logo:
G0
= (V [ {S0
}, ⌃, P [ {S0
! S}, S0
)
L(G0
) = L(G)
Símbolo inicial S0
de G0
não é mais recursivo
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 217 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Remoção de recursividade no símbolo inicial
(V, ⌃, P, S) =) (V [ {S0}, ⌃, P [ {S0 ! S}, S0)
Exemplo
S ! aS | AB | AC
A ! aA |
B ! bB | bS
C ! cC |
+
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 218 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Remoção de recursividade no símbolo inicial
(V, ⌃, P, S) =) (V [ {S0}, ⌃, P [ {S0 ! S}, S0)
Exemplo
S ! aS | AB | AC
A ! aA |
B ! bB | bS
C ! cC |
+
S0 ! S
S ! aS | AB | AC
A ! aA |
B ! bB | bS
C ! cC |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 218 / 468
Linguagens Livres de Contexto
Transformações de Gramática
Eliminação de regras
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 219 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Eliminação de regras
Variável anulável: V que pode derivar
Se A é anulável, então: A )⇤
Gramática não-contrátil:
Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! )
Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫|
Gramática essencialmente não-contrátil:
Gramática não-contrátil, mas admite uma regra : S !
Todas as derivações são não-contráteis, exceto S )
Exemplo:
S ! aAb
A ! aA | B
B ! bB |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Eliminação de regras
Variável anulável: V que pode derivar
Se A é anulável, então: A )⇤
Gramática não-contrátil:
Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! )
Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫|
Gramática essencialmente não-contrátil:
Gramática não-contrátil, mas admite uma regra : S !
Todas as derivações são não-contráteis, exceto S )
Exemplo:
S ! aAb
A ! aA | B Variáveis anuláveis?
B ! bB |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Eliminação de regras
Variável anulável: V que pode derivar
Se A é anulável, então: A )⇤
Gramática não-contrátil:
Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! )
Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫|
Gramática essencialmente não-contrátil:
Gramática não-contrátil, mas admite uma regra : S !
Todas as derivações são não-contráteis, exceto S )
Exemplo:
S ! aAb
A ! aA | B Variáveis anuláveis? B e A
B ! bB |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Algoritmo NULLABLE (estratégia bottom-up)
Entrada: Uma GLC G = (V, ⌃, P, S)
Saída: Conjunto de variáveis anuláveis (NULLABLE)
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 221 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
NULLABLE
NULL PREV
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
NULLABLE
NULL PREV
(0) {C} ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
NULLABLE
NULL PREV
(0) {C} ;
(1) {C, A} {C}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
NULLABLE
NULL PREV
(0) {C} ;
(1) {C, A} {C}
(2) {C, A, S} {C, A}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
NULLABLE
NULL PREV
(0) {C} ;
(1) {C, A} {C}
(2) {C, A, S} {C, A}
(3) {C, A, S} {C, A, S}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468
NULL = {A | {A ! } 2 P}
repita
PREV = NULL
para cada A 2 V faça
se A ! w e w 2 PREV⇤
faça
NULL = NULL [ {A}
até NULL == PREV
Linguagens Livres de Contexto – Transformações de Gramática
Técnica para eliminação de regras
Calcular conjunto de variáveis anuláveis
e eliminar regras que levam diretamente a
Adicionar regras na gramática onde a ocorrência de
variáveis anuláveis é omitida, por exemplo:
Assuma GLC com a seguinte regra: A ! BABa
Assuma que B é anulável
Logo, as seguintes regras devem ser adicionadas:
A ! ABa
A ! BAa
A ! Aa
Se 2 L(G), então regra S ! deve estar presente
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 223 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #1
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
+ variáveis anuláveis:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #1
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
+ variáveis anuláveis: {S, A, C}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #1
S ! ACA
A ! aAa | B | C
B ! bB | b
C ! cC |
+ variáveis anuláveis: {S, A, C}
S ! ACA | AC | AA | CA | A | C |
A ! aAa | B | C | aa
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #2
L(G) = a⇤b⇤c⇤
G : S ! ABC
A ! aA |
B ! bB |
C ! cC |
+ variáveis anuláveis:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #2
L(G) = a⇤b⇤c⇤
G : S ! ABC
A ! aA |
B ! bB |
C ! cC |
+ variáveis anuláveis: {S, A, B, C}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo #2
L(G) = a⇤b⇤c⇤
G : S ! ABC
A ! aA |
B ! bB |
C ! cC |
+ variáveis anuláveis: {S, A, B, C}
S ! ABC | AB | BC | AC | A | B | C |
A ! aA | a
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exercício de Fixação
G : S ! aBC | Ba
A ! aA |
B ! AC
C ! cA | b | A
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 226 / 468
Linguagens Livres de Contexto
Transformações de Gramática
Eliminação de regras de cadeia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 227 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Eliminação de regras de cadeia
Uma regra na forma A ! B
Não aumenta tamanho da forma sentencial
Não gera símbolos terminais
Apenas renomeia uma variável
Tais regras são chamadas regras de cadeia (chain rules)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 228 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Eliminação de regras de cadeia – Exemplo
Suponha a seguinte gramática:
A ! aA | a | B
B ! bB | b | C
Eliminando a cadeia A ! B:
A ! aA | a | bB | b | C
B ! bB | b | C
Infelizmente, uma nova cadeia apareceu: A ! C
Portanto, o procedimento deve ser reaplicado
Até não mais restarem cadeias
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 229 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Algoritmo CHAIN
Entrada: Uma GLC essencialmente não contrátil G = (V, ⌃, P, S) e
uma variável qualquer A 2 V
Saída: Conjunto de variáveis deriváveis a partir de A
aplicando-se apenas regras de cadeia
CHAIN(A) = {A}
PREV = ;
repita
NEW = CHAIN(A) PREV
PREV = CHAIN(A)
para cada B 2 NEW faça
para cada B ! C faça
CHAIN(A) = CHAIN(A) [ {C}
até CHAIN(A) == PREV
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 230 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ;
(1)
(2)
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1)
(2)
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S}
(2)
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S} {A, C}
(2)
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S} {A, C}
(2) {S, A, C, B} {S, A, C}
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S} {A, C}
(2) {S, A, C, B} {S, A, C} {B}
(3)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S} {A, C}
(2) {S, A, C, B} {S, A, C} {B}
(3) {S, A, C, B} {S, A, C, B}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S)
CHAIN(S) PREV NEW
(0) {S} ; {S}
(1) {S, A, C} {S} {A, C}
(2) {S, A, C, B} {S, A, C} {B}
(3) {S, A, C, B} {S, A, C, B} –
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
Resultado do algoritmo aplicado em todas as variáveis
CHAIN(S) = {S, A, C, B}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 232 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC |
A ! aAa | aa
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC | | aAa | aa
A ! aAa | aa
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC | | aAa | aa | bB | b
A ! aAa | aa
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c
A ! aAa | aa
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c
A ! aAa | aa | bB | b
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! ACA | CA | AA | AC | A | C |
A ! aAa | aa | B | C
B ! bB | b
C ! cC | c
CHAIN(S) = {S, A, B, C}
CHAIN(A) = {A, B, C}
CHAIN(B) = {B}
CHAIN(C) = {C}
Novas Regras
A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A)
Nova Gramática sem Regras de Cadeia
S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c
A ! aAa | aa | bB | b | cC | c
B ! bB | b
C ! cC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Resumo
GLCs essencialmente não-contráteis e sem regras de
cadeia tem uma das seguintes formas:
S !
A ! a
A ! w onde w 2 (V [ ⌃)⇤
e |w| 2
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 234 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exercício de Fixação
G : S ! aS | b | A
A ! aA | a | C
B ! a | b
C ! c | B
D ! dD | B
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 235 / 468
Linguagens Livres de Contexto
Transformações de Gramática
Remoção de símbolos inúteis
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 236 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Remoção de símbolos inúteis
Variável inútil
não aparece em derivações que geram palavras
não contribui para geração de palavras
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 237 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo (Qual é a L(G)?)
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
Símbolos Inúteis
Um símbolo x 2 (V [ ⌃) é útil se:
S )⇤
uxv )⇤
w, onde u, v 2 (V [ ⌃)⇤
e w 2 ⌃⇤
Um terminal é útil quando ocorre em uma palavras w 2 L(G)
Uma variável A é útil se existe: S )⇤ uAv )⇤ w, w 2 L(G)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 238 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Algoritmo TERM
Entrada: Uma GLC G = (V, ⌃, P, S)
Saída: Conjunto de variáveis que geram terminais (TERM)
TERM = {A | existe uma regra A ! w 2 P , com w 2 ⌃⇤
}
repita
PREV = TERM
para cada A 2 V faça
se A ! w 2 P e w 2 (PREV [ ⌃)⇤
então
TERM = TERM [ A
até PREV == TERM
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 239 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
TERM
TERM PREV
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
TERM
TERM PREV
(0) {B, F} ;
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
TERM
TERM PREV
(0) {B, F} ;
(1) {B, F, A, S} {B, F}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
TERM
TERM PREV
(0) {B, F} ;
(1) {B, F, A, S} {B, F}
(2) {B, F, A, S, E} {B, F, A, S}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
TERM
TERM PREV
(0) {B, F} ;
(1) {B, F, A, S} {B, F}
(2) {B, F, A, S, E} {B, F, A, S}
(3) {B, F, A, S, E} {B, F, A, S, E}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
Variáveis que não geram terminal
V {B, F, A, S, E} = {C, D}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! AC | BS | B
A ! aA | aF
B ! CF | b
C ! cC | D
D ! aD | BD | C
E ! aA | BSA
F ! bB | b
Variáveis que não geram terminal
V {B, F, A, S, E} = {C, D}
Nova Gramática sem variáveis que não geram terminal
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Algoritmo REACH
Entrada: Uma GLC G = (V, ⌃, P, S)
Saída: Conjunto de variáveis alcançáveis a partir de S (REACH)
REACH = {S}
PREV = ;
repita
NEW = REACH PREV
PREV = REACH
para cada A 2 NEW faça
para cada A ! w faça
adicione todas as variáveis de w em REACH
até REACH == PREV
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 242 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ;
(1)
(2)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ; {S}
(1)
(2)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ; {S}
(1) {S, B} {S}
(2)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ; {S}
(1) {S, B} {S} {B}
(2)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ; {S}
(1) {S, B} {S} {B}
(2) {S, B} {S, B}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exemplo
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
REACH
REACH PREV NEW
(0) {S} ; {S}
(1) {S, B} {S} {B}
(2) {S, B} {S, B} –
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
Variáveis inalcançáveis:
V {S, B} = {A, E, F}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Gramática Original
S ! BS | B
A ! aA | aF
B ! b
E ! aA | BSA
F ! bB | b
Variáveis inalcançáveis:
V {S, B} = {A, E, F}
Nova Gramática sem variáveis inalcançáveis (Qual a L(G)?)
S ! BS | B
B ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Exercício de Fixação (TERM e REACH)
G : S ! aB | aA | bcC
A ! aA | ABA
B ! bB | b
C ! cC | BEA
D ! aE | bEc | d
E ! cD | cEb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 245 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Para remoção de variáveis inúteis: TERM e REACH (nesta ordem)
G : S ! a | AB
A ! b
B ! aB
TERM = {S, A}
GT : S ! a
A ! b
REACH = {S}
GR : S ! a
Se algoritmos forem aplicados na ordem inversa, o
resultado seria incorreto!
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 246 / 468
Linguagens Livres de Contexto – Transformações de Gramática
Se fosse na ordem errada:
G : S ! a | AB
A ! b
B ! aB
REACH = {S, A, B}
GR : S ! a | AB
A ! b
B ! aB
TERM = {S, A}
GT : S ! a
A ! b
Bem esquisito!
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 247 / 468
Linguagens Livres de Contexto
Forma Normal de Chomsky
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 248 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
FN de Chomsky
Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas
regras têm uma das seguintes formas:
A ! BC onde B, C 2 V {S}
A ! a onde a 2 ⌃
S !
Propriedade: árvores de derivação são sempre binárias
Não é complexo converter uma GLC para a FN de
Chomsky quando a mesma:
Símbolo inicial não é recursivo (S 6! ↵S )
É essencialmente não-contrátil (só S ! )
Não possui regras de cadeia (A 6! B)
Não possui símbolos inúteis (8B | B ) ⌃+
e S ) ↵B )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 249 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #1
A ! bDcF
FN de Chomsky:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #1
A ! bDcF
FN de Chomsky:
Primeira transformação:
A ! B0DC0F
B0 ! b
C0 ! c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #1
A ! bDcF
FN de Chomsky:
Primeira transformação:
A ! B0DC0F
B0 ! b
C0 ! c
Segunda transformação:
A ! B0T1
B0 ! b
C0 ! c
T1 ! DT2
T2 ! C0F
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #2
S ! aABC | a
A ! aA | a
B ! bcB | bc
C ! cC | c
FN de Chomsky:
Já satisfaz pré-condições:
Símbolo inicial não é recursivo (S 6! ↵S )
É essencialmente não-contrátil (só S ! )
Não possui regras de cadeia (A 6! B)
Não possui símbolos inúteis (8B | B ) ⌃+
e S ) ↵B )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 251 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #2
S ! aABC | a
A ! aA | a
B ! bcB | bc
C ! cC | c
FN de Chomsky:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 252 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #2
S ! aABC | a
A ! aA | a
B ! bcB | bc
C ! cC | c
FN de Chomsky:
S ! A0T1 | a
A0 ! a
T1 ! AT2
T2 ! BC
A ! A0A | a
B ! B0T3 | B0C0
T3 ! C0B
C ! C0C | c
B0 ! b
C0 ! c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 252 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #3
S ! aXb | ab
X ! aXb | ab
FN de Chomsky:
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 253 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exemplo #3
S ! aXb | ab
X ! aXb | ab
FN de Chomsky:
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 253 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exercício de Fixação (apenas o último passo da FNC)
G : S ! aA | bC |
A ! bAba | ba
C ! cCAba | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 254 / 468
Linguagens Livres de Contexto – Forma Normal de Chomsky
Exercício de Fixação (todos os passos para chegar à FNC)
G : S ! aAb | bAa | B | aS
A ! bB |
B ! cBc | Ba | aB | D
C ! a | b | c
D ! aDC
E ! BB | F
F ! FEB
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 255 / 468
Linguagens Livres de Contexto
Remoção de rec. à esquerda
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 256 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Remoção de recursividade à esquerda
Recursividade direta à esquerda pode produzir “loops
infinitos” em analisadores sintáticos descendentes (top-down)
Exemplo:
S ! Aa
A ! Aa | b
S ) Aa ) Aaa ) Aaaa ) . . .
Suponha a regra genérica diretamente recursiva à esq.:
A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n
Regra equivalente não-recursiva à esquerda:
A ! ⌫1 | ⌫2 | . . . | ⌫n | ⌫1Z | ⌫2Z | . . . | ⌫nZ
Z ! µ1Z | µ2Z | . . . | µmZ | µ1 | µ2 | . . . | µm
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 257 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #1
A ! Aa | b
+ remoção de recursividade à esq.
Exemplo #2
A ! Aa | Ab | b | c
+ remoção de recursividade à esq.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #1
A ! Aa | b
+ remoção de recursividade à esq.
A ! bZ | b
Exemplo #2
A ! Aa | Ab | b | c
+ remoção de recursividade à esq.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #1
A ! Aa | b
+ remoção de recursividade à esq.
A ! bZ | b
Z ! aZ | a
Exemplo #2
A ! Aa | Ab | b | c
+ remoção de recursividade à esq.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #1
A ! Aa | b
+ remoção de recursividade à esq.
A ! bZ | b
Z ! aZ | a
Exemplo #2
A ! Aa | Ab | b | c
+ remoção de recursividade à esq.
A ! bZ | cZ | b | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #1
A ! Aa | b
+ remoção de recursividade à esq.
A ! bZ | b
Z ! aZ | a
Exemplo #2
A ! Aa | Ab | b | c
+ remoção de recursividade à esq.
A ! bZ | cZ | b | c
Z ! aZ | bZ | a | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #3
A ! AB | BA | a
B ! b | c
+ remoção de recursividade à esq.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #3
A ! AB | BA | a
B ! b | c
+ remoção de recursividade à esq.
A ! BAZ | aZ | BA | a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #3
A ! AB | BA | a
B ! b | c
+ remoção de recursividade à esq.
A ! BAZ | aZ | BA | a
Z ! BZ | B
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #3
A ! AB | BA | a
B ! b | c
+ remoção de recursividade à esq.
A ! BAZ | aZ | BA | a
Z ! BZ | B
B ! b | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #4
A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤
+ remoção de recursividade à esq.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #4
A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤
+ remoção de recursividade à esq.
A ! bbZ | bZ | bb | b – gera (b [ bb)(Z [ )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exemplo #4
A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤
+ remoção de recursividade à esq.
A ! bbZ | bZ | bb | b – gera (b [ bb)(Z [ )
Z ! aZ | abZ | a | ab – gera (a [ ab)+
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Exercício de Fixação
G : A ! aA | ABc | ccA
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 261 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Remoção de Recursão à Esquerda
Problema: recursão à esquerda indireta
A ! Bu
B ! Av
Recursão indireta também pode gerar “loops infinitos”
Solução: Forma Normal de Greibach
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 262 / 468
Linguagens Livres de Contexto – Remoção de rec. à esquerda
Observação Relevante
Removemos recursividade como a seguir:
G:
A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n
G’ (sem rec. à esquerda):
A ! ⌫1 | ⌫2 | . . . | ⌫n | ⌫1Z | ⌫2Z | . . . | ⌫nZ
Z ! µ1Z | µ2Z | . . . | µmZ | µ1 | µ2 | . . . | µm
Outros autores (e.g., Aho) removem como a seguir:
G:
A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n
G’ (sem rec. à esquerda):
A ! ⌫1Z | ⌫2Z | . . . | ⌫nZ
Z ! µ1Z | µ2Z | . . . | µmZ |
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 263 / 468
Linguagens Livres de Contexto
Forma Normal de Greibach
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 264 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach
Uma GLC G = (V, ⌃, P, S) está na FN de Greibach se suas
regras têm uma das seguintes formas:
A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S}]
A ! a
S !
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 265 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach
1o passo:
Transformar GLC para FN de Chomsky
2o passo:
Ordenar variáveis (i.e., cada variável ganha um número)
S = 1, A = 2, B = 3, . . .
Resolver, em ordem, as recursões
recursões diretas e indiretas
3o passo: regras das seguintes formas
S !
A ! aw
A ! Bw onde w 2 V⇤
e num(B) > num(A)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 266 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
Exemplo
S ! AB |
A ! AB | CB | a
B ! AB | b
C ! AC | c
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 267 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[1] (S = 1; A = 2; B = 3; C = 4)
Eliminando recursão à esquerda em A:
S ! AB | – ok, A > S
A ! CBR1 | aR1 | CB | a Aantes ! AB | CB | a – ok, C > A
B ! AB | b – não ok
C ! AC | c – não ok
R1 ! BR1 | B
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 268 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[2] (S = 1; A = 2; B = 3; C = 4)
Movendo lado direito de A para regra B ! AB e C ! AC
S ! AB |
A ! CBR1 | aR1 | CB | a
B ! CBR1B | aR1B | CBB | aB | b Bantes ! AB | b – ok, C > B
C ! CBR1C | aR1C | CBC | aC | c Cantes ! AC | c – rec. esq.
R1 ! BR1 | B
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 269 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[3] (S = 1; A = 2; B = 3; C = 4)
Eliminando recursão à esquerda em C:
S ! AB | – ok 3opasso
A ! CBR1 | aR1 | CB | a – ok 3opasso
B ! CBR1B | aR1B | CBB | aB | b – ok 3opasso
C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2 – ok 3opasso
Cantes ! CBR1C | aR1C | CBC | aC | c
R1 ! BR1 | B
R2 ! BR1CR2 | BCR2 | BR1C | BC
PS
C já está na FN de Greibach
Mas e B?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 270 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[4] (S = 1; A = 2; B = 3; C = 4)
Movendo regra C para lado direito de B:
S ! AB |
A ! CBR1 | aR1 | CB | a
B ! aR1B | aB | b | Bantes ! CBR1B | aR1B | CBB | aB | b
aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B |
aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB
C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2
R1 ! BR1 | B
R2 ! BR1CR2 | BCR2 | BR1C | BC
PS
B agora também está na FN de Greibach
Repetir o procedimento para A, S, R1 e R2 (nesta ordem)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 271 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[5] (S = 1; A = 2; B = 3; C = 4)
Movendo regra C para lado direito de A:
S ! AB | Aantes ! CBR1 | aR1 | CB | a
A ! aR1CBR1 | aCBR1 | cBR1 | aR1CR2BR1 | aCR2BR1 | cR2BR1 |
aR1 | aR1CB | aCB | cB | aR1CR2B | aCR2B | cR2B | a
B ! aR1B | aB | b |
aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B |
aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB
C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2
R1 ! BR1 | B
R2 ! BR1CR2 | BCR2 | BR1C | BC
PS
A agora também está na FN de Greibach
Repetir o procedimento para S, R1 e R2 (nesta ordem)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 272 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[6] (S = 1; A = 2; B = 3; C = 4)
Movendo regra A para lado direito de S: Santes ! AB |
S ! aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B |
aR1B | aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB | aB |
A ! aR1CBR1 | aCBR1 | cBR1 | aR1CR2BR1 | aCR2BR1 | cR2BR1 |
aR1 | aR1CB | aCB | cB | aR1CR2B | aCR2B | cR2B | a
B ! aR1B | aB | b |
aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B |
aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB
C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2
R1 ! BR1 | B
R2 ! BR1CR2 | BCR2 | BR1C | BC
PS
S agora também está na FN de Greibach
Repetir o procedimento para R1 e R2 (nesta ordem)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 273 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[7] (S = 1; A = 2; B = 3; C = 4)
Movendo regra B para lado direito de R1 :
S ! aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B |
aR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB | aB |
A ! aR1 CCBR1 | aCCBR1 | cCBR1 | aR1 CR2 CBR1 | aCR2 CBR1 | cR2 CBR1 |
aR1 | aR1 CB | aCB | cB | aR1 CR2 B | aCR2 B | cR2 B | a
B ! aR1 B | aB | b |
aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B |
aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB
C ! aR1 C | aC | c | aR1 CR2 | aCR2 | cR2
R1 ! aR1 BR1 | aBR1 | bR1 |
aR1 CBR1 BR1 | aCBR1 BR1 | cBR1 BR1 | aR1 CR2 BR1 BR1 | aCR2 BR1 BR1 | cR2 BR1 BR1 |
aR1 CBBR1 | aCBBR1 | cBBR1 | aR1 CR2 BBR1 | aCR2 BBR1 | cR2 BBR1
aR1 B | aB | b |
aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B |
aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB
R2 ! BR1 CR2 | BCR2 | BR1 C | BC
PS
R1 agora também está na FN de Greibach
Repetir o procedimento para R2 (nesta ordem)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 274 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
FN de Greibach[8] (S = 1; A = 2; B = 3; C = 4)
Movendo regra B para lado direito de R2 :
S ! aR1 CCBR1 B | aCCBR1 B | cCBR1 B | aR1 CR2 CBR1 B | aCR2 CBR1 B | cR2 CBR1 B |
aR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB | aB |
A ! aR1 CCBR1 | aCCBR1 | cCBR1 | aR1 CR2 CBR1 | aCR2 CBR1 | cR2 CBR1 |
aR1 | aR1 CB | aCB | cB | aR1 CR2 B | aCR2 B | cR2 B | a
B ! aR1 B | aB | b |
aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B |
aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB
C ! aR1 C | aC | c | aR1 CR2 | aCR2 | cR2
R1 ! aR1 BR1 | aBR1 | bR1 |
aR1 CBR1 BR1 | aCBR1 BR1 | cBR1 BR1 | aR1 CR2 BR1 BR1 | aCR2 BR1 BR1 | cR2 BR1 BR1 |
aR1 CBBR1 | aCBBR1 | cBBR1 | aR1 CR2 BBR1 | aCR2 BBR1 | cR2 BBR1
aR1 B | aB | b |
aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B |
aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB
R2 ! aR1 BR1 CR2 | aBR1 CR2 | bR1 CR2 |
aR1 CBR1 BR1 CR2 | aCBR1 BR1 CR2 | cBR1 BR1 CR2 | aR1 CR2 BR1 BR1 CR2 | aCR2 BR1 BR1 CR2 | cR2 BR1 BR1 CR2 |
aR1 CBBR1 CR2 | aCBBR1 CR2 | cBBR1 CR2 | aR1 CR2 BBR1 CR2 | aCR2 BBR1 CR2 | cR2 BBR1 CR2
aR1 BCR2 | aBCR2 | bCR2 |
aR1 CBR1 BCR2 | aCBR1 BCR2 | cBR1 BCR2 | aR1 CR2 BR1 BCR2 | aCR2 BR1 BCR2 | cR2 BR1 BCR2 |
aR1 CBBCR2 | aCBBCR2 | cBBCR2 | aR1 CR2 BBCR2 | aCR2 BBCR2 | cR2 BBCR2
aR1 BR1 C | aBR1 C | bR1 C |
aR1 CBR1 BR1 C | aCBR1 BR1 C | cBR1 BR1 C | aR1 CR2 BR1 BR1 C | aCR2 BR1 BR1 C | cR2 BR1 BR1 C |
aR1 CBBR1 C | aCBBR1 C | cBBR1 C | aR1 CR2 BBR1 C | aCR2 BBR1 C | cR2 BBR1 C
aR1 BC | aBC | bC |
aR1 CBR1 BC | aCBR1 BC | cBR1 BC | aR1 CR2 BR1 BC | aCR2 BR1 BC | cR2 BR1 BC |
aR1 CBBC | aCBBC | cBBC | aR1 CR2 BBC | aCR2 BBC | cR2 BBC
Agora está na Forma Normal de Greibach (FNG)! =)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 275 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
Comentários Finais
FN de Greibach:
Gramáticas grandes (i.e., diversas regras)
Gramáticas sem a simplicidade original
Transformação de GLCs para FN de Greibach pode ser
automatizada (via algoritmo descrito nos slides anteriores)
Propriedades importante de GLC na FN de Greibach:
Toda derivação adiciona um terminal no início da palavra
que está sendo derivada
Logo, não existe recursão à esquerda (direta ou indireta)
Palavras de tamanho n > 0 são derivadas aplicando-se
exatamente n regras
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 276 / 468
Linguagens Livres de Contexto – Forma Normal de Greibach
Exercício de Fixação (apenas os passos da FNG)
G : S ! AB | BA | a
A ! AB | b | c
B ! AB | BA | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 277 / 468
Linguagens Livres de Contexto
Autômatos com Pilha
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 278 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha
AFDs são incapazes de reconhecer aibi porque possuem
uma “memória limitada”
Memória de um AFD: seus estados, os quais são finitos
Autômatos com Pilha (AP):
AFND- + Pilha de tamanho infinito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 279 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômato com Pilha Não-Determinístico (APND)
Um APND é uma sextupla (Q, ⌃, , , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da pilha
: Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ ))
= função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Permite transições (qi, a, b) e (qi, a0, b0) compatíveis:
É ND, i.e., (qi, a, B) = {[qj, C], [qk, D]}
Uma palavra w 2 ⌃⇤ é dita ser aceita por um APND se, e
somente se, existe uma computação que a consome e
para em um estado final com pilha vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 280 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha
Exemplo: (qi, a, A) = [qj, B]
qi qj
a A/B
qi : estado atual
a: símbolo a ser lido pela entrada
A: símbolo no topo da pilha (a ser desempilhado)
qj : novo estado
B: novo topo da pilha (a ser empilhado)
Se (estado== qi) && (entrada== a) && (topo == A) então
Lê a da entrada
Muda o estado atual de qi para qj
Desempilha A do topo da pilha e empilha B
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 281 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha: Transições
Transições são permitidas
Exemplo: (qi, a, A) = [qj, B]
Se a = , não irá ler nada da entrada
Se A = , irá realizar a transição independente do símbolo
que estiver no topo da pilha
Se B = , não irá empilhar nada após a transição
Se A = e B = em todas as transições: o AP é um AFND-
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 282 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha: Transições
Exemplos:
(qi, , A) = [qj, ]
qi qj
A/
(qi, , ) = [qj, B]
qi qj
/B
(qi, a, ) = [qj, ]
qi qj
a /
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 283 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha: Aceitação
Seja M = (Q, ⌃, , , q0, F) um AP
Uma palavra w 2 ⌃⇤ é aceita por M se existe uma
computação da forma:
[q0, w, ] `
⇤
[qi, , ], onde qi 2 F
Ou seja:
A palavra de entrada deve ser toda lida
Deve-se terminar em um estado final
A pilha deve começar e terminar vazia
A linguagem de M, denotada por L(M), é o conjunto das
palavras aceitas por M
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 284 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Exemplo Clássico
L(G) = {aibi | i > 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 285 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Exemplo Clássico
L(G) = {aibi | i > 0}
AP:
q0 q1
a /X
b X/
b X/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 285 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha: Exemplos
L1 = {wcwR | w = (a [ b)⇤}
L2 = {ai | i 0} [ {aibi | i 0}
L3 = palíndromos de tamanho par sobre {a, b}
L4 = {aib2i | i 1}
L5 = palavras sobre {a, b} com o mesmo número de a e b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 286 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Autômatos com Pilha Determinísticos (APD)
Assuma as transições:
(qi, u, A) = [qj, C]
(qi, v, B) = [qk , D]
qi
qj
qk
u A/C
v B/D
Um AP é determinístico se não possui transições compatíveis
Essas duas transições são compatíveis se:
u = v e A = B
u = v e (A = ou B = )
A = B e (u = ou v = )
(u = ou v = ) e (A = ou B = )
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 287 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Poder computacional
AP sem uso da pilha
Semelhante ao AF e reconheceria a classe das LR
APD
Aceita um importante subconjunto próprio da classe de LLC
Aplicação: analisadores sintáticos (compiladores)
APND
Aceita a classe das LLC
AP com 2 (ou mais) pilhas
Mesmo poder computacional da MT (dispositivo mais geral
da computação)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 288 / 468
Linguagens Livres de Contexto
Autômatos com Pilha
Variantes
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 289 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Atômicos
Transições são sempre de uma das formas:
(qi, a, ) = [qj, ] – apenas lê entrada
(qi, , A) = [qj, ] – apenas desempilha
(qi, , ) = [qj, A] – apenas empilha
Todo AP pode ser transformado em um AP atômico
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 290 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Atômicos – Exemplo
AP atômico para L = {aibi | i > 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 291 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Atômicos – Exemplo
AP atômico para L = {aibi | i > 0}
q0
q1
q2 q3
q4
a / /A
b / A/
b / A/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 291 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Estendidos
Pode-se empilhar mais de uma letra, como resultado de
uma única transição
(qi, a, A) = [qj, BCD]
Leia a,
Desempilha A e
Empilha D, C e B (i.e., B é o novo topo)
qi qj
a A/BCD
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 292 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Estendidos – Exemplo #1
AP estendido para L = {aib2i | i 1}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 293 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Estendidos – Exemplo #1
AP estendido para L = {aib2i | i 1}
q0 q1
a /XX
b X/
b X/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 293 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Estendidos – Exemplo #2
AP estendido para L = {ai(bc)i
| i 1}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 294 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Estendidos – Exemplo #2
AP estendido para L = {ai(bc)i
| i 1}
q0 q1
a /BC
b B/
b B/
c C/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 294 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
APs Atômicos e Estendidos
Variantes de APs (i.e., Atômicos e Estendidos) não aumentam o
poder de expressão de APs
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 295 / 468
Linguagens Livres de Contexto
Autômatos com Pilha
Critérios de Aceitação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 296 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Critério de Aceitação
Critério normal de aceitação: por estado final e pilha vazia
[q0, w, ] `
⇤
[qi, , ], qi 2 F
Critério alternativo de aceitação: por estado final
[q0, w, ] `
⇤
[qi, , ↵], qi 2 F, ↵ 2 ⇤
Basta processar toda a palavra e terminar em estado final
Critério alternativo de aceitação: por pilha vazia
[q0, w, ] `
+
[qi, , ], qi 2 Q
Basta processar toda a palavra e terminar com a pilha vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 297 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Estado Final
Novo critério não aumenta o poder de expressão de APs
Quando a aceitação é por estado final e pilha vazia, às
vezes são acrescentados transições e/ou estados apenas
para esvaziar a pilha
Exemplo: {ai
| i > 0} [ {ai
bi
| i > 0}
No caso de aceitação por estado final, tais estados são
desnecessários
q0
q1
q2
a /X X/
b X/
X/
b X/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 298 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Estado Final
Lema: Seja L uma linguagem aceita por um AP M por
estado final, então existe um AP M0 que aceita L por estado
final e pilha vazia
Basta acrescentar um novo estado final qf
0
e
’(qi, , ) = [qf
0
, ], para todo qi 2 F
’(qf
0
, , X) = [qf
0
, ], para todo X 2
Aceitação: [q0, w, ] `
⇤
[qi, , ↵] ` [qf
0, , ↵] `
⇤
[qf
0, , ]
Resumindo:
Aceita por estado final ) aceita por estado final e pilha
vazia (pelo lema acima)
Aceita por estado final e pilha vazia ) aceita por estado final
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 299 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Estado Final – Exemplo
L = {aibj | i j 0}
Estado Final (EF) Estado Final e Pilha Vazia (EF/PV)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Estado Final – Exemplo
L = {aibj | i j 0}
Estado Final (EF)
q0 q1
a /A
b A/
b A/
Estado Final e Pilha Vazia (EF/PV)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Estado Final – Exemplo
L = {aibj | i j 0}
Estado Final (EF)
q0 q1
a /A
b A/
b A/
Estado Final e Pilha Vazia (EF/PV)
q0 q1
q0
f
a /A
b A/
/
/
b A/
A/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Pilha Vazia
Critério alternativo de aceitação: por pilha vazia
[q0, w, ] `
+
[qi, , ], qi 2 Q
Observe que não se exige mais que qi 2 F
Basta que a palavra seja toda lida (sempre) e pilha vazia
Por que não [q0, w, ] `
⇤
[qi, , ] ?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 301 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Pilha Vazia
Lema: Seja L uma linguagem aceita por um AP M por pilha
vazia, então existe um AP M0 que aceita L por estado final e
pilha vazia
Todo estado de M é um estado final em M0
Novo estado inicial q0
0
0
(q0
0
, x, A) = (q0, x, A) e
0
(qi
0
, x, A) = (qi, x, A)
para todo qi 2 Q, x 2 ⌃ [ { }, A 2 [ { }
Resumindo:
Aceita por pilha vazia ) aceita por estado final e pilha vazia
(pelo lema acima)
Aceita por estado final e pilha vazia ) aceita por pilha vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 302 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Pilha Vazia – Exemplo
L = {aibi | i > 0}
Pilha Vazia (PV) Estado Final e Pilha Vazia (EF/PV)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Pilha Vazia – Exemplo
L = {aibi | i > 0}
Pilha Vazia (PV)
q0 q1
a /A
/
b A/
Estado Final e Pilha Vazia (EF/PV)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Aceitação por Pilha Vazia – Exemplo
L = {aibi | i > 0}
Pilha Vazia (PV)
q0 q1
a /A
/
b A/
Estado Final e Pilha Vazia (EF/PV)
q0 q1
q0
0
a /A
/
b A/
a /A
/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468
Linguagens Livres de Contexto – Autômatos com Pilha
Critérios de Aceitação: Teorema
Assuma uma LLC L, logo
Existe um AP M1 que aceita L com critério de aceitação por
pilha vazia e estado final
Existe um AP M2 que aceita L com critério de aceitação por
estado final
Existe um AP M3 que aceita L com critério de aceitação por
pilha vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 304 / 468
Linguagens Livres de Contexto
Algoritmos de Reconhecimento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 305 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Algoritmos de Reconhecimento
Alguns problemas não possuem solução computacional:
1 Certa LLC é ambígua?
2 Duas LLCs são iguais ou diferentes?
3 Uma palavra pertence a uma linguagem?
No entanto, o problema (3) possui solução em LLCs
Uma palavra pertence a uma LLC?
Algoritmos de reconhecimento
válidos para qualquer linguagem da classe
complexidade computacional (tempo e espaço)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 306 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Reconhecedores que utilizam AP
muito simples
em geral, ineficientes
tempo de processamento é proporcional a k|w|
w: palavra de entrada
k: constante que depende do autômato
Reconhecedores que não utilizam AP
Tempo de processamento proporcional a |w|3
contudo limite não foi provado, pode ser até inferior
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 307 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Algoritmos construídos a partir de uma GLC
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 308 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Classificação
Top-Down (ou Preditivo)
constrói uma árvore de derivação
a partir da raiz (símbolo inicial da gramática)
com ramos em direção às folhas (terminais)
Bottom-up
oposto do Top-Down
parte das folhas
construindo a árvore de derivação em direção à raiz
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 309 / 468
Linguagens Livres de Contexto
Algoritmos de Reconhecimento
Autômato com Pilha como Reconhecedor
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 310 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Autômato com Pilha como Reconhecedor
Reconhecedores usando AP
Construção relativamente simples e imediata
Relação “direta” entre produções e as transições do AP
Algoritmos
Top-Down
Simula derivação mais à esquerda
Não determinista
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 311 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Autômato com Pilha como Reconhecedor
É direta a conversão de qualquer GLC na FN de Greibach
para um AP
Cada produção gera exat. um terminal (FN de Greibach)
Logo, geração de w requer |w| etapas de derivação
No entanto, cada terminal pode ter diversas produções
associadas
AP testa as diversas alternativas
número de passos para reconhecer w é proporcional a k|w|
k = aprox. metade da média de produções das variáveis
Logo, o tempo de reconhecimento é pode ser muito
ineficiente para entradas mais longas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 312 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exemplo
L = {anbn | n 1}
G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! aSb, S ! ab}, S}
Forma Normal de Greibach:
G0
(L) = {{S0
, S, B}, {a, b},
{S0
! aSB, S0
! aB, S ! aSB, S ! aB, B ! b}, S0
}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 313 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exemplo
L = {anbn | n 1}
G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! aSb, S ! ab}, S}
Forma Normal de Greibach:
G0
(L) = {{S0
, S, B}, {a, b},
{S0
! aSB, S0
! aB, S ! aSB, S ! aB, B ! b}, S0
}
q0 q1
a /SB
a /B
a S/SB
a S/B
b B/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 313 / 468
Linguagens Livres de Contexto
Algoritmos de Reconhecimento
Autômato com Pilha Descendente
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 314 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Autômato com Pilha Descendente
Forma alternativa de construir AP
não há necessidade de estar na FNG
Igualmente simples e com o mesmo nível de eficiência
a partir de uma GLC sem recursão à esquerda
simula a derivação mais à esquerda
Algoritmo
inicialmente, empilha o símbolo inicial
se topo == variável, então substitui (não determinismo) por todas
as produções da variável
se topo = terminal, então testa se é igual ao próximo símbolo
da entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 315 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exemplo
L = {anbn | n 1}
G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! AX, S ! AB, X !
SB, A ! a, B ! b}, S}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 316 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exemplo
L = {anbn | n 1}
G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! AX, S ! AB, X !
SB, A ! a, B ! b}, S}
q0 q1 q2
/S
S/AX
S/AB
X/SB
A/a
B/b
a a/
b b/
/
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 316 / 468
Linguagens Livres de Contexto
Algoritmos de Reconhecimento
Algoritmo de Cocke-Younger-Kasami (CYK)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 317 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Algoritmo de Cocke-Younger-Kasami (CYK)
Proposto por J. Cocke, D. H. Younger e T. Kasami em 1965
GLC deve estar na FNC
Mecânica:
Estratégia bottom-up para criação de todas as possíveis
árvores de derivação da palavra de entrada w
Tempo de processamento proporcional a |w|3
(ruim)
Ideia básica:
Tabela triangular de derivação
Célula: raízes que podem gerar a correspondente subárvore
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 318 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exemplo (contribuição de Alberto Hokari)
Considere a seguinte GLC L:
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 319 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Coloca-se a palavra a ser reconhecida na base da tabela
a a a b b b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 320 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 1a linha devemos verificar qual variável
gera a sequencia de 1 terminal
a a a b b b
A A A B B B1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 321 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 2a linha devemos verificar qual variável
gera a sequencia de 2 terminais
Por exemplo, existe alguma regra que produza AA?
A resposta é não, então marcamos a célula com um –
a a a b b b
A A A B B B1
2 -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 322 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
O processo se repete
a a a b b b
A A A B B B1
2 - -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 323 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Neste caso, existem duas regras que geram AB
Logo, ambas são colocadas na célula
S,X
a a a b b b
A A A B B B1
2 - -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 324 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
O processo se repete até completar a 2a linha
S,X
a a a b b b
A A A B B B1
2 - - - -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 325 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 3a linha devemos verificar qual variável
gera a sequência de 3 terminais
as setas mostram quais pares de células devemos trabalhar a
fim de se obter a sequência de três terminais
a a a b b b
1
2
3
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 326 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
1 + 2 = A + = A
Par inválido, logo marcamos a célula com um
S,X
a a a b b b
A A A B B B1
2 - - - -
-3
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 327 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
2 + 1 = + A = A
Par inválido, logo marcamos a célula com um
S,X
a a a b b b
A A A B B B1
2 - - - -
-3
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 328 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
O processo se repete até completar a 3a linha
S,X
a a a b b b
A A A B B B1
2 - - - -
-3 - -T
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 329 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 4a linha devemos verificar qual variável
gera a sequência de 4 terminais
o processo se repete para as linhas superiores
S,X
a a a b b b
A A A B B B1
2 - - - -
-3 - -T
4 -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 4a linha devemos verificar qual variável
gera a sequência de 4 terminais
o processo se repete para as linhas superiores
S,X
a a a b b b
A A A B B B1
2 - - - -
-3 - -T
4 -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Para preencher a 4a linha devemos verificar qual variável
gera a sequência de 4 terminais
o processo se repete para as linhas superiores
S,X
a a a b b b
A A A B B B1
2 - - - -
-3 - -T
4 -
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
L aceita a palavra aaabbb? (contribuição de Alberto Hokari)
Ao final do processo, se o símbolo inicial se encontra na
primeira célula, a palavra é reconhecida pela linguagem
Neste exemplo, aaabbb 2 L
Como S é a raiz então
a palavra é reconhecida
S,X
a a a b b b
A A A B B B1
2 - - - -
-3 - -T
4 - S,X -
5
6
T-
S,X
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 331 / 468
S ! AT | AB
T ! XB
X ! AT | AB
A ! a
B ! b
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exercício de Fixação #1
Verifique se a palavra abab é aceita na seguinte GLC:
S ! XY
T ! ZT | a
X ! TY
Y ! YT | b
Z ! TZ | b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 332 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Exercício de Fixação #2
Verifique se a palavra baaba é aceita na seguinte GLC:
S ! AB | BC
A ! BA | a
B ! CC | b
C ! AB | a
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 333 / 468
Linguagens Livres de Contexto
Algoritmos de Reconhecimento
Algoritmo de Early
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 334 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Algoritmo de Early
Possivelmente o mais rápido algoritmo para LLC
Proposto em 1968
Tempo de processamento:
qualquer GLC sem produções : |w|3
qualquer GLC não ambígua: |w|2
muitas gramáticas de interesse prático: |w|
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 335 / 468
Linguagens Livres de Contexto – Algoritmos de Reconhecimento
Algoritmo de Early
Entrada: GLC sem produções vazias
Algoritmo Top-Down (a partir de S)
Executa sempre a derivação mais à esquerda
Cada iteração gera um terminal
comparado com o símbolo da entrada
continua se puder achar uma produção que gere o próximo
símbolo
Algoritmos eficientes como o de Early serão abordados em
Compiladores!
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 336 / 468
Linguagens Livres de Contexto
Algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 337 / 468
Linguagens Livres de Contexto
Algoritmos
Transformação de GLCs para APs
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 338 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de GLCs para APs (veja Autômato com Pilha como Reconhecedor)
Teorema: Se L é uma LLC, então há um AP que aceita L
Seja L uma LLC e G = (V, ⌃, P, S) a GLC que gera L
Transforme G para a forma normal de Greibach:
A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S}
A ! a
S !
Crie um AP estendido M = (Q, ⌃, , , q0, F): (estado inicial q0)
QM = {q0, q1}, ⌃M = ⌃G, M = VG {S}, FM = {q1}
(q0, a, ) = { [q1, w] | S ! aw 2 P }
(q1, a, A) = { [q1, w] | A ! aw 2 P e A 2 V {S} }
(q0, , ) = [q1, ], se S ! 2 P
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 339 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de GLCs para APs – Exemplo
S ! aAB | aB
A ! aAB | aB
B ! b
Intuitivamente, uma regra A ! aAB somente pode ser
aplicada quando o topo da pilha for A
Neste caso, aplicar a regra em questão implica em:
Desempilhar A
Ler a
Empilhar AB
Ou seja, a pilha armazena as variáveis que ainda devem ser
derivadas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 340 / 468
Linguagens Livres de Contexto
Algoritmos
Transformação de APs para GLCs
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 341 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs
Toda linguagem aceita por um AP é uma LLC
Dado um AP, gerar um AP M’ estendido onde ’ herda todas
as transições de e acrescenta duas novas transições:
Se [qj, ] 2 (qi, u, ) então
[qj , A] 2 0
(qi , u, A), para todo A 2
Se [qj, B] 2 (qi, u, ) então
[qj , BA] 2 0
(qi , u, A), para todo A 2
Interpretação para novas transições:
Todas transições que não desempilham, passam agora a
empilhar e desempilhar o mesmo símbolo
Veja que é para todo A 2 M (qualquer que seja o topo)
Claramente, L(M) = L(M0)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 342 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs
Algoritmo para gerar uma GLC G a partir do AP M0
Variáveis não vão ser mais maiúsculas, mas sim tuplas da
forma <qi, A, qj>
estou em qi ,
quero ir para qj e
existe A no topo da pilha
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 343 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs
Regras de G:
#1 S ! <q0, , qj>, para todo qj 2 F
#2 Se [qj, B] 2 0
(qi, x, A), então (A e B 2 [ { })
<qi , A, qk > ! x<qj , B, qk >, para todo qk 2 Q
#3 Se [qj, BA] 2 0
(qi, x, A), então (A e B 2 )
<qi , A, qk > ! x<qj , B, qn >< qn , A, qk >, qk , qn 2 Q
#4 Para todo qk 2 Q
<qk , , qk > !
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 344 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
Construa uma gramática G para o seguinte AP M:
Q = {q0, q1}
⌃ = {a, b, c}, = {A}
F = {q1}
L(M) = an
cbn
, n 0
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 345 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
q0 q1
a /A
c /
b A/
Função de transição
(q0, a, ) = [q0, A] – não desempilha e empilha A
(q0, c, ) = [q1, ] – não desempilha, não empilha
(q1, b, A) = [q1, ]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 346 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
q0 q1
a /A
a A/AA
c /
c A/A
b A/
Função de transição 0 é igual a mais duas regras:
0
(q0, a, A) = [q0, AA] – pois A é o único elemento de
0
(q0, c, A) = [q1, A]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 347 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#1 S ! <q0, , qj>, para todo qj 2 F
Logo, primeira regra da GLC será: S ! <q0, , q1>
#2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { })
<qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q
Como [q0, A] 2 (q0, a, ), então
<q0, , qk > ! a<q0, A, qk >
Novas regras:
<q0, , q0 > ! a<q0, A, q0 > – k = 0
<q0, , q1 > ! a<q0, A, q1 > – k = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 348 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#3 Se [qj, BA] 2 0(qi, x, A), então (A e B 2 )
<qi, A, qk > ! x<qj, B, qn >< qn , A, qk >, qk , qn 2 Q
Como [q0, AA] 2 (q0, a, A), então
<q0, A, qk > ! a<q0, A, qn>
Novas regras:
<q0, A, q0 > ! a<q0, A, q0 >< q0 , A, q0 > – k = 0 , n = 0
<q0, A, q1 > ! a<q0, A, q0 >< q0 , A, q1 > – k = 1 , n = 0
<q0, A, q0 > ! a<q0, A, q1 >< q1 , A, q0 > – k = 0 , n = 1
<q0, A, q1 > ! a<q0, A, q1 >< q1 , A, q1 > – k = 1 , n = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 349 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { })
<qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q
Como [q1, ] 2 (q0, c, ), então
<q0, , qk > ! c<q1, , qk >
Novas regras:
<q0, , q0 > ! c<q1, , q0 > – k = 0
<q0, , q1 > ! c<q1, , q1 > – k = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 350 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { })
<qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q
Como [q1, A] 2 (q0, c, A) então
<q0, A, qk > ! c<q1.A, qk >
Novas regras:
<q0, A, q0 > ! c<q1, A, q0 > – k = 0
<q0, A, q1 > ! c<q1, A, q1 > – k = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 351 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { })
<qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q
Como [q1, ] 2 (q1, b, A) então
<q1, A, qk > ! b<q1, , qk >
Novas regras:
<q1, A, q0 > ! b<q1, , q0 > – k = 0
<q1, A, q1 > ! b<q1, , q1 > – k = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 352 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo
#4 Para todo qk 2 Q
<qk , , qk > !
Novas regras:
<q0, , q0> ! – k = 0
<q1, , q1> ! – k = 1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 353 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo – GLC resultante
S ! <q0, , q1>
<q0, , q0> ! a<q0, A, q0>
<q0, , q1> ! a<q0, A, q1>
<q0, A, q0> ! a<q0, A, q0><q0, A, q0>
<q0, A, q1> ! a<q0, A, q0><q0, A, q1>
<q0, A, q0> ! a<q0, A, q1><q1, A, q0>
<q0, A, q1> ! a<q0, A, q1><q1, A, q1>
<q0, , q0> ! c<q1, , q0>
<q0, , q1> ! c<q1, , q1>
<q0, A, q0> ! c<q1, A, q0>
<q0, A, q1> ! c<q1, A, q1>
<q1, A, q0> ! b<q1, , q0>
<q1, A, q1> ! b<q1, , q1>
<q0, , q0> !
<q1, , q1> !
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 354 / 468
Linguagens Livres de Contexto – Algoritmos
Transformação de APs para GLCs – Exemplo – Derivação aacbb
S ) <q0, , q1>
) a<q0, A, q1>
) aa<q0, A, q1><q1, A, q1>
) aac<q1, A, q1><q1, A, q1>
) aacb<q1, , q1><q1, A, q1>
) aacb<q1, A, q1>
) aacbb<q1, , q1>
) aacbb
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 355 / 468
Linguagens Livres de Contexto
Propriedades
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 356 / 468
Linguagens Livres de Contexto – Propriedades
LLCs
Mais geral que LRs
Mas, ainda é relativamente restrita
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 357 / 468
Linguagens Livres de Contexto – Propriedades
Fácil definir linguagens que não são LLC
Palavra duplicada, e.g., L = {ww | w 2 {a, b}⇤}
Analogia com compiladores:
declaração de uma variável antes do seu uso
Triplo balanceamento, e.g., L = {anbncn | n 0}
Mais importante limitação das LLC
(propositalmente) incomum em LPs
Usando Autômato com Pilha
fácil intuir por que não são LLC
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 358 / 468
Linguagens Livres de Contexto – Propriedades
Linguagens de Programação
LPs normalmente são 99% LLC (e 1% safadão)
Mas, LPs são o quê então?
Mas, e a construção if then else?
Isso é encadeamento, não balanceamento
Não confunda!
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 359 / 468
Linguagens Livres de Contexto – Propriedades
Como verificar...
... se uma LLC é fechada para operações
união?
interseção?
concatenação?
complemento?
... se uma LLC é
infinita?
finita?
vazia?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 360 / 468
Linguagens Livres de Contexto – Propriedades
Propriedades de fechamento
Fechamento é importante para
construir novas linguagens a partir de operações sobre
linguagens conhecidas
provar propriedades
construir algoritmos
O conjunto das LLC é fechado para:
União
Concatenação
Kleene
Mas não é fechado para:
Interseção
Complemento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 361 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC é fechado para União
Prova usando AP:
Seja M1 e M2 dois APs que reconhecem duas LLCs
Basta criar um novo AP com um novo estado inicial que
possui transições para os estados iniciais de M1 e M2
(que agora deixam de ser iniciais)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 362 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC é fechado para Concatenação
Prova usando AP:
Seja M1 e M2 dois APs que reconhecem duas LLCs com
critério de aceitação por estado final
Basta criar um novo AP em que o(s) estado(s) final(is) de M1
possui(em) transições para o estado inicial de M2
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 363 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC é fechado para Kleene
Prova usando AP:
Seja M um AP que reconhece uma LLC com critério de
aceitação por estado final
Basta fazer transições do(s) estado(s) final(is) para o estado
inicial
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 364 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC não é fechado para Interseção
Prova por Contradição:
Seja L1 = {ai
bi
cj
| i, j 0} uma LLC
Seja L2 = {aj
bi
ci
| i, j 0} uma LLC
No entanto, L1  L2 = {ai
bi
ci
| i 0} não é LLC
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 365 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC não é fechado para complemento
Prova por Contradição:
Suponha que seja fechado para complemento
Suponha que L1 e L2 são LLC
Então L = L1 [ L2 também é LLC
Mas, L = L1  L2
Já foi mostrado que L1  L2 não necessariamente é LLC
Logo, revendo a hipótese, o conjunto das LLC não é
fechado para complemento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 366 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC não é fechado para complemento
Prova por Intuição:
Suponha uma LLC L
Suponha um AP M que reconheça L (que pode ser APND)
Uma palavra w 2 L se alguma computação de M a aceitar
É possível um AP rejeitar o complemento de L, mas não
aceitar o complemento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 367 / 468
Linguagens Livres de Contexto – Propriedades
O conjunto das LLC não é fechado para complemento
Prova por Intuição:
Suponha uma LLC L
Suponha um AP M que reconheça L (que pode ser APND)
Uma palavra w 2 L se alguma computação de M a aceitar
É possível um AP rejeitar o complemento de L, mas não
aceitar o complemento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 367 / 468
Linguagens Livres de Contexto – Propriedades
Propriedades de fechamento
Teorema: Seja R uma linguagem regular e L uma linguagem
livre de contexto, então R  L é LC
Suponha um AFD N que reconheça R
Suponha um AP M que reconheça L
Basta criar um AP M0 que simule a operação de N e M
Os estados nessa máquina composta serão pares ordenados
[qNi
, qMj
], onde qNi
é um estado de N e qMj
é um estado de M
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 368 / 468
Linguagens Livres de Contexto – Propriedades
LLC é Vazia?
Prova: Suponha uma LLC L
Seja G = (V, ⌃, P, S) uma GLC que reconhece L
Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos
inúteis
Se P0 for vazio, então L é vazia
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 369 / 468
Linguagens Livres de Contexto – Propriedades
LLC é Finita ou Infinita?
Seja G = (V, ⌃, P, S) uma GLC que reconhece L
Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos
inúteis, regras de cadeia e regras
Crie um grafo de dependência das variáveis
Se existirem ciclos no grafo de dependência, L é infinita
Caso contrário, L é finita
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 370 / 468
Linguagens Livres de Contexto – Propriedades
LLC é Finita ou Infinita?
Seja G = (V, ⌃, P, S) uma GLC que reconhece L
Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos
inúteis, regras de cadeia e regras
Crie um grafo de dependência das variáveis
Se existirem ciclos no grafo de dependência, L é infinita
Caso contrário, L é finita
Exemplo (finita ou infinita?)
S ! AB
A ! aCb | a
B ! bB | bb
C ! cBS
S
A
B
C
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 370 / 468
Linguagens Livres de Contexto – Propriedades
Investigação se é LLC
Para demonstrar que uma linguagem L é LC, basta:
Criar um GLC que gere L
Criar um AP que reconheça L
Para demostrar que uma linguagem L não é LC, deve-se:
Aplicar o Lema do Bombeamento para LLCs
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 371 / 468
Linguagens Livres de Contexto – Propriedades
Lema do Bombeamento para LLCs
Ideia similar ao Lema do Bombeamento para LRs
LRs
podem expressar bombeamentos sem qualquer
balanceamento
não podem expressar bombeamentos balanceados 2 a 2
LLCs
podem expressar bombeamentos balanceados 2 a 2
não podem expressar bombeamentos balanceados 3 a 3
Detalhes em Sudkamp [6]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 372 / 468
5. Linguagens Sensíveis ao Contexto – Conteúdo
1 Revisão 3
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
Gramática Sensível ao Contexto 375
Autômato Linearmente Limitado 381
Teoremas 388
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 373 / 468
Linguagens Sensíveis ao Contexto
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 374 / 468
Linguagens Sensíveis ao Contexto
Gramática Sensível ao Contexto
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 375 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Gramática Sensível ao Contexto (GSC)
Uma GSC é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
⌫ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
|µ|  |⌫| (i.e., regras não-contráteis, o que indica que tamanho da forma
sentencial ou aumenta ou permanece constante)
nunca é uma palavra válida em uma LSC
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 376 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Gramáticas Sensíveis ao Contexto
Se L1 é uma LR, então L1 é uma LLC
Se L2 é uma LLC, então L2–{ } é uma LSC
É uma GSC?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Gramáticas Sensíveis ao Contexto
Se L1 é uma LR, então L1 é uma LLC
Se L2 é uma LLC, então L2–{ } é uma LSC
É uma GSC?
S ! aSCbc |
Cb ! bc
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Gramáticas Sensíveis ao Contexto
Se L1 é uma LR, então L1 é uma LLC
Se L2 é uma LLC, então L2–{ } é uma LSC
É uma GSC?
S ! aSCbc |
Cb ! bc
É uma GSC?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Gramáticas Sensíveis ao Contexto
Se L1 é uma LR, então L1 é uma LLC
Se L2 é uma LLC, então L2–{ } é uma LSC
É uma GSC?
S ! aSCbc |
Cb ! bc
É uma GSC?
S ! aAc | bc
Ac ! b
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Exemplo Clássico
L = {aibici | i > 0}
GSC(L):
Derivação, por exemplo, de aabbcc:
S ) aAbc ) aabCbc ) aabbCc ) aabbcc
Toda LSC é recursiva, logo:
existe um ALL que reconhece uma LSC
existe uma MT que decide LSC, i.e., sempre para para
qualquer entrada w 2 ⌃⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 378 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Exemplo Clássico
L = {aibici | i > 0}
GSC(L):
S ! aAbc | abc
A ! aAbC | abC
Cb ! bC
Cc ! cc
Derivação, por exemplo, de aabbcc:
S ) aAbc ) aabCbc ) aabbCc ) aabbcc
Toda LSC é recursiva, logo:
existe um ALL que reconhece uma LSC
existe uma MT que decide LSC, i.e., sempre para para
qualquer entrada w 2 ⌃⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 378 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Por que não usamos apenas terminais
L = {aibici | i > 0}
GSC(L):
S ! aAbc | abc
A ! aAbc | abc
cb ! bc
cc ! cc
Derivação, por exemplo, de aabbcc:
S ) aAbc ) aabcbc ) aabbcc
Durante uma derivação:
Se w 2 ⌃⇤
, então w é uma palavra da linguagem
aabcbc 2 L?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 379 / 468
Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto
Exercícios
1 Defina L(G) para a seguinte GSC:
S ! SBA | a
BA ! AB
aA ! aaB
B ! b
2 Desenvolva uma GSC G em que L(G) = {aib2ici | i > 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 380 / 468
Linguagens Sensíveis ao Contexto
Autômato Linearmente Limitado
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 381 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
Autômato Linearmente Limitado (ALL)
Um ALL é uma óctupla (Q, ⌃, , , q0, <, >, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da fita
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
< e > = delimitadores da palavra de entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 382 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
Autômato Linearmente Limitado (ALL)
Seja w uma palavra de entrada
Configuração inicial da fita: hwi
Delimitadores podem ser lidos, mas não apagados
Delimitadores não podem ser ultrapassados
Tamanho da fita = |w| + 2
Basicamente, um ALL é uma MT cuja quantidade de fita
disponível é limitada ao tamanho da palavra de entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 383 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
Por que sempre para?
Assuma um ALL a verificar a palavra aabb
Logo, configuração inicial da fita: haabbi
Como a fita é finita, o número máximo de combinações é
dado pela fórmula:
max_combinacoes = |Q| ⇥ |w| ⇥ | ||w|
onde Q é o conjunto de estados, w é a palavra e é o alfabeto da fita
Assuma, nesse exemplo, Q = {q0, q1} e = {h, i, a, b, X}.
Dessa forma, o número máximo de configurações seria:
max_combinacoes = 2 ⇥ 4 ⇥ 54
= 5.000
Se o ALL ultrapassa esse limite, a palavra é rejeitada, pois
certamente está repetindo configurações (loop)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 384 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
Exemplo Clássico
L = {aibici | i > 0}
q0 q1 q2 q3 q4 q5
q6 q7
</< D a/X D
Y/Y D
b/Y D
Y/Y D
a/a D
c/Z D
Z/Z D
b/b D
>/> E
c/c D
X/X D
Z/Z E
Y/Y E
c/c E
b/b E
a/a E
>/> E
Y/Y D
Z/Z D
Z/Z E
Y/Y E
X/X E
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 385 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
Exercício de Fixação
1 L1 = {wcw | w 2 {a, b}⇤ e tem o mesmo número de a e b}
2 L2 = {ww | w 2 {a, b}+}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 386 / 468
Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado
L1 = {wcw | w 2 {a, b}⇤ e tem o mesmo número de a e b}
q0 q1
q2
q3
q4
q5
q6q7
q8
q9
q0
0
q0
1
q0
2
q0
3
q0
4
</< D
a/X D
b/Y D
c/c D
a/a D
b/b D
c/c D
a/a D
b/b D
a/X E
X/X D
Y/Y D
b/Y E
X/X D
Y/Y D
c/c E X/X E
Y/Y E
X/X D
Y/Y D
a/a E
b/b E
c/c D
>/> E
X/X D
Y/Y D
</< D
X/a E
Y/b E
c/c E
c/c D
a/X D
b/X D
X/X D
b/X E
X/X D
a/a D
a/X E
X/X D
b/b D
</< D a/a E
b/b E
X/X E
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 387 / 468
Linguagens Sensíveis ao Contexto
Teoremas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 388 / 468
Linguagens Sensíveis ao Contexto – Teoremas
Teorema #1: Se G é GSC, então L(G) é recursiva
Mostrar que existe uma MT M que decide L(G)
Se p é derivável ou não por L(G), então p é decidido por M
M deve simular as derivações de G
M é uma MT não-determinística com 3 fitas
Fita #1: palavra de entrada p
Fita #2: regras de G
u ! v na fita fica ##u#v##
##: separador de regras e #: !
Fita #3: usada para registrar todas as formas sentenciais de
uma derivação
Ex.: S#aAbc#aabCbc#aabbCc#aabbcc
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 389 / 468
Linguagens Sensíveis ao Contexto – Teoremas
Teorema #1: Se G é GSC, então L(G) é recursiva
Funcionamento de M (máquina que decide L):
S# é gravado na posição 1 da Fita #3
Regras de G são escritas na Fita #2
loop
Escolher uma regra u#v na Fita #2
Seja q# a palavra mais recente gravada na Fita #3
Escolher uma instância de u em q (se existir). Senão, parar em
estado de rejeição
Sendo q = xuy#, gravar xvy# na Fita #3, logo após q#
Se xvy == p, parar em estado de aceitação
Se xvy ocorrer em outra forma sentencial na Fita #3 ou
tam(xvy) > tam(p), parar em estado de rejeição
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 390 / 468
Linguagens Sensíveis ao Contexto – Teoremas
Teorema #1: Se G é GSC, então L(G) é recursiva
Funcionamento de M (máquina que decide L)
Se xvy ocorrer em outra posição na Fita #3, parar em estado
de rejeição
Justificativa: derivações cíclicas S )+
w )+
w
Se tam(xvy) > tam(p), parar em estado de rejeição
Justificativa: em GSC, derivações são não-contráteis
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 391 / 468
Linguagens Sensíveis ao Contexto – Teoremas
Teorema #2: Se L é uma LSC, então tem uma GSC G tal que L(G) = L
Se L é uma LSC, então existe um ALL M cuja L(M) = L
Em uma LSC, nenhuma forma sentencial pode ser maior que
a palavra de entrada
É impossível uma derivação S )⇤
↵ )⇤
w, onde
tam(↵) > tam(w)
Logo, “memória” (ou quantidade de fita) necessária para
realizar derivações pode ser limitada pelo tamanho da
palavra de entrada
Gramáticas irrestritas não são reconhecidas por ALL
É possível uma derivação S )⇤
↵ )⇤
w, onde
tam(↵) > tam(w)
ALLs são mais parecidos com computadores reais do que
uma MT (já que essas assumem memória infinita)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 392 / 468
6. Linguagens Irrestritas – Conteúdo
1 Revisão 3
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
5 Linguagens Sensíveis ao Contexto 373
Gramática Irrestrita 395
Teoremas
6 Linguagens Irrestritas 393
Máquinas de Turing 404
Variantes
Teoremas 444
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 393 / 468
Linguagens Irrestritas
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 394 / 468
Linguagens Irrestritas
Gramática Irrestrita
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 395 / 468
Linguagens Irrestritas – Gramática Irrestrita
Gramática Irrestrita (GI)
Todo o universo de linguagens é gerado por GIs
Uma GI é uma quádrupla (V, ⌃, P, S):
V = conjunto de símbolos não-terminais (variáveis)
⌃ = conjunto de símbolos terminais (⌃  V = )
P = conj. de regras (produções)
S = símbolo não-terminal inicial (S 2 V)
Regras: µ ! ⌫
µ 2 (V [ ⌃)+
(i.e., palavra formada por elementos de V e ⌃)
⌫ 2 (V [ ⌃)⇤
(i.e., palavra formada por elementos de V e ⌃)
“Quase” nenhuma restrição é imposta (|µ| > 0)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 396 / 468
Linguagens Irrestritas – Gramática Irrestrita
Exemplo Clássico
L = {u[u] | u 2 {a, b}⇤}
GI(L):
S ! aT[a] | bT[b] | []
T[! aT[A | bT[B | [
Aa ! aA
Ab ! bA
Ba ! aB
Bb ! bB
A] ! a]
B] ! b]
Toda GI é recursivamente enumerável, logo:
existe uma MT que reconhece LI, mas não necessariamente
para para qualquer entrada w 2 ⌃⇤
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 397 / 468
Linguagens Irrestritas – Gramática Irrestrita
Exemplo Clássico
GI:
S ! aAbc |
A ! aAbC |
Cb ! bC (b’s podem ser passados para antes dos C’s)
CC ! Cc
Derivações:
S ) aAbc )i 1
ai
A(bC)i 1
bc ) ai
(bC)i 1
bc
Exemplificando (i=3):
aaabCbCbc ) aaabCbbCc ) aaabCbbcc )
aaabbCbcc ) aaabbbCcc ) aaabbbccc
Logo: L(GI) = aibici, i 0
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 398 / 468
Linguagens Irrestritas – Gramática Irrestrita
Exercício
L = {aibjaibj | i, j 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 399 / 468
Linguagens Irrestritas – Gramática Irrestrita
Exercício
L = {aibjaibj | i, j 0}
GI(L):
S ! X | Y | aPAbQb
X ! aaX |
Y ! bbY |
P ! aPA |
Q ! bQb | E
Ab ! bA
AE ! a
Aa ! aa
Derivação Exemplo
S ) aPAbQb
) aaPAAbQb
) aaAAbQb
) aaAAbEb
) aaAbAEb
) aabAAEb
) aabAab
) aabaab
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 399 / 468
Linguagens Irrestritas
Gramática Irrestrita
Teoremas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 400 / 468
Linguagens Irrestritas – Gramática Irrestrita
Teorema #3: Se G é GI, então L(G) é rec. enumerável
Mostrar que existe uma MT M que reconhece L(G)
Se p é derivável por L(G), então p é reconhecida por M
Ou seja, M deve simular as derivações de G
M é uma MT não-determinística com 3 fitas
Fita #1: palavra de entrada p
Fita #2: regras de G
u ! v na fita fica ##u#v##
##: separador de regras e #: !
Fita #3: usada para registrar todas as formas sentenciais de
uma derivação
Ex.: S#aAbc#aabCbc#aabbCc#aabbcc
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 401 / 468
Linguagens Irrestritas – Gramática Irrestrita
Teorema #3: Se G é GI, então L(G) é rec. enumerável
Funcionamento de M:
S# é gravado na posição 1 da Fita #3
Regras de G são escritas na Fita #2
loop
Escolher uma regra u#v na Fita #2
Seja q# a palavra mais recente gravada na Fita #3
Escolher uma instância de u em q (se existir). Senão, parar em
estado de rejeição
Sendo q = xuy#, gravar xvy# na Fita #3, logo após q#
Se xvy == p, parar em estado de aceitação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 402 / 468
Linguagens Irrestritas – Gramática Irrestrita
Teorema #4: Se L é uma LRE, então tem uma GI G tal que L(G) = L
Dada uma MT M que reconhece L, prova consiste em
demonstrar como criar uma GI G, com L(G) = L
Prova completa pode ser encontrada no Teorema 10.1.3
em Sudkamp [6]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 403 / 468
Linguagens Irrestritas
Máquinas de Turing
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 404 / 468
Linguagens Irrestritas – Máquinas de Turing
Máquinas de Turing
Modelo abstrato para os computadores modernos
Propostas por Alan Turing em 1936
Considerado um dos pais da Ciência da Computação
Prêmio Turing: “Prêmio Nobel” da área de Computação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 405 / 468
Linguagens Irrestritas – Máquinas de Turing
Máquina de Turing (MT)
Uma MT Padrão é uma quíntupla (Q, ⌃, , , q0):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da fita
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
qo 2 Q = estado inicial
Memória ilimitada
Seja w uma palavra de entrada
Configuração inicial da fita: BwBBBBBBBB...
A fita é infinita à direita
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 406 / 468
Linguagens Irrestritas – Máquinas de Turing
Máquinas de Turing
Máquina de estados com uma fita e uma cabeça de
leitura/gravação
Cada posição da fita possui um símbolo de
Fita começa na posição zero
Fita possui infinitas posições para a direita
B (branco): simbolo especial de
Entrada é gravada na fita, começando na posição 1
Posição 0 é sempre um B
Posições depois da palavra de entrada são todas B
Cabeça começa posicionada na posição 0
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 407 / 468
Linguagens Irrestritas – Máquinas de Turing
Máquinas de Turing
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 408 / 468
Linguagens Irrestritas – Máquinas de Turing
Função de Transição ( )
MT padrão é determinística
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
Computação
Computação para quando encontra um estado/símbolo
para o qual não exista transição definida
Se a cabeça for deslocada para esquerda da posição 0,
então a computação termina anormalmente (“quebra”)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 409 / 468
Linguagens Irrestritas – Máquinas de Turing
Exemplo: (qi, x) = [qj, y, E ou D]
Se (estado atual == qi) e (símbolo atual da fita == x) então
Novo estado = qj
Grave y na fita
Mova cabeça de leitura/gravação para esquerda (E) ou
direita (D)
qi qj qi qj
x/y E x/y D
Símbolo atual da fita: símbolo embaixo da cabeça de
leitura/gravação
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 410 / 468
Linguagens Irrestritas – Máquinas de Turing
Exercício de Fixação #1
MT para ler uma entrada formada por uma palavra sobre
{a, b} e trocar a por b e vice-versa. Ao final do
processamento, rebobinar a cabeça de leitura/gravação
para a posição zero da fita
Exercício de Fixação #2
MT para realizar a seguinte transformação na fita de
entrada:
BuB... ) BuBuB..., onde u = (a [ b)⇤
Exercício de Fixação #3
MT para somar 1 em um número binário gravado
inicialmente na fita de entrada
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 411 / 468
Linguagens Irrestritas – Máquinas de Turing
Exercício de Fixação #4
MT para realizar as seguintes transformações na fita de
entrada:
Ban
Bam
B... ) Ban
Bam
Ban+m
B..., n, m 0
Ban
Bam
B... ) Ban
Bam
Ban m
B..., n m
Ban
B... ) Ban
Ba2n
B..., n 0
Ban
Bam
B... ) Ban
Bam
Ban⇤m
B..., n, m 0
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 412 / 468
Linguagens Irrestritas – Máquinas de Turing
MT para Aceitação de Linguagens
Um MT é uma séxtupla (Q, ⌃, , , q0, F):
Q = conjunto finito de estados
⌃ = alfabeto de entrada
= alfabeto da fita
: Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados
qo 2 Q = estado inicial
F ✓ Q = conjunto de estados finais (aceitação)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 413 / 468
Linguagens Irrestritas – Máquinas de Turing
MT para Aceitação de Linguagens
MTs que aceitam ou rejeitam uma palavra de entrada
Seja M = (Q, ⌃, , , q0, F) uma MT, onde F ✓ Q é o conjunto
de estados finais
Uma palavra u 2 ⌃⇤ é aceita por estado final se a
computação de M com entrada u para em um estado final
Isto é, MT não precisa ler toda a palavra para aceitá-la
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 414 / 468
Linguagens Irrestritas – Máquinas de Turing
MT para Aceitação de Linguagens
Linguagem L(M): conjunto das palavras aceitas por M
Exemplos:
L1 = (a [ b)⇤
aa(a [ b)⇤
L2 = {ai
bi
ci
| i 0}
L3 = {wcv | w e v tem o mesmo número de a e b}
L4 = {ww | w 2 {a, b}+
}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 415 / 468
Linguagens Irrestritas – Máquinas de Turing
MT para Aceitação de Linguagens
Uma MT pode:
Parar e aceitar uma palavra de entrada
Parar e rejeitar uma palavra de entrada
Entrar em loop (isto é, não parar)
MT reconhece uma linguagem L, logo L é recursivamente
enumerável (LI)
Uma MT reconhece uma linguagem L se ela para para todas
as palavras de L, mas pode não parar para as palavras que
não estão em L
MT decide uma linguagem L, logo L é recursiva (LSC)
Uma MT decide uma linguagem L se ela para para todas as
possíveis palavras de entrada (⌃⇤
)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 416 / 468
Linguagens Irrestritas – Máquinas de Turing
Reflexão
As linguagens L1...4 (anteriormente citadas) são:
a. recursivamente enumeráveis?
b. recursivas?
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 417 / 468
Linguagens Irrestritas
Máquinas de Turing
Variantes
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 418 / 468
Linguagens Irrestritas – Máquinas de Turing
MT com Fita Bidirecional
Fita se estende infinitamente para esquerda e para direita
Entrada pode ser inserida em qualquer ponto da fita
Cabeça de leitura/gravação é posicionada no branco
imediatamente à esquerda da palavra de entrada
Uma linguagem L é aceita por uma MT com fita bidirecional
sse é aceita por uma MT padrão (por quê?)
Exercício de Fixação
MT para somar 1 em um número binário
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 419 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT com fita
bidirecional, então é aceita por uma MT padrão
Uma fita infinita à direita tem o mesmo tamanho de uma fita
infinita à direita e à esquerda
basicamente: 1 = 1 + 1
Para não utilizar a fita “da esquerda”, basta realizar o shift
de toda a fita “da direita” antes de realizar uma transição
que utilizaria a fita “da esquerda”
(volta) Se uma linguagem L é aceita por uma MT padrão, então
é aceita por uma MT com fita bidirecional
Basta não utilizar a fita “da esquerda”
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 420 / 468
Linguagens Irrestritas – Máquinas de Turing
MT com Movimento Estático
Modificação da função de transição de estados:
: Q ⇥ ! Q ⇥ ⇥ {E, D, S}
Agora após uma leitura/gravação, é possível não mover a
cabeça de leitura/gravação (S)
Seu uso só faz sentido quando se tem mais fitas (por quê?)
Uma linguagem L é aceita por uma MT com movimento
estático sse é aceita por uma MT padrão (por quê?)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 421 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT com movimento
estático, então é aceita por uma MT padrão
Basta substituir todas transições que possuem movimento
estático como a seguir:
qi qj qi qk qj
a/a S a/a D x/x E, 8x 2
(volta) Se uma linguagem L é aceita por uma MT padrão, então
é aceita por uma MT com movimento estático
Basta não utilizar o movimento estático
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 422 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Multitrilhas
Fita é dividida em múltiplas trilhas, mantendo uma única
cabeça de leitura/gravação
Máquina com duas trilhas:
(qi, [x, y]) = [qj, [z, w], m], onde m 2 {E, D}
x = símbolo a ser lido da Fita 1
y = símbolo a ser lido da Fita 2
z = símbolo a ser gravado na Fita 1
w = símbolo a ser gravado na Fita 2
Uma linguagem L é aceita por uma MT com duas trilhas sse
é aceita por uma MT padrão (por quê?)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 423 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT multitrilha, então
é aceita por uma MT padrão
Assuma uma MT com duas trilhas
Trilha 1: x0 x1 x2 x3 x4 x5 . . .
Trilha 2: y0 y1 y2 y3 y4 y5 . . .
1 Intercale as trilhas em uma única fita como a seguir:
Fita: x0 y0 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 . . .
2 Adapte as transições [x/y w/z M] como a seguir:
[x/y w/z M] =) [x/y D] e [w/z D]
Quando M = E, deve-se recuar o número de trilhas ⇥ 2
No nosso exemplo (2 trilhas), fazem-se 4 transições [ / E]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 424 / 468
Linguagens Irrestritas – Máquinas de Turing
(volta) Se uma linguagem L é aceita por uma MT padrão, então
é aceita por uma MT multitrilha
Basta utilizar somente uma trilha
i.e., as demais terão sempre transições B/B
Dessa forma, uma transição [x/y D] em uma MT padrão
ficaria da seguinte forma em uma MT com n trilhas:
[x/y B2/B2 B3/B3 . . . Bn/Bn D]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 425 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Multifitas
Máquina com k fitas e k cabeças de leitura/gravação
Máquina lê as k fitas simultaneamente (de forma síncrona)
Transição consulta:
Estado atual (único)
Símbolos lidos por cada uma das cabeças
Uma transição pode:
Mudar o estado
Escrever um símbolo em cada uma das fitas
Reposicionar de forma independente cada uma das
cabeças de leitura/gravação
Uma linguagem L é aceita por uma MT Multifitas sse é
aceita por uma MT padrão (por quê?)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 426 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Multifitas
Entrada é escrita na Fita 1
Todas as outras fitas estão em branco (BBBBB...)
Todas as fitas começam com a cabeça de
leitura/gravação na posição 0
Exercício de Fixação
MT para reconhecer as seguintes linguagens:
L1 = {ai
bi
| i > 0}
L2 = {wdw | w 2 {a, b, c}⇤
}
L3 = {wcwr
| w 2 {a, b}⇤
}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 427 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT multifita, então é
aceita por uma MT padrão
Assuma uma MT com duas fitas
#1: B a b c B . . .
#2: B x y z B . . .
Assuma também as seguintes configurações:
#1: B qi a b c B . . . (i.e., cabeça de leitura/gravação aponta para a)
#2: B x y qi z B . . . (i.e., cabeça de leitura/gravação aponta para z)
1 Concatene as fitas separadas por #
Fita: B a b c B # B x y z B . . .
2 Estenda o alfabeto da fita como a seguir:
8x 2 ! x 2 0
^ ˆx 2 0
(são adicionados ˆB, ˆa, ˆb, ˆc, ˆx, ˆy e ˆz)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 428 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT multifita, então é
aceita por uma MT padrão
3 Dessa forma, os símbolos “acentuados” correspondem aos
símbolos que estão com a cabeça de leitura/gravação:
Fita: B ˆa b c B # B x y ˆz B . . .
4 A cabeça de leitura/gravação sempre se inicia na Fita #1:
Fita: B qi0 ˆa b c B # B x y ˆz B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 429 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT multifita, então é
aceita por uma MT padrão
5 A computação para uma transição [a/x D z/c E] será
realizada como a seguir:
Substitua ˆa por x na “Fita #1”
“Acentue” o próximo símbolo da “Fita #1” (b ! ˆb)
Passe para a “Fita #2” (após o símbolo #)
Procure por ˆz (caso não ache, pare)
Substitua ˆz por c
“Acentue” o símbolo anterior da “Fita #2” (y ! ˆy)
Retorne à “Fita #1” parando no símbolo “acentuado” e
compute a próxima transição
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 430 / 468
Linguagens Irrestritas – Máquinas de Turing
(volta) Se uma linguagem L é aceita por uma MT padrão, então
é aceita por uma MT multifita
Basta utilizar somente uma fita
i.e., as demais terão sempre transições B/B S
Dessa forma, uma transição [x/y D] em uma MT padrão
ficaria da seguinte forma em uma MT com n fitas:
[x/y D B2/B2 S B3/B3 S . . . Bn/Bn S]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 431 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Não-Determinísticas
Modificação da função de transição de estados:
: Q ⇥ ! P(Q ⇥ ⇥ {E, D})
P(X): conjunto potência de X (todos subconjuntos de X)
Exemplo de transição:
(q1, c) = {[q1, c, D], [q2, c, D], [q3, C, E]}
ND não aumenta o poder de expressão de MTs
Uma linguagem L é aceita por uma MT Não-Determinística
sse é aceita por uma MT padrão (por quê?)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 432 / 468
Linguagens Irrestritas – Máquinas de Turing
Exercício de Fixação
MT para reconhecer as seguintes linguagens:
Palavras contendo um c precedido ou sucedido por ab
L = {ww | w 2 {a, b}⇤
}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 433 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
Prova é feita assumindo uma MT multifita
uma vez já provamos ter o mesmo poder computacional
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 434 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
Assuma 3 fitas:
#1: B a b b B . . . (palavra de entrada)
#2: q0B a b b B # . . . (configurações iniciando com a 1a
)
#3: B B B B B . . . (configuração em execução)
Loop
1 Mova a 1a configuração da Fita #2 para Fita #3
2 Execute a MTND sobre a configuração presente na Fita #3
Caso não haja transições, verifique se é igual a palavra de entrada. Se
for, pare e aceite. Se não for, pule para o passo (3)
Caso haja uma transição possível, execute e concatene a
configuração resultante + “#” na Fita #2
Caso hajam várias transições possíveis (ND), concatene todas as
configurações resultantes + “#” na Fita #2
3 Apague Fita #3
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 435 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
Exemplificando:
Assuma Lexemplo = {w 2 {a, b}⇤
| w termina com b}
Assuma a seguinte MTND M em que L(M) = Lexemplo
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
Simule a execução da MTND em uma MT padrão com a
palavra abb
Antes, construa a árvore de computações possíveis para o
melhor entendimento
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 436 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: q0B a b b B # . . . (configurações iniciando com a 1a
)
#3: B B B B B . . . (configuração em execução)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B B B B B . . . (mover 1a
)
#3: q0B a b b B . . . (executar)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B q1a b b B # . . . (transição resultante)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B B B B B . . . (mover 1a
)
#3: B q1a b b B . . . (executar)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a q1b b B # . . . (transição resultante)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B B B B B . . . (mover 1a
)
#3: B a q1b b B # . . . (executar, ND)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b q1b B # B a b q2b B # . . . (transições resultantes)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b q2b B # . . . (mover 1a
)
#3: B a b q1b B # (executar, ND)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b q2b B # B a b b q1B # B a b b q2B # . . . (transições res.)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b b q1B # B a b b q2B # . . . (mover 1a
)
#3: B a b q2b B # (executar, para e rejeita)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b b q1B # B a b b q2B # . . . (antigas transições resultantes)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b b q2B # . . . (mover 1a
)
#3: B a b b q1B # (executar, para e rejeita)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b b q2B # . . . (antiga transição resultante)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B B B B B . . . (mover 1a
)
#3: B a b b q2B # . . . (executar)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B a b b B q3 . . . (transição resultante)
#3: B B B B B . . .
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(ida) Se uma linguagem L é aceita por uma MT
Não-Determinística, então é aceita por uma MT padrão
q0 q1 q2 q3
B/B D
a/a D
b/b D
b/b D B/B D
#1: B a b b B . . . (palavra de entrada)
#2: B B B B B . . . (mover 1a
)
#3: B a b b B q3 . . . (executar, para e aceita)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
Linguagens Irrestritas – Máquinas de Turing
(volta) Se uma linguagem L é aceita por uma MT padrão, então
é aceita por uma MT Não-Determinística
Basta não utilizar transições não-determinísticas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 438 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Enumeradoras de Linguagens
MT vistas até o momento são aceitadoras de linguagens:
Entrada: palavra de acordo com um alfabeto
Saída: palavra válida (parada em estado final) ou inválida
MT Enumeradoras de Linguagens
Máquina com k-fitas (multi-fita)
Não possui entrada
Saída: grava (ou enumera) todas as palavras de uma
linguagem em uma de suas fitas (chamada fita de saída)
Se linguagem for infinita, MT enumeradora não para
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 439 / 468
Linguagens Irrestritas – Máquinas de Turing
MT Enumeradoras de Linguagens
Uma MT com k-fitas E = (Q, ⌃, , , q0) enumera uma
linguagem L se:
Sua computação começa com todas fitas vazias
Fita 1 é chamada de fita de saída
A cada transição, cabeça da Fita 1 permanece parada (S)
ou se move para a direita (D)
Parte “não-branca” da Fita 1 tem uma das formas:
B#u1#u2#...#uk # ou
B#u1#u2#...#uk #v onde ui 2 L e v 2 ⌃⇤
ui é escrito na Fita 1 (entre #0s) sse ui 2 L
Definição não requer que a máquina pare (mesmo que a
linguagem seja finita)
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 440 / 468
Linguagens Irrestritas – Máquinas de Turing
Exemplo
MT para enumerar a linguagem L = {aibi | i > 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 441 / 468
Linguagens Irrestritas – Máquinas de Turing
Exemplo
MT para enumerar a linguagem L = {aibi | i > 0}
q0 q2 q3
q4
[B/B D, B/B D] [B/# D, B/X S]
[B/B S, B/B D]
[B/a D, X/X E]
[B/# D, B/X S]
[B/b D, X/X D]
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 441 / 468
Linguagens Irrestritas – Máquinas de Turing
Exemplo
Descrição do funcionamento da MT anterior:
Escreve ## na F1 (já que 2 L)
Escreve “X” na posição 1 da F2
Loop:
q3: volta na F2: para cada X, escreve a na F1
q4: avança na F2: para cada X, escreve b na F1
q4 para q3: escreve X no final da F2 e escreve # na F1
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 442 / 468
Linguagens Irrestritas – Máquinas de Turing
Exercício de Fixação
MT para enumerar a linguagem L = {aibici | i 0}
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 443 / 468
Linguagens Irrestritas
Teoremas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 444 / 468
Linguagens Irrestritas – Teoremas
Linguagem Recursiva
MT decide uma linguagem L, logo L é recursiva (LSC)
Uma MT decide uma linguagem L se ela para para todas as
possíveis palavras de entrada (⌃⇤
)
Teorema #5: L é recursiva se, e somente se, L pode ser
enumerada em ordem lexicográfica
Deve-se provar que:
(ida) se L é recursiva, então L pode ser enumerada em
ordem lexicográfica
(volta) Se L pode ser enumerada em ordem lexicográfica,
então L é recursiva
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 445 / 468
Linguagens Irrestritas – Teoremas
Teorema #5
(ida) se L é recursiva, então L pode ser enumerada em
ordem lexicográfica
Seja M a MT que decide L
Seja E⇤
uma MT que enumera ⌃⇤
em ordem lexicográfica
Prova consiste em mostrar que pode-se construir uma MT E
que enumera L em ordem lex. como a seguir:
loop:
Rode E⇤
e produza uma palavra u (em ordem lex.)
Rode M com u
Se M aceita u, escreva u na fita de saída de E
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 446 / 468
Linguagens Irrestritas – Teoremas
Teorema #5 (explicação gráfica)
(ida) se L é recursiva, então L pode ser enumerada em
ordem lexicográfica
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 447 / 468
Linguagens Irrestritas – Teoremas
Teorema #5 (explicação gráfica)
(ida) se L é recursiva, então L pode ser enumerada em
ordem lexicográfica
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 447 / 468
Linguagens Irrestritas – Teoremas
Teorema #5
(volta) Se L pode ser enumerada em ordem lexicográfica,
então L é recursiva
Se L for finita, então L é imediatamente recursiva
Se L for infinita e puder ser enumerada em ordem lex.:
Seja E a MT que enumera L em ordem lex.
Prova consiste em mostrar que pode-se construir uma
máquina M que decide L como a seguir:
Rode E, sendo que toda vez que E escrever uma palavra w na
fita de saída, M deve verificar se:
lo(w) == lo(u): M para e aceita u
lo(w) < lo(u): execução de E prossegue
lo(w) > lo(u): M para e rejeita u
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 448 / 468
Linguagens Irrestritas – Teoremas
Teorema #5 (explicação gráfica)
(volta) Se L pode ser enumerada em ordem lexicográfica,
então L é recursiva
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 449 / 468
Linguagens Irrestritas – Teoremas
Teorema #5 (explicação gráfica)
(volta) Se L pode ser enumerada em ordem lexicográfica,
então L é recursiva
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 449 / 468
Linguagens Irrestritas – Teoremas
Linguagem Recursivamente Enumerável
MT reconhece uma linguagem L, logo L é recursivamente
enumerável (LI)
Uma MT reconhece uma linguagem L se ela para para todas
as palavras de L, mas pode não parar para as palavras que
não estão em L
Teorema #6: Uma linguagem é rec. enumerável se, e somente
se, ela puder ser enumerada por uma MT
Deve-se provar que:
(ida) se L é RE, então L é enumerada por uma MT
(volta) se L é enumerada por uma MT, então L é RE
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 450 / 468
Linguagens Irrestritas – Teoremas
Teorema #6
(volta) se L é enumerada por uma MT, então L é RE
Seja E a MT que enumera L
Prova consiste em mostrar que pode-se construir uma
máquina M que reconhece L
M recebe como entrada uma palavra u 2 ⌃⇤
Sempre que E escrever uma palavra w na fita de saída, M
verifica se w == u. Se for, M para em um estado final
Veja que M não vai parar se u 62 L
Porém, definição de RE não exige parada em caso de
palavras não pertencentes à linguagem
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 451 / 468
Linguagens Irrestritas – Teoremas
Teorema #6 (explicação gráfica)
(volta) se L é enumerada por uma MT, então L é RE
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 452 / 468
Linguagens Irrestritas – Teoremas
Teorema #6 (explicação gráfica)
(volta) se L é enumerada por uma MT, então L é RE
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 452 / 468
Linguagens Irrestritas – Teoremas
Teorema #6
(ida) se L é RE, então L é enumerada por uma MT
Primeira tentativa (“gerar-e-testar via força bruta”):
Seja M a MT que reconhece palavras de L
Prova consiste em mostrar que pode-se construir uma MT E
que enumera L
Para cada palavra u 2 ⌃⇤
(i.e., gerar todas palavras de ⌃)
Se M aceitar u, escrever u na fita de saída de E
Essa tentativa não funciona, pois:
Requer que todas palavras de u sejam geradas (ok)
Porém, ao se gerar uma palavra inválida, M pode não parar
ao analisar u
Com isso, próximas palavras de u não serão geradas e
testadas
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 453 / 468
Linguagens Irrestritas – Teoremas
Teorema #6 (explicação gráfica do porquê força bruta falha)
(ida) se L é RE, então L é enumerada por uma MT
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 454 / 468
Linguagens Irrestritas – Teoremas
Ordem Lexicográfica
Ordem lexicográfica de ⌃: função que mapeia palavras de
⌃ para números naturais
Seja ⌃ = {a1, ..., an} um alfabeto. A ordem lexicográfica lo
de ⌃ é definida recursivamente como:
Base: lo( ) = 0, lo(ai) = i
Passo recursivo: lo(aiu) = lo(u) + i ⇤ ntam(u)
Exemplo: ⌃ = {a, b, c} e a1 = a, a2 = b, a3 = c
lo( )= 0, lo(a)= 1, lo(b)= 2, lo(c)= 3,
lo(aa)= 4, lo(ba)= 7, lo(ca)= 10, lo(aaa)=13, lo(aba)=16,
lo(ab)= 5, lo(bb)= 8, lo(cb)= 11, lo(aab)=14, lo(abb)=17,
lo(ac)= 6, lo(bc)= 9, lo(cc)= 12, lo(aac)=15, lo(abc)=18,
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 455 / 468
Linguagens Irrestritas – Teoremas
Preparando a Prova
Suponha as palavras de ⌃ em ordem lexicográfica
, u1, u2, u3, ...
Seja a seguinte tabela:
Os pares dessa tabela podem ser enumerados “pelas
diagonais”:
[ , 0], [ , 1], [u1, 0], [ , 2], [u1, 1], [u2, 0], [ , 3], [u1, 2], ...
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 456 / 468
Linguagens Irrestritas – Teoremas
Voltando à Prova
Significado de par [i,j]: rode M com entrada ui por j passos
Finalmente, a prova que ficou pendente
"Ida": se L é RE, então L é enumerada por uma MT
Seja M a MT que reconhece L
Prova consiste em mostrar que pode-se construir uma MT E
que enumera L
Para cada par ordenado [i, j]
Rode M com entrada ui por j passos (ou até M parar)
Se M aceitar ui , escrever ui na fita de saída de E
Cada palavra ui 2 ⌃⇤ vai ser testada com 0, 1, 2, 3, ... passos
Se ui for válida, M vai parar para algum número k de passos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 457 / 468
Linguagens Irrestritas – Teoremas
Teorema #6 (explicação gráfica)
(ida) se L é RE, então L é enumerada por uma MT
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 458 / 468
7. Considerações Finais – Conteúdo
1 Revisão 3
2 Introdução 59
Autômatos Finitos Determinísticos
Autômatos Finitos Não-Determinísticos
Autômatos Finitos Não-Determinísticos com Transições-
3 Linguagens Regulares 74
Máquina de Moore
Máquinas de Mealy
Algoritmos de Transformação
Transformação AFND- para AFD
Minimização de AFD
Transformação de ER para AFND-
Recursividade
Árvore de Derivação
Ambiguidade
Backus-Nahur Form (BNF)
4 Linguagens Livres de Contexto 172
Remoção de recursividade no símbolo inicial
Eliminação de regras
Eliminação de regras de cadeia
Remoção de símbolos inúteis
Variantes
Critérios de Aceitação
Autômato com Pilha como Reconhecedor
Autômato com Pilha Descendente
Algoritmo de Cocke-Younger-Kasami (CYK)
Algoritmo de Early
Transformação de GLCs para APs
Transformação de APs para GLCs
5 Linguagens Sensíveis ao Contexto 373
Teoremas
6 Linguagens Irrestritas 393
Variantes
Hierarquia de Chomsky 460
Tese de Church-Turing 462
7 Considerações Finais 459
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 459 / 468
Considerações Finais
Hierarquia de Chomsky
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 460 / 468
Considerações Finais – Hierarquia de Chomsky
Hierarquia de Chomsky
Tipo Linguagem Gramática Máquina de aceitação
0 Rec. enumerável Irrestrita Máquina de Turing
1 Recursiva Sensível ao contexto Autômato linearmente limitado
2 Livre de contexto Livre de contexto Autômato com pilha
3 Regular Regular Autômato finito
Toda categoria é um subconjunto próprio da categoria superior
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 461 / 468
Considerações Finais
Tese de Church-Turing
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 462 / 468
Considerações Finais – Tese de Church-Turing
“Toda ‘função naturalmente computável’ pode ser computada
por uma Máquina de Turing.”
A tese não pode ser formalmente provada
O que é uma função naturalmente computável?
No entanto, pode ser refutada
Basta a descoberta de uma máquina mais poderosa que
uma Máquina de Turing
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 463 / 468
Considerações Finais – Tese de Church-Turing
Linguagens de Programação
Se uma LP é capaz de manipular uma MT de uma única fita,
essa LP é capaz de expressar qualquer algoritmo
Normalmente, LPs provêem abstrações mais elaboradas
O poder de computação, contudo, é o mesmo de uma MT
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 464 / 468
Agradecimentos
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 465 / 468
Agradecimentos
Kleber Marchetti Antunes
Gostaria de agradecer ao aluno pela tarefa de conversão
inicial da apostila em formato ppt para LaTeX
Alberto Hokari
Gostaria de agradecer ao aluno pelos desenhos das máquinas
em formato TikZ e ao desenvolvimento do material de CYK
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 466 / 468
Referências I
P. F. Blauth Menezes.
Linguagens formais e autômatos, volume 3.
Bookman, 6 edition, 2011.
S. L. G. de Oliveira.
Algoritmos e seus fundamentos.
Editora UFLA, 2011.
J. E. Hopcroft and J. D. Ullman.
Formal languages and their relation to automata.
Addison-Wesley, 1969.
J. E. Hopcroft and J. D. Ullman.
Introduction to Automata Theory, Languages, and Computation.
Addison-Wesley, 1979.
M. Sipser.
Introdução à Teoria da Computação.
Thompson, 2007.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 467 / 468
Referências II
T. A. Sudkamp.
Languages and machines: an introduction to the theory of Computer
Science.
Addison-Wesley, 2 edition, 2005.
M. T. Valente.
Notas de aula da disciplina Fundamentos Teóricos da Computação.
Programa de Pós-graduação em Informática, PUC Minas, 2007.
N. J. Vieira.
Introdução aos Fundamentos da Computação: Linguagens e máquinas.
Thomson, 2006.
N. J. Vieira.
Notas de aula da disciplina fundamentos da teoria da computação.
Bacharelado em Ciência da Computação, UFMG, 2009.
Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 468 / 468

Apostila Linguagens Formais e Autômatos (LFA)

  • 1.
    Linguagens Formais eAutômatos Ricardo Terra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 1 / 468 CV Nome: Ricardo Terra Email: terra [at] dcc.ufla.br www: dcc.ufla.br/⇠terra Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868 Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Université Lille 1) Background Acadêmico : UFLA (desde 2014), UFSJ (1 ano ), FUMEC (3 anos ), UNIPAC (1 ano ), FAMINAS (3 anos ) Profissional : DBA Eng. (1 ano ), Synos (2 anos ), Stefanini (1 ano ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 2 / 468 1. Revisão – Conteúdo Conjuntos, relações e funções 4 1 Revisão 3 Definições Recursivas 8 Indução Matemática 13 Linguagens Formais e Autômatos (LFA) 17 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 3 / 468 Revisão Conjuntos, relações e funções Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 4 / 468
  • 2.
    Revisão – Conjuntos,relações e funções (1–34) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 5 / 468 Revisão – Conjuntos, relações e funções (1–9) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 6 / 468 Revisão – Conjuntos, relações e funções (1–7) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 7 / 468 Revisão Definições Recursivas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 8 / 468
  • 3.
    Revisão – DefiniçõesRecursivas Definições Recursivas Conjuntos enumeráveis podem ser definidos por meio de uma definição recursiva Uma definição recursiva especifica como um conjunto pode ser gerado a partir de um subconjunto do mesmo aplicando-se operações um número finito de vezes Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 9 / 468 Revisão – Definições Recursivas Definições Recursivas Uma definição recursiva de um conjunto A consta de três partes: (i) base: especificação de um conjunto base B ⇢ A (ii) passo recursivo: especificação de um elenco de operações que, se aplicadas a elementos de B, geram elementos de A (iii) fechamento: afirmação que os únicos elementos de A são aqueles que podem ser obtidos a partir dos elementos de B aplicando-se um número finito de vezes as operações especificadas em (ii) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 10 / 468 Revisão – Definições Recursivas Exemplo #1: Conjunto N O conjunto N pode ser definido a partir de {0} usando-se a operação s (sucessor) (i) base: {0} ⇢ N (ii) passo recursivo: se n 2 N, então s(n) 2 N (iii) fechamento: só pertence a N, o número que pode ser obtido de acordo com (i) e (ii) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 11 / 468 Revisão – Definições Recursivas Exemplo #2: Função Fatorial fat : N ! N (i) base: fat(0) = 1 (ii) passo recursivo: fat(n) = n x fat(n 1), para n 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 12 / 468
  • 4.
    Revisão – DefiniçõesRecursivas Exemplo #2: Função Fatorial fat : N ! N (i) base: fat(0) = 1 (ii) passo recursivo: fat(n) = n x fat(n 1), para n 1 Mais formalmente (i) base: {(0, 1)} ⇢ fat (ii) passo recursivo: se n 1 e (n 1, k) 2 fat, então (n, n x k) 2 fat (iii) fechamento: só pertence a fat, o par que pode ser obtido conforme (i) e (ii) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 12 / 468 Revisão Indução Matemática Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 13 / 468 Revisão – Indução Matemática Indução Matemática Técnica usada para provar que uma propriedade é válida para todos elementos de um conjunto definido recursivamente (Veja Sudkamp [6], Seção 1.7) Considere X um conjunto tendo como base X0 Seja X0, X1, . . . , Xn a sequência de conjuntos gerados por um processo recursivo e P uma propriedade Prova consiste em: Base: Mostrar que P é válido 8x 2 X0 Hipótese: P é válido 8x 2 X0, X1, ..., Xk Passo indutivo: Mostrar que P também é válido 8x 2 Xk+1 Assim, P é válido 8x 2 X Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 14 / 468 Revisão – Indução Matemática Exemplo #1: Provar que Pn i=1 i = n(n+1) 2 Base: P(1) é verdadeiro, i.e., P1 i=1 i = 1(1+1) 2 = 1 Hipótese: P é verdadeira para 0, 1, 2, 3, . . . , k, ou seja, kX i=1 i = k(k + 1) 2 Passo indutivo: Provar que PK+1 i=1 i = (K+1)((K+1)+1) 2 = (K+1)(K+2) 2 PK+1 i=1 i = PK i=1 i + (k + 1) (definição somatório) = k(k+1) 2 + (k + 1) (uso da hipótese de indução) = k(k+1) + 2(k+1) 2 (matemática básica) = (k+1)(k+2) 2 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 15 / 468
  • 5.
    Revisão – InduçãoMatemática Exemplo #2: Provar que n! > 2n, 8n > 4 Base: P(5) é verdadeiro, i.e., (5! = 120) > (32 = 25) Hipótese: P é verdadeira para 5, 6, 7, . . . , k, ou seja, k! > 2k , 8k > 4 Passo indutivo: Provar que (k + 1)! > 2(k+1) (k + 1)! = k! ⇥ (k + 1) (definição fatorial) > 2k ⇥ (k + 1) (uso da hipótese de indução) > 2k ⇥ 2 (pela certeza que k > 4) = 2k+1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 16 / 468 Revisão Linguagens Formais e Autômatos (LFA) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 17 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 18 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Definições Básicas Linguagem: conjunto de palavras sobre um alfabeto Alfabeto (⌃): conjunto de símbolos de uma linguagem Palavra: sequência finita de símbolos de um alfabeto ⌃ |w| = no de símbolos da palavra w = palavra vazia, constituída de zero símbolos Fecho de Kleene (*) {a}⇤ = { , a, aa, aaa, aaaa, ...} ⌃⇤ = conjunto de todas as palavras do alfabeto Fecho Positivo de Kleene (+) {a}+ = {a}{a}⇤ = {a, aa, aaa, aaaa, ...} ⌃+ = ⌃⇤ { } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 19 / 468
  • 6.
    Revisão – LinguagensFormais e Autômatos (LFA) Linguagem Regular (LR) Uma linguagem regular é aquela que pode ser definida por um conjunto regular Um conjunto regular pode ser gerado a partir de ⌃ usando operador de Kleene, união e concatenação Definição recursiva: Base: , { } e {a}(8a 2 ⌃) são conjuntos regulares Passo recursivo: se X e Y são conjuntos regulares, então X [ Y, XY e X⇤ também são conjuntos regulares Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 20 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Linguagem Regular (LR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b Conjunto regular: {a}{a, b}⇤{b}{a, b}⇤{a} Linguagem Regular (LR) – Exercício de Fixação 1 L = palavras sobre {a, b} que começam com a e tenham número par de b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 21 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Expressão Regular (ER) Alguns autores (e.g., Sudkamp) usam abreviações para denotar conjunto regulares: { } ! {a}(8a 2 ⌃) ! a(8a 2 ⌃) {a, b} ! (a [ b) {ab} ! (ab) {u}⇤ ! u⇤ {xx⇤ } ! x+ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 22 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Expressão Regular (ER) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b Expressão regular: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468
  • 7.
    Revisão – LinguagensFormais e Autômatos (LFA) Expressão Regular (ER) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b Expressão regular: a(a [ b)⇤b(a [ b)⇤a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Expressão Regular (ER) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b Expressão regular: a(a [ b)⇤b(a [ b)⇤a Expressão Regular (LR) – Exercícios de Fixação 1 L = palavras sobre {a, b} que começam com b e tenham número ímpar de a 2 L = palavras sobre {a, b, c} que todo a seja precedido de um b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 23 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Regular (GR) Uma GR é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 V (i.e., µ é um elemento de V) ⌫ 2 | ⌃ | ⌃V (i.e., palavra formada por elementos de V e ⌃) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 24 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468
  • 8.
    Revisão – LinguagensFormais e Autômatos (LFA) Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): S ! aA A ! aA | bB B ! aB | bB | a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): S ! aA A ! aA | bB B ! aB | bB | a Gramática Regular (GR) – Exercícios de Fixação 1 L = palavras sobre {a, b, c} que todo b seja seguido de a 2 L = palavras sobre {a, b} com número par de a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 25 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Derivação Aplicação consecutiva de regras Definição de regra (!) 6= Aplicação de regra ()) v )⇤ w w é derivável a partir de v (aplicando 0 ou mais regras) v )+ w w é derivável a partir de v (aplicando 1 ou mais regras) v )n w w é derivável a partir de v (aplicando n regras) Portanto: Uma palavra w 2 (V [ ⌃)⇤ é uma forma sentencial se S )⇤ w Uma palavra w 2 ⌃⇤ é uma sentença se S )⇤ w L(G) = {w 2 ⌃⇤ | S )⇤ w} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 26 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468
  • 9.
    Revisão – LinguagensFormais e Autômatos (LFA) Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? S ) aA ) abB ) abaB ) ababB ) ababa É uma sentença válida uma vez que S )⇤ ababa Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? S ) aA ) abB ) abaB ) ababB ) ababa É uma sentença válida uma vez que S )⇤ ababa E abbabb 2 L(G)? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 27 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato Finito Máquina Reconhecedora de LR Podem ser determinísticos (AFD) Podem ser não-determinísticos (AFND) Podem ser não-determinísticos com transições- (AFND- ) Verifica se uma palavra satisfaz condições (i.e., se 2 ou 62 L) Entrada: palavra qualquer do alfabeto Saída: sim (palavra válida) ou não (palavra inválida) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 28 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato Finito Determinístico (AFD) Um AFD é uma quíntupla (Q, ⌃, D, q0, F): Q = conjunto finito de estados ⌃ = alfabeto D : Q x ⌃ ! Q = função (total) de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFD quando, partindo do estado inicial, forem lidos todos os símbolos de w e efetuadas as correspondentes transições de modo que, ao ler o último símbolo, o AFD para em um estado final A linguagem aceita por um AFD M (Q, ⌃, D, q0, F) é o conjunto L(M) = {w 2 ⌃⇤ | ˆ(q0, w) 2 F}, onde ˆ é a função de transição estendida para M Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 29 / 468
  • 10.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: q0 q1 q2 q3 a a b b a a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: q0 q1 q2 q3 a a b b a a b Sim, na verdade, é um AFD incompleto, por quê? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: q0 q1 q2 q3 a a b b a a b Sim, na verdade, é um AFD incompleto, por quê? Exercício de Fixação 1 L = palavras sobre {a, b} que contém aaa 2 L = palavras sobre {a, b} com número par de a e ímpar de b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 30 / 468
  • 11.
    Revisão – LinguagensFormais e Autômatos (LFA) Autômato Finito Não-Determinístico (AFND) Um AFND é uma quíntupla (Q, ⌃, ND, q0, F): Q = conjunto finito de estados ⌃ = alfabeto ND : Q x ⌃ ! P(Q) = função (total) de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFND se, e somente se, existe uma computação que a consome e para em um estado final Para todo AFND, existe um AFD equivalente i.e., não aumenta poder de expressão Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 31 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: q0 q1 q2 q3 a b a a,b a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: q0 q1 q2 q3 a b a a,b a Sim, na verdade, é um AFND incompleto, por quê? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468
  • 12.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: q0 q1 q2 q3 a b a a,b a Sim, na verdade, é um AFND incompleto, por quê? Exercício de Fixação 1 L = palavras sobre {a, b} que contém aa ou bb 2 L = (a [ b)⇤bb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 32 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato Finito Não-Determinístico com Transições- (AFND- ) Um AFND- é uma quíntupla (Q, ⌃, ND , q0, F): Q = conjunto finito de estados ⌃ = alfabeto ND : Q x (⌃ [ { }) ! P(Q) = f. de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Para todo AFND- , existe um AFND e um AFD equivalentes i.e., não aumenta poder de expressão Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 33 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} com tamanho par AFND- : Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 34 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo L = palavras sobre {a, b} com tamanho par AFND- : q0 q1 q3 a,b a,b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 34 / 468
  • 13.
    Revisão – LinguagensFormais e Autômatos (LFA) Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 35 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Livre de Contexto (GLC) Uma GLC é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 V (i.e., um não-terminal) ⌫ 2 (V [ ⌃)⇤ (i.e., palavra formada por elementos de V e ⌃) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 36 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L(G) = {aibi | i > 0} GLC(L): Toda LLC é aceita por um Autômato com Pilha (não-determinístico) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 37 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L(G) = {aibi | i > 0} GLC(L): S ! aSb | ab Toda LLC é aceita por um Autômato com Pilha (não-determinístico) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 37 / 468
  • 14.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo Clássico 2 L(G) = {w 2 {a, b}⇤ | w = wR} GLC(L): Toda LLC é aceita por um Autômato com Pilha (não-determinístico) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 38 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico 2 L(G) = {w 2 {a, b}⇤ | w = wR} GLC(L): S ! aSa | bSb | a | b | Toda LLC é aceita por um Autômato com Pilha (não-determinístico) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 38 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exercício de Fixação 1 L = {anbman|n > 0, m > 0} 2 L = {anbmcmd2n|n 0, m > 0} 3 L = palavras sobre {a, b} com número par de a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 39 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato com Pilha Máquina Aceitadora de LLC Podem ser determinísticos (APD) Aceita todas as LR e um sub-grupo de LLC Se forem não-determinísticos (APND) Aceita todas as LLC i.e., aumenta o poder de expressão Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 40 / 468
  • 15.
    Revisão – LinguagensFormais e Autômatos (LFA) Autômato com Pilha Determinístico (APD) Um APD é uma sextupla (Q, ⌃, , , q0, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da pilha : Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ )) = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Não permite transições (qi, a, b) e (qi, a0, b0) compatíveis: (a = a0 ou a = ou a0 = ) e (b = b0 ou b = ou b0 6= ) Uma palavra w 2 ⌃⇤ é dita ser aceita por um APD quando for totalmente consumida e que a máquina termine em um estado final com pilha vazia (aceitação por parada em estado final e pilha vazia) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 41 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L(G) = {aibi | i > 0} APD: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 42 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L(G) = {aibi | i > 0} APD: q0 q1 a /X b X/ b X/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 42 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato com Pilha Não-Determinístico (APND) Um APND é uma sextupla (Q, ⌃, , , q0, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da pilha : Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ )) = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Permite transições (qi, a, b) e (qi, a0, b0) compatíveis: (qi, a, b) = {[qj, B], [qk , C]} Uma palavra w 2 ⌃⇤ é dita ser aceita por um APND se, e somente se, existe uma computação que a consome e para em um estado final com pilha vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 43 / 468
  • 16.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo Clássico 2 L(G) = {w 2 {a, b}⇤ | w = wR} APND: Toda LLC é aceita por um APND Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 44 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico 2 L(G) = {w 2 {a, b}⇤ | w = wR} APND: q0 q1 a /A b /B a / b / / a A/ b B/ Toda LLC é aceita por um APND Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 44 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 45 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Sensível ao Contexto (GSC) Uma GSC é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) ⌫ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) |µ|  |⌫| (i.e., regras não-contráteis) nunca é uma palavra válida em uma LSC Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 46 / 468
  • 17.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo Clássico L = {aibici | i > 0} GSC(L): S ! aAbc | abc A ! aAbC | abC Cb ! bC Cc ! cc Toda LSC é recursiva, logo: existe uma ALL que aceita LSC existe uma MT que decide LSC, i.e., sempre para para qualquer entrada w 2 ⌃⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 47 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato Linearmente Limitado (ALL) Um ALL é uma óctupla (Q, ⌃, , , q0, <, >, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da fita : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) < e > = delimitadores da palavra de entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 48 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Autômato Linearmente Limitado (ALL) Seja w uma palavra de entrada Configuração inicial da fita: <w> Delimitadores podem ser lidos, mas não apagados Delimitadores não podem ser ultrapassados Tamanho da fita = |w| + 2 Basicamente, um ALL é uma MT cuja quantidade de fita disponível é limitada ao tamanho da palavra de entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 49 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L = {aibici | i > 0} q0 q1 q2 q3 q4 q5 q6 q7 </<D a/X D Y/Y D b/Y D Y/Y, D a/a, D c/Z D Z/Z, D b/b, D > / > E c/c D X/X D c/c, E Z/Z, E b/b, E Y/Y, E a/a, E >/>E Y/Y, D Z/Z, D Z/Z, E Y/Y, E X/X, E Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 50 / 468
  • 18.
    Revisão – LinguagensFormais e Autômatos (LFA) Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 51 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Gramática Irrestrita (GI) Todo o universo de linguagens é gerado por GI Uma GI é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) ⌫ 2 (V [ ⌃)⇤ (i.e., palavra formada por elementos de V e ⌃) “Quase” nenhuma restrição é imposta (|µ| > 0) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 52 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Exemplo Clássico L = {u[u] | u 2 {a, b}⇤} GI(L): S ! aT[a] | bT[b] | [] T[! aT[A | bT[B | [ Aa ! aA Ab ! bA Ba ! aB Bb ! bB A] ! a] B] ! b] Toda GI é recursivamente enumerável, logo: existe uma MT que reconhece LI, mas não necessariamente para para qualquer entrada w 2 ⌃⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 53 / 468 Revisão – Linguagens Formais e Autômatos (LFA) Máquina de Turing (MT) Um MT é uma séxtupla (Q, ⌃, , , q0, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da fita : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Memória ilimitada Seja w uma palavra de entrada Configuração inicial da fita: BwBBBBBBBB... A fita é infinita à direita Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 54 / 468
  • 19.
    Revisão – LinguagensFormais e Autômatos (LFA) Exemplo Clássico L = {u[u] | u 2 {a, b}⇤} q0 q1 q2 q3 q4q5 q6 q7q8 q9 q10 B/B D a /X D b/Y D [/[ D [/[ D a/a D b/b D a /X E X/X D Y/Y D [/[ E X/X E Y/Y E X/X D Y/Y D a/a E b/b E [/[ D a/a D b/b D b/Y E X/X D Y/Y D]/] D X/X D Y/Y D B/B E X/a E Y/b E [/[E ]/]E Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 55 / 468 Revisão Lemas, Teoremas, Corolários, etc. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 56 / 468 Revisão – Lemas, Teoremas, Corolários, etc. Definições Definem objetos e noções que são úteis em um determinado estudo Exemplo: Um AP é uma sextupla (Q, ⌃, , , q0, F)... Lema e Teorema Lema: É um pré-teorema, i.e., um resultado que leva a um teorema ou que é usado na prova de um teorema Teorema: É um resultado mais importante e interessante Existem exceções, e.g., Pumping Lemma é um teorema Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 57 / 468 Revisão – Lemas, Teoremas, Corolários, etc. Corolário Consequência imediata de um teorema Proposição Uma observação que pode ser facilmente comprovada não associada a um teorema em particular Axioma (ou postulado) Proposição que não precisa ser provada por ser evidente, consensual, etc. Exemplo: o sucessor de um natural é outro natural Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 58 / 468
  • 20.
    2. Introdução –Conteúdo 1 Revisão 3 Hierarquia de Chomsky 60 Conceitos Básicos 63 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 59 / 468 Introdução Hierarquia de Chomsky Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 60 / 468 Introdução – Hierarquia de Chomsky Hierarquia de Chomsky Noam Chomsky (1927-presente): poeta, filósofo, linguista, professor do MIT, e crítico do capitalismo e da política externa americana Noam Chomsky (1956) constitui uma classificação para linguagens, gramáticas e autômatos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 61 / 468 Introdução – Hierarquia de Chomsky Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Toda categoria é um subconjunto próprio da categoria superior Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 62 / 468
  • 21.
    Introdução Conceitos Básicos Ricardo Terra(rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 63 / 468 Introdução – Conceitos Básicos Definições Linguagem: conjunto de palavras sobre um alfabeto Alfabeto (⌃): conjunto de símbolos de uma linguagem Palavra (string): sequência de símbolos de um alfabeto Convenções: a, b, c, . . . representam elementos de um alfabeto p, q, u, v, w, x, y, z representam palavras Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 64 / 468 Introdução – Conceitos Básicos Definições ⌃⇤ é o conjunto de todas as palavras geradas por ⌃ ⇤ (estrela): operador de Kleene Definição Recursiva Revisão ⌃⇤ é definido recursivamente da seguinte forma: 1 base: 2 ⌃* ( é a palavra vazia) 2 passo recursivo: se w 2 ⌃* e a 2 ⌃ então wa 2 ⌃* 3 fechamento: w 2 ⌃* sse puder ser obtida a partir de com um número finito de aplicações de (2) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 65 / 468 Introdução – Conceitos Básicos Exemplo Se ⌃ = {a, b, c}, então ⌃⇤ inclui: Tamanho zero: Tamanho um: a b c Tamanho dois: aa ab ac ba bb bc ca cb cc etc. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 66 / 468
  • 22.
    Introdução – ConceitosBásicos Definições Tamanho de uma palavra w: número de aplicações do passo recursivo para se obter w Linguagem (L): subconjunto do conjunto de todas as possíveis palavras de um alfabeto (L ✓ ⌃⇤) Palavras que interessam são as palavras válidas e.g., se ⌃ = {Maria, fala, alto}, quais são as palavras válidas? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 67 / 468 Introdução – Conceitos Básicos Concatenação Seja u, v 2 ⌃⇤. A concatenação de u e v, escrita uv, é uma operação binária em ⌃⇤ definida assim: base: se tam(v) = 0, então v = e uv = u passo recursivo: se tam(v) = n, onde n > 0 então: v = wa, com tam(w) = n 1 e a 2 ⌃ Assim, uv = u(wa) = (uw)a Concatenação não é comutativa Prova: (por contra-exemplo) Se u = ab e v = ca então uv = abca e vu = caab Concatenação é associativa: (uv)w = u(vw) Sim? Então prova! Revisão de Indução Matemática Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 68 / 468 Introdução – Conceitos Básicos Prova de Associatividade (por indução no comprimento da palavra w) Teorema: Seja u, v, w 2 ⌃⇤, então (uv)w = u(vw) Base: se tam(w) = 0, então w = (uv)w = (uv) = uv e u(vw) = u(v ) = u(v) = uv Logo, (uv)w = u(vw) Hipótese: (uv)w = u(vw) 8w, tam(w)  k Passo indutivo: provar (uv)w = u(vw) 8w, tam(w) = k + 1 Seja w = xa, tam(x) = k, a 2 ⌃ (uv)w = (uv)(xa) = = ((uv)x)a (definição concatenação) = (u(vx))a (uso da hipótese de indução) = u((vx)a) (definição concatenação) = u(v(xa)) (definição concatenação) = u(vw) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 69 / 468 Introdução – Conceitos Básicos Subpalavra, Prefixo, Sufixo, Reverso x é uma subpalavra de y se 9x, v, z | y = zxv x é dito prefixo de y se z = , ou seja, y = xv x é dito sufixo de y se v = , ou seja, y = zx Seja w 2 ⌃⇤. O reverso de w, ou wR, é definido por: base: se tam(w) = 0, então w = e R = passo recursivo: se tam(w) = n, onde n 1 então: w = ua, com tam(u) = n 1 e a 2 ⌃ Assim, wR = (ua)R = a(u)R = auR Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 70 / 468
  • 23.
    Introdução – ConceitosBásicos Prova de Reverso (por indução no comprimento da palavra v) Teorema: seja u, v 2 ⌃⇤, então (uv)R = vRuR Base: se tam(v) = 0, então v = (uv)R = (u )R = uR e vR uR = R uR = uR Hipótese: (uv)R = vRuR 8w, tam(w)  k Passo indutivo: provar (uv)R = vRuR 8v, tam(v) = k + 1 Seja v = wa, tam(w) = k, a 2 ⌃ (uv)R = (u(wa))R = = ((uw)a)R (associatividade concatenação) = a(uw)R (definição de reverso) = a(wR uR ) (uso da hipótese de indução) = (awR )uR (associatividade) = (wa)R uR (definição de reverso) = vR uR Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 71 / 468 Introdução – Conceitos Básicos Concatenação de Linguagens Uma linguagem L é um subconjunto de ⌃* (L ✓ ⌃*) Concatenação das linguagens X e Y, denotada XY, é a linguagem: XY = {xy | x 2 X e y 2 Y} Exemplo: X = {a, b, c} e Y = {abb, ba} XY = {aabb, aba, babb, bba, cabb, cba} Xn: concatenação de X com X mesmo n vezes X0 = { } X1 = {a, b, c} X2 = {aa, ab, ac, ba, bb, bc, ca, cb, cc} X⇤: todas as palavras construídas a partir de X Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 72 / 468 Introdução – Conceitos Básicos X⇤ (definição formal) X⇤ = 1[ i=0 Xi X+ (definição formal) X+ = 1[ i=1 Xi Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 73 / 468 3. Linguagens Regulares – Conteúdo 1 Revisão 3 2 Introdução 59 Conjuntos Regulares 76 Expressões Regulares 80 Gramáticas Regulares 85 Autômatos Finitos 92 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Autômatos com Saída 116 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Algoritmos 134 Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Propriedades 156 Lema do Bombeamento 163 Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 74 / 468
  • 24.
    Linguagens Regulares –Hierarquia de Chomsky Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 75 / 468 Linguagens Regulares Conjuntos Regulares Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 76 / 468 Linguagens Regulares – Conjuntos Regulares Especificação Finita de Linguagens Requer uma descrição não ambígua das palavras Exemplo #1 (⌃ = {a, b}) Palavras com pelo menos uma ocorrência de bb: L = {a, b}⇤ {bb}{a, b}⇤ Palavras que possuem prefixo aa ou sufixo bb L = {aa}{a, b}⇤ [ {a, b}⇤ {bb} Exemplo #2 (⌃ = {b}) L1 = {bb} e L2 = { , bb, bbbb} Palavras com número par de b: L1 ⇤ e L2 ⇤ L1 ⇤ = { , bb, bbbb, bbbbbb, ...} L2 ⇤ = { , bb, bbbb, bbbbbb, ...} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 77 / 468 Linguagens Regulares – Conjuntos Regulares Conjuntos Regulares Uma linguagem regular é aquela que pode ser definida por um conjunto regular Um conjunto é regular se pode ser gerado a partir de ⌃ usando operador de Kleene, união e concatenação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 78 / 468
  • 25.
    Linguagens Regulares –Conjuntos Regulares Definição Recursiva Revisão Um conjunto regular é definido recursivamente da seguinte forma: 1 base: ;, { } e {a}8a 2 ⌃ são conjuntos regulares 2 passo recursivo: se X e Y são conjuntos regulares, então X [ Y, XY e X⇤ também são conjuntos regulares Exemplo Palavras sobre {a, b} que começam e terminam com a e contêm pelo menos um b {a}{a, b}⇤ {b}{a, b}⇤ {a} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 79 / 468 Linguagens Regulares Expressões Regulares Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 80 / 468 Linguagens Regulares – Expressões Regulares Expressões Regulares Abreviação para conjuntos regulares PS: x+ denota xx⇤ Definição Recursiva Revisão Uma expressão regular é definido recursivamente da seguinte forma: 1 base: ;, e a(8a 2 ⌃), são expressões regulares 2 passo recursivo: se u e v são expressões regulares, então u [ v, uv e u⇤ são expressões regulares Exemplos {a}{a, b}⇤{b}{a, b}⇤{a} = a(a [ b)⇤b(a [ b)⇤a {a, b}⇤{bb}{a, b}⇤ = (a [ b)⇤bb(a [ b)⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 81 / 468 Linguagens Regulares – Expressões Regulares Exercícios 1 Considerando ⌃ = {a, b}, crie expressões regulares para as seguintes linguagens: L1 = {bawab | w 2 {a, b}⇤ } L2 = palavras contendo aa ou bb L3 = palavras contendo aa e bb L4 = palavras com número par de b L5 = palavras que não contém aa 2 Considerando ⌃ = {a, b, c} e L = c⇤(b [ (ac⇤))⇤, verifique se as seguintes palavras estão em L: acabacc bbaaacc Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 82 / 468
  • 26.
    Linguagens Regulares –Expressões Regulares Identidades 1 ;w = w; = ; 2 w = w = w 3 ;⇤ = 4 ⇤ = 5 w [ u = u [ w 6 w [ ; = w 7 w [ w = w 8 w⇤w⇤ = w⇤ 9 (w⇤)⇤ = w⇤ 10 w⇤w = ww⇤ = w+ 11 w(x [ y) = wx [ wy 12 (x [ y)w = xw [ yw 13 (wy)⇤w = w(yw)⇤ 14 (w [ y)⇤ = (w⇤ [ y)⇤ = w⇤(w [ y)⇤ = (w [ yw⇤)⇤ = (w⇤y⇤)⇤ = w⇤(yw⇤)⇤ = (w⇤y)⇤w⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 83 / 468 Linguagens Regulares – Expressões Regulares Exercícios Mostre que: b⇤ (ab+ )⇤ [ b⇤ (ab+ )⇤ a = (b [ ab)⇤ ( [ a) a⇤ (a⇤ ba⇤ ba⇤ )⇤ = a⇤ (ba⇤ ba⇤ )⇤ PS ERs em Compiladores normalmente adotam | ao invés de [ i.e., a | b , a [ b PS2 Existem linguagens que não podem definidas por expressões regulares Por exemplo, {an bn | n 0} E aí, o que isso significa? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 84 / 468 Linguagens Regulares Gramáticas Regulares Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 85 / 468 Linguagens Regulares – Gramáticas Regulares Gramática Regular (GR) Uma GR é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 V (i.e., µ é um elemento de V) ⌫ 2 | ⌃ | ⌃V (i.e., palavra formada por elementos de V e ⌃) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 86 / 468
  • 27.
    Linguagens Regulares –Gramáticas Regulares Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468 Linguagens Regulares – Gramáticas Regulares Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): S ! aA A ! aA | bB B ! aB | bB | a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468 Linguagens Regulares – Gramáticas Regulares Gramática Regular (GR) – Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b GR(L): S ! aA A ! aA | bB B ! aB | bB | a Propriedade interessante de gramáticas regulares: Uma forma sentencial possui no máximo uma variável sempre o símbolo mais à direita Toda aplicação de regra adiciona um terminal na palavra que está sendo derivada exceto regra da forma A ! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 87 / 468 Linguagens Regulares – Gramáticas Regulares Gramática Regular (GR) – Exercícios de Fixação 1 L = a+b⇤ 2 L = { } [ {ab}{ab}⇤{a}⇤ 3 L = palavras sobre {a, b, c} que todo b seja seguido de a 4 L = palavras sobre {a, b} com número par de a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 88 / 468
  • 28.
    Linguagens Regulares –Gramáticas Regulares Derivação Aplicação consecutiva de regras Definição de regra (!) 6= Aplicação de regra ()) v )⇤ w w é derivável a partir de v (aplicando 0 ou mais regras) v )+ w w é derivável a partir de v (aplicando 1 ou mais regras) v )n w w é derivável a partir de v (aplicando n regras) Portanto: Uma palavra w 2 (V [ ⌃)⇤ é uma forma sentencial se S )⇤ w Uma palavra w 2 ⌃⇤ é uma sentença se S )⇤ w L(G) = {w 2 ⌃⇤ | S )⇤ w} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 89 / 468 Linguagens Regulares – Gramáticas Regulares Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468 Linguagens Regulares – Gramáticas Regulares Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? S ) aA ) abB ) abaB ) ababB ) ababa É uma sentença válida uma vez que S )⇤ ababa Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468 Linguagens Regulares – Gramáticas Regulares Dada a seguinte GR(L): S ! aA A ! aA | bB B ! aB | bB | a Pergunta-se: ababa 2 L(G)? S ) aA ) abB ) abaB ) ababB ) ababa É uma sentença válida uma vez que S )⇤ ababa E abbabb 2 L(G)? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 90 / 468
  • 29.
    Linguagens Regulares –Gramáticas Regulares Enfim Uma linguagem é regular se pode ser gerada por alguma gramática regular (ou CR ou ER) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 91 / 468 Linguagens Regulares Autômatos Finitos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 92 / 468 Linguagens Regulares – Autômatos Finitos Autômato Finito Máquina Reconhecedora de LR Podem ser determinísticos (AFD) Podem ser não-determinísticos (AFND) Podem ser não-determinísticos com transições- (AFND- ) Verifica se uma palavra satisfaz condições (i.e., se 2 ou 62 L) Entrada: palavra qualquer do alfabeto Saída: sim (palavra válida) ou não (palavra inválida) Linguagem L é regular sse existe um AF que reconhece L Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 93 / 468 Linguagens Regulares Autômatos Finitos Autômatos Finitos Determinísticos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 94 / 468
  • 30.
    Linguagens Regulares –Autômatos Finitos – AFD Autômato Finito Determinístico (AFD) Um AFD é uma quíntupla (Q, ⌃, D, q0, F): Q = conjunto finito de estados ⌃ = alfabeto D : Q x ⌃ ! Q = função (total) de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFD quando, partindo do estado inicial, forem lidos todos os símbolos de w e efetuadas as correspondentes transições de modo que, ao ler o último símbolo, o AFD para em um estado final A linguagem aceita por um AFD M (Q, ⌃, D, q0, F) é o conjunto L(M) = {w 2 ⌃⇤ | ˆD(q0, w) 2 F}, onde ˆD é a função de transição estendida para M Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 95 / 468 Linguagens Regulares – Autômatos Finitos – AFD Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468 Linguagens Regulares – Autômatos Finitos – AFD Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: q0 q1 q2 q3 a a b b a a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468 D a b q0 q1 q1 q1 q2 q2 q3 q2 q3 q3 q2 Linguagens Regulares – Autômatos Finitos – AFD Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFD: q0 q1 q2 q3 a a b b a a b Sim, na verdade, é um AFD incompleto, por quê? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 96 / 468 D a b q0 q1 q1 q1 q2 q2 q3 q2 q3 q3 q2
  • 31.
    Linguagens Regulares –Autômatos Finitos – AFD Exercícios de Fixação 1 L = palavras sobre {a, b} que contém aa ou bb 2 L = palavras sobre {a, b} que contém aaa 3 L = palavras sobre {a, b} com número par de a e ímpar de b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 97 / 468 Linguagens Regulares – Autômatos Finitos – AFD Função de Transição ( D) D : Q x ⌃ ! Q se total, então em todos os estados (Q), existe transições para todos os símbolos (⌃) AFD é completo AFD nunca trava se parcial, então em algum estado (Q), pode não existir transição para algum símbolo (⌃) AFD é incompleto AFD pode travar Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 98 / 468 Linguagens Regulares – Autômatos Finitos – AFD Como transformar uma função parcial em uma total? 1 Criar um estado não final qerro 2 8x 2 ⌃ =) (qerro, x) ! qerro qerro tem um loop com todos os símbolos do alfabeto 3 (qi, x) # =) (qi, x) ! qerro toda transição indefinida agora vai para qerro q0 q1 q2 q3 a b a b a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 99 / 468 Linguagens Regulares – Autômatos Finitos – AFD Como transformar uma função parcial em uma total? 1 Criar um estado não final qerro 2 8x 2 ⌃ =) (qerro, x) ! qerro qerro tem um loop com todos os símbolos do alfabeto 3 (qi, x) # =) (qi, x) ! qerro toda transição indefinida agora vai para qerro q0 q1 q2 q3 qerro a b b a b a a,b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 99 / 468
  • 32.
    Linguagens Regulares –Autômatos Finitos – AFD Aceitação / Rejeição Um AF aceita a entrada quando após processar o último símbolo, assume um estado final (F) Um AF rejeita a entrada quando após processar o último símbolo, assume um estado não final trava durante seu processamento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 100 / 468 Linguagens Regulares – Autômatos Finitos – AFD Função de Transição Estendida (ˆD) É uma extensão da função de transição original que a partir de um estado de origem (Q) e uma palavra (⌃⇤), retorna o estado final do processamento (Q) ˆD : Q x ⌃⇤ ! Q ACEITA(M) = {w 2 ⌃⇤ | ˆD(q0, w) 2 F} = L(M) REJEITA(M) = {w 2 ⌃⇤ | ˆD(q0, w) 62 F} Pergunta-se: o que ocorre se D não for total? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 101 / 468 Linguagens Regulares – Autômatos Finitos – AFD Outros Exercícios 1 L = ⌃⇤ 2 L = ; Pergunta-se Qual a principal diferença? Logo, como modificar um AFD M que reconhece L para reconhecer L? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 102 / 468 Linguagens Regulares – Autômatos Finitos – AFD Questões importantes 1 Pode um AF entrar em loop? 2 Dado dois AFs M1 e M2, pergunta-se: Quando os dois AFs são equivalentes? ACEITA(M) REJEITA(M) = ACEITA(M) [ REJEITA(M) = ⇠ACEITA(M) = ⇠REJEITA(M) = Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 103 / 468
  • 33.
    Linguagens Regulares –Autômatos Finitos – AFD Questões importantes 1 Pode um AF entrar em loop? 2 Dado dois AFs M1 e M2, pergunta-se: Quando os dois AFs são equivalentes? L(M1) = L(M2) ACEITA(M) REJEITA(M) = ; ACEITA(M) [ REJEITA(M) = ⌃⇤ = U ⇠ACEITA(M) = REJEITA(M) ⇠REJEITA(M) = ACEITA(M) = L(M) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 103 / 468 Linguagens Regulares Autômatos Finitos Autômatos Finitos Não-Determinísticos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 104 / 468 Linguagens Regulares – Autômatos Finitos – AFND Composição A construção de sistemas é composicional, geralmente É importante diferenciar três formas de composição: Sequencial: A execução do próximo componente depende do término do anterior Concorrente: A execução dos componentes é irrelevante, i.e., são componentes independentes Não-determinista: A execução do próximo componente é uma escolha entre diversos componentes alternativos Exemplo: sistema bancário (atendimento em caixas) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 105 / 468 Linguagens Regulares – Autômatos Finitos – AFND Autômato Finito Não-Determinístico (AFND) Um AFND é uma quíntupla (Q, ⌃, ND, q0, F): Q = conjunto finito de estados ⌃ = alfabeto ND : Q x ⌃ ! P(Q) = função (total) de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Uma palavra w 2 ⌃⇤ é dita ser aceita por um AFND se, e somente se, existe uma computação que a consome e para em um estado final Para todo AFND, existe um AFD equivalente i.e., não aumenta poder de expressão Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 106 / 468
  • 34.
    Linguagens Regulares –Autômatos Finitos – AFND Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468 Linguagens Regulares – Autômatos Finitos – AFND Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: q0 q1 q2 q3 a b a a,b a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468 ND a b q0 {q1} ; q1 {q1} {q2} q2 {q2, q3} {q2} q3 ; ; Linguagens Regulares – Autômatos Finitos – AFND Exemplo L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b AFND: q0 q1 q2 q3 a b a a,b a Qual seria a árvore de computações para a palavra abaaa? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 107 / 468 ND a b q0 {q1} ; q1 {q1} {q2} q2 {q2, q3} {q2} q3 ; ; Linguagens Regulares – Autômatos Finitos – AFND Exercício de Fixação 1 L1 = palavras sobre {a, b} que contém aa ou bb 2 L2 = (a [ b)⇤bb 3 L3 = palavras sobre {a, b} que terminam com aaa Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 108 / 468
  • 35.
    Linguagens Regulares –Autômatos Finitos – AFND Aceitação / Rejeição Um AF aceita a entrada quando após processar o último símbolo, em alguma das possíveis computações, assume um estado final (F) Um AF rejeita a entrada quando (1) após processar o último símbolo, em todas as possíveis computações, assume um estado não final (2) trava durante seu processamento, em todas as possíveis computações (3) qualquer combinação de (1) ou (2) e.g., das 10 possíveis computações, 7 assumem estado não final e 3 travam Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 109 / 468 Linguagens Regulares – Autômatos Finitos – AFND Função de Transição Estendida (ˆND) É uma extensão da função de transição original que a partir de um estado de origem (Q) e uma palavra (⌃⇤), retorna todos os possível estados finais do processamento (P(Q)) ˆND : Q x ⌃⇤ ! P(Q) ACEITA(M) = {w 2 ⌃⇤ | ˆND(q0, w) F 6= ;} = L(M) REJEITA(M) = {w 2 ⌃⇤ | ˆND(q0, w) F = ;} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 110 / 468 Linguagens Regulares – Autômatos Finitos – AFND Pontos Importantes Muitas vezes, é muito mais fácil desenvolver um AFND do que um AFD Por exemplo: L = palavras sobre {a, b} cujo quinto último símbolo é a Solução AFD: trabalhosa, 32 estados Solução AFND: simples, 6 estados Um estratégia bem conhecida: Construir o AFND Aplicar o algoritmo AFND ! AFD Algoritmo AFND ! AFD Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 111 / 468 Linguagens Regulares Autômatos Finitos Autômatos Finitos Não-Determinísticos com Transições- Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 112 / 468
  • 36.
    Linguagens Regulares –Autômatos Finitos – AFND- Autômato Finito Não-Determinístico com Transições- (AFND- ) Um AFND- é uma quíntupla (Q, ⌃, ND , q0, F): Q = conjunto finito de estados ⌃ = alfabeto ND : Q x (⌃ [ { }) ! P(Q) = f. de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Para todo AFND- , existe um AFND e um AFD equivalentes i.e., não aumenta poder de expressão É muito similar ao AFND Tem como vantagem facilitar construções e demonstrações Por exemplo, o algoritmo ER ! AFND- Algoritmo ER ! AFND- Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 113 / 468 Linguagens Regulares – Autômatos Finitos – AFND- Exemplo L = {0k | k é múltiplo de 2 ou 3} AFND- : Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 114 / 468 Linguagens Regulares – Autômatos Finitos – AFND- Exemplo L = {0k | k é múltiplo de 2 ou 3} AFND- : q0 q1 q2 q3 q5 q4 0 0 0 00 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 114 / 468 ND 0 q0 ; {q1, q3} q1 {q2} ; q2 {q1} ; q3 {q4} ; q4 {q5} ; q5 {q3} ; Linguagens Regulares – Autômatos Finitos – AFND- Exercício de Fixação 1 L = (a [ b)⇤bb ou aa(a [ b)⇤ 2 L = palavras sobre {a, b, c} que terminam com a ou bb ou ccc Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 115 / 468
  • 37.
    Linguagens Regulares Autômatos comSaída Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 116 / 468 Linguagens Regulares Autômatos com Saída Máquina de Moore Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 117 / 468 Linguagens Regulares – Autômatos com Saída – Moore Máquina de Moore Uma máquina de Moore é uma sêxtupla (Q, ⌃, , D, , q0): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da saída D : Q x ⌃ ! Q = função (total) de transições de estados : Q ! = função (total) de saída qo 2 Q = estado inicial Uma máquina de Moore é um AFD com um símbolo de saída associado a cada estado Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 118 / 468 Linguagens Regulares – Autômatos com Saída – Moore Funcionamento da Máquina de Moore Funcionamento semelhante aos AFDs Ao invés de uma saída binária (aceita/rejeita), é uma palavra Na prática, é uma máquina de estados finitos transdutora O primeiro símbolo da palavra de saída é sempre (q0) Logo, o tamanho da saída é igual a w + 1 Sempre que se atingir um estado Q/Y, concatena-se o simbolo Y = (Q) à direita da palavra de saída No exemplo abaixo, ao se atingir o estado q3, concatena-se “2” à direita da palavra de saída, i.e., (q3) = 2 q3/2 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 119 / 468
  • 38.
    Linguagens Regulares –Autômatos com Saída – Moore Exemplo #1 Máquina de Moore que determina o número de a presentes nos dois últimos símbolos da palavra de entrada bb/0 aa/2 ab/1 ba/1 b a a ba b a b O último símbolo da palavra de saída indica o resultado Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 120 / 468 Linguagens Regulares – Autômatos com Saída – Moore Função de Saída Estendida (r) Dados um estado (Q) e uma palavra de entrada (⌃⇤), retorna a palavra de saída da máquina de Moore: r : Q ⇥ ⌃⇤ ! + Formalização: r(Q, ) = (Q) r(Q, ay) = (Q) r( D(Q, a), y), 8a 2 ⌃ e y 2 ⌃⇤ Saída Computada: A saída de uma máquina de Moore M = (Q, ⌃, , D, , q0) para a palavra w 2 ⌃⇤ é r(q0, w) Assim, retome o Exemplo #1 e compute r(bb, aaab) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 121 / 468 Linguagens Regulares – Autômatos com Saída – Moore Simulação de AFDs com Máquinas de Moore Qualquer AFD M pode ser simulado utilizando-se uma máquina de Moore Uma possibilidade é fazer: = {0, 1} (Q) = ⇢ 1, se Q 2 F 0, se Q 62 F Logo, w 2 L(M) sse r(q0, w) termina em 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 122 / 468 Linguagens Regulares – Autômatos com Saída – Moore Exemplo #2 Máquina de Moore que simula um AFD que reconhece as palavras que terminam com aa bb/0 aa/1 ab/0 ba/0 b a a ba b a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 123 / 468
  • 39.
    Linguagens Regulares –Autômatos com Saída – Exercícios Exercício 1 Projetar uma AFD que cuja soma dos símbolos da palavra seja divisível por 4, considerando ⌃ = {0, 1, 2, 3} Dica1: A máquina deve aceitar “13”, “1111”, “202”, . . . Dica2: Um estado para cada resto (e.g., 0%4, 1%4, . . . ) 2 Projetar uma Máquina de Moore cujo último símbolo da palavra de saída represente o resto da divisão por 4, considerando ⌃ = {0, 1, 2, 3} Dica: Pequena alteração em (1) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 124 / 468 Linguagens Regulares Autômatos com Saída Máquinas de Mealy Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 125 / 468 Linguagens Regulares – Autômatos com Saída – Mealy Máquina de Mealy Uma máquina de Mealy é uma sêxtupla (Q, ⌃, , D, , q0): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da saída D : Q x ⌃ ! Q = função (total) de transições de estados : Q ⇥ ⌃ ! = função (total) de saída qo 2 Q = estado inicial Uma máquina de Mealy é um AFD com um símbolo de saída associado a cada transição Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 126 / 468 Linguagens Regulares – Autômatos com Saída – Mealy Funcionamento da Máquina de Mealy Funcionamento semelhante aos AFDs Ao invés de uma saída binária (aceita ou rejeita), é uma palavra Na prática, é uma máquina de estados finitos transdutora O tamanho da saída é igual ao tamanho da palavra Sempre que, a partir de um estado Q, é efetuada uma transição a/d , concatena-se o símbolo d = (Q, a) à direita da palavra de saída No exemplo abaixo, a partir do estado q2, ao se efetuar a transição a/1, concatena-se “1” à direita da palavra de saída, i.e., (q2, a) = 1 q2 q3 a/1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 127 / 468
  • 40.
    Linguagens Regulares –Autômatos com Saída – Mealy Exemplo #3 Máquina de Mealy que determina o quociente da divisão de um número binário por 6 q0 q1 q2 q3 q4q5 0/0 1/0 1/0 0/0 1/0 0/0 1/1 0/1 1/10/1 1/1 0/1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 128 / 468 Linguagens Regulares – Autômatos com Saída – Mealy Exemplo #4 Modificação 2 em 1 Mealy: quociente da divisão por 6 (transições) Moore: resto da divisão por 6 (estados) q0/0 q1/1 q2/2 q3/3 q4/4q5/5 0/0 1/0 1/0 0/0 1/0 0/0 1/1 0/1 1/10/1 1/1 0/1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 129 / 468 Linguagens Regulares – Autômatos com Saída – Mealy Função de Saída Estendida (s) Dados um estado (Q) e uma palavra de entrada (⌃⇤), retorna a palavra de saída da máquina de Mealy: s : Q ⇥ ⌃⇤ ! ⇤ Formalização: s(Q, ) = s(Q, ay) = (Q, a) s( D(Q, a), y), 8a 2 ⌃ e y 2 ⌃⇤ Saída Computada: A saída de uma máquina de Mealy M = (Q, ⌃, , D, , q0) para a palavra w 2 ⌃⇤ é s(q0, w) Assim, retome o Exemplo #3 e compute s(q0, 1000) e s(q0, 1100) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 130 / 468 Linguagens Regulares – Autômatos com Saída – Exercícios Exercício 1 Projetar uma Máquina de Mealy que troque a por b e vice-versa, considerando ⌃ = {a, b} Dica: Não complique o que é simples Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 131 / 468
  • 41.
    Linguagens Regulares Autômatos comSaída Algoritmos de Transformação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 132 / 468 Algoritmos de Transformação Algoritmos de Transformação Existem algoritmos de transformação de uma Máquina de Moore para uma Máquina de Mealy e vice-versa, com certas ressalvas No entanto, não serão abordados na disciplina Os algoritmos podem ser encontrados em Vieira [8] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 133 / 468 Linguagens Regulares Algoritmos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 134 / 468 Linguagens Regulares Algoritmos Transformação AFND- para AFD Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 135 / 468
  • 42.
    Linguagens Regulares –Algoritmos – AFND- para AFD Transformação de um AFND- para AFD 1 AFND- ! AFND i.e., ND ! ND Importante: AFND pode ter mais de um estado inicial 2 AFND ! AFD i.e., ND ! D Importante: Dado um AFND com n estados, o AFD correspondente pode ter até 2n estados (e.g., 5 ! 32) Por isso, abordaremos um algoritmo de construção de estados sob demanda (para evitar estados inúteis) Caso não haja transições , pular passo (1) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 136 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo 1 ND ! ND i. São estados iniciais: fecho (q0) Se um estado inicial alcança um estado final, tal inicial será final ND a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
  • 43.
    Linguagens Regulares –Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo 1 ND ! ND i. São estados iniciais: fecho (q0) Se um estado inicial alcança um estado final, tal inicial será final ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo 1 ND ! ND i. São estados iniciais: fecho (q0) Se um estado inicial alcança um estado final, tal inicial será final ii. Para os outros estados qi : ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo 1 ND ! ND i. São estados iniciais: fecho (q0) Se um estado inicial alcança um estado final, tal inicial será final ii. Para os outros estados qi : considera todo estado em fecho (qi ) ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND- q0 q1 q2 a a a b c ND a b c fecho( ) q0 {q0, q1, q2} ; ; ; {q0} q1 ; {q1} ; ; {q1} q2 ; ; {q2} {q1} {q2, q1} *fecho (qi ) = qi + estados acessíveis a partir de qi lendo 1 ND ! ND i. São estados iniciais: fecho (q0) Se um estado inicial alcança um estado final, tal inicial será final ii. Para os outros estados qi : considera todo estado em fecho (qi ) consome, para em um estado qj e então adiciona fecho (qj ) ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 137 / 468
  • 44.
    Linguagens Regulares –Algoritmos – AFND- para AFD AFND (agora) ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND (agora) q0 q1 q2 a a a b b,c c ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND (agora) q0 q1 q2 a a a b b,c c ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} 2 ND ! D (construção de subconjuntos sob demanda) i. É inicial: a união de todos os estados iniciais: {q0} D a b c q0 = hq0i hq0, q1, q2i Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFND (agora) q0 q1 q2 a a a b b,c c ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} 2 ND ! D (construção de subconjuntos sob demanda) i. É inicial: a união de todos os estados iniciais: {q0} ii. Cada novo Q obtém a união das transições dos seus estados integrantes D a b c q0 = hq0i hq0, q1, q2i hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i hq1i hq1i hq1, q2i hq1i hq1, q2i Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468
  • 45.
    Linguagens Regulares –Algoritmos – AFND- para AFD AFND (agora) q0 q1 q2 a a a b b,c c ND a b c q0 {q0, q1, q2} ; ; q1 ; {q1} ; q2 ; {q1} {q1, q2} 2 ND ! D (construção de subconjuntos sob demanda) i. É inicial: a união de todos os estados iniciais: {q0} ii. Cada novo Q obtém a união das transições dos seus estados integrantes iii. São finais: os estados que contém pelo menos um estado final D a b c q0 = hq0i hq0, q1, q2i F 3 hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i F 3 hq1i hq1i F 3 hq1, q2i hq1i hq1, q2i Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 138 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD AFD (enfim) hq0i hq0, q1, q2i hq1, q2i hq1i a b c a b c b D a b c hq0i hq0, q1, q2i hq0, q1, q2i hq0, q1, q2i hq1i hq1, q2i hq1i hq1i hq1, q2i hq1i hq1, q2i Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 139 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD Exercício de Fixação #1 q0 q1 q2 q3 a b a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 140 / 468 Linguagens Regulares – Algoritmos – AFND- para AFD Exercício de Fixação #2 q0 q1 q2 q3 0,1 1 0,1 0,1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 141 / 468
  • 46.
    Linguagens Regulares –Algoritmos – AFND- para AFD Exercício de Fixação #3 q0 q1 q2 q3 q4 a b a a,b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 142 / 468 Linguagens Regulares Algoritmos Minimização de AFD Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 143 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD Minimização de um AFD 1 Todos os estados são equivalentes 2 Se um é estado final e o outro não, logo não são equivalentes 3 Conferir, estado por estado, se são "equivalentes" Procedimento a ser detalhado Toy Example (propósito ilustrativo apenas) q0 q1 q2 q3 q4 q5 a b c a b c a b c a,b c a,b,c a,b,c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 144 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD Algoritmo Entrada: AFD M = (Q, ⌃, , q0, F) 1 Para todos os pares de estados qi e qj , i < j, faça: 1.1 D[i, j] = 0 1.2 S[i, j] = ; 2 Para cada par [i, j], i < j, se um é estado final e o outro não, faça D[i, j] = 1 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] 4 Para cada D[i, j] = 0, os estados i e j podem ser fundidos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 145 / 468
  • 47.
    Linguagens Regulares –Algoritmos – Minimização de AFD Exemplo q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 146 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 1 Para todos os pares de estados qi e qj , i < j, faça: 1.1 D[i, j] = 0 (aqui, 0=X, 1=x) 1.2 S[i, j] = ; Índice D[i, j] = S[i, j] = Motivo [0, 1] X ; [0, 2] X ; [0, 3] X ; [0, 4] X ; [0, 5] X ; [0, 6] X ; [1, 2] X ; [1, 3] X ; [1, 4] X ; [1, 5] X ; [1, 6] X ; Índice D[i, j] = S[i, j] = Motivo [2, 3] X ; [2, 4] X ; [2, 5] X ; [2, 6] X ; [3, 4] X ; [3, 5] X ; [3, 6] X ; [4, 5] X ; [4, 6] X ; [5, 6] X ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 147 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 2 Para cada par [i, j], i < j, se um é estado final e o outro não, faça D[i, j] = 1 (aqui, x) Índice D[i, j] = S[i, j] = Motivo [0, 1] X ; [0, 2] X ; [0, 3] X ; [0, 4] x ; [0, 5] x ; [0, 6] x ; [1, 2] X ; [1, 3] X ; [1, 4] x ; [1, 5] x ; [1, 6] x ; Índice D[i, j] = S[i, j] = Motivo [2, 3] X ; [2, 4] x ; [2, 5] x ; [2, 6] x ; [3, 4] x ; [3, 5] x ; [3, 6] x ; [4, 5] X ; [4, 6] X ; [5, 6] X ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 148 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X { } [0, 2] X { } [0, 3] X { } [1, 2] X { } [1, 3] X { } Índice D[i, j] = S[i, j] = Motivo [2, 3] X { } [4, 5] X { } [4, 6] X { } [5, 6] X { } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
  • 48.
    Linguagens Regulares –Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo ⌅ [0, 1] X { } [0, 2] X { } [0, 3] X { } [1, 2] X { [0, 1] } [1, 3] X { } Índice D[i, j] = S[i, j] = Motivo [2, 3] X { } [4, 5] X { [0, 1] } [4, 6] X { } [5, 6] X { } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X { } ⌅ [0, 2] X { } [0, 3] X { } [1, 2] X { [0, 1] } [1, 3] X { [0, 2] } Índice D[i, j] = S[i, j] = Motivo [2, 3] X { } [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X { } [0, 2] X { } ⌅ [0, 3] X ! x { } a [1, 2] X { [0, 1] } [1, 3] X { [0, 2] } Índice D[i, j] = S[i, j] = Motivo [2, 3] X { } [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X { } [0, 2] X { } [0, 3] X ! x { } a ⌅ [1, 2] X { [0, 1] } [1, 3] X { [0, 2] } Índice D[i, j] = S[i, j] = Motivo [2, 3] X { [1, 2] } [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
  • 49.
    Linguagens Regulares –Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X { } [0, 2] X ! x { } [1, 3] [0, 3] X ! x { } a [1, 2] X { [0, 1] } ⌅ [1, 3] X ! x { [0, 2] } a Índice D[i, j] = S[i, j] = Motivo [2, 3] X { [1, 2] } [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X ! x { } [1, 2] [0, 2] X ! x { } [1, 3] [0, 3] X ! x { } a [1, 2] X ! x { [0, 1] } [2, 3] [1, 3] X ! x { [0, 2] } a Índice D[i, j] = S[i, j] = Motivo ⌅ [2, 3] X ! x { [1, 2] } a [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X ! x { } [1, 2] [0, 2] X ! x { } [1, 3] [0, 3] X ! x { } a [1, 2] X ! x { [0, 1] } [2, 3] [1, 3] X ! x { [0, 2] } a Índice D[i, j] = S[i, j] = Motivo [2, 3] X ! x { [1, 2] } a ⌅ [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X ! x { } [1, 2] [0, 2] X ! x { } [1, 3] [0, 3] X ! x { } a [1, 2] X ! x { [0, 1] } [2, 3] [1, 3] X ! x { [0, 2] } a Índice D[i, j] = S[i, j] = Motivo [2, 3] X ! x { [1, 2] } a [4, 5] X { [0, 1] } ⌅ [4, 6] X { [0, 2] } [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468
  • 50.
    Linguagens Regulares –Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 3 Para cada par [i, j], i < j e D[i, j] = 0, faça: 3.1 se existe um a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn e (D[m, n] = 1 ou D[n, m] = 1) então: DIST(i, j) //altera D[i, j] = 1 e propaga a distinção aos elementos de S[i, j] 3.2 para cada a 2 ⌃ tal que (qi , a) = qm e (qj , a) = qn se m < n e [i, j] 6= [m, n], então adicione [i, j] à S[m, n] se m > n e [i, j] 6= [n, m], então adicione [i, j] à S[n, m] Índice D[i, j] = S[i, j] = Motivo [0, 1] X ! x { } [1, 2] [0, 2] X ! x { } [1, 3] [0, 3] X ! x { } a [1, 2] X ! x { [0, 1] } [2, 3] [1, 3] X ! x { [0, 2] } a Índice D[i, j] = S[i, j] = Motivo [2, 3] X ! x { [1, 2] } a [4, 5] X { [0, 1] } [4, 6] X { [0, 2] } ⌅ [5, 6] X { [1, 2] } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 149 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD q0 q1 q2 q3 q4 q5 q6 b a b a b a a,b a,b a,b a,b 4 Para cada D[i, j] = 0, os estados i e j podem ser fundidos q0 q1 q2 q3 {q4, q5, q6} b a b a b a a,b a,b Logo, um mesmo estado para q4, q5 e q6, já que D[4, 5] = 0, D[4, 6] = 0 e D[5, 6] = 0 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 150 / 468 Linguagens Regulares – Algoritmos – Minimização de AFD Exercício de Fixação q0 q1 q2 q3 q4 q5 q6 q7 a b a b a,b b a a b a,b b a a,b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 151 / 468 Linguagens Regulares Algoritmos Transformação de ER para AFND- Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 152 / 468
  • 51.
    Linguagens Regulares –Algoritmos – ER para AFND- Algoritmo de Thompson a b a b ab a b a [ b (ou a | b) a b a⇤ a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 153 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q2 q3 a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q2 q3 q4 q5 a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
  • 52.
    Linguagens Regulares –Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q1 q2 q3 q4 q5 q6 a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q1 q2 q3 q4 q5 q6 q7 q8 a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q1 q2 q3 q4 q5 q6q0 6 q7 q8 q9 a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q1 q2 q3 q4 q5 q6 q7 q8 q9 a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468
  • 53.
    Linguagens Regulares –Algoritmos – ER para AFND- Exemplo: ((a [ b)c⇤)⇤ q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 a b c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 154 / 468 Linguagens Regulares – Algoritmos – ER para AFND- Exercícios de Fixação 1 (a [ b [ c)⇤ 2 (a [ b)⇤abb 3 (( [ a)b⇤)⇤ 4 (a [ b)⇤abb(a [ b)⇤ 5 letra (letra [ digito)⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 155 / 468 Linguagens Regulares Propriedades Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 156 / 468 Linguagens Regulares – Propriedades Como provar que uma linguagem é regular? 1 Através de uma GR (formalismo gerador) 2 Através de um AFD, AFND ou AFND- (formalismo operacional) 3 Através de um CR ou ER (formalismo axiomático) 4 Ou através de propriedades de fechamento Por isso, é importante conhecer as propriedades de LR Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 157 / 468
  • 54.
    Linguagens Regulares –Propriedades Propriedades de Fechamento Se L1 e L2 são regulares, então também são regulares: L1 [ L2 L1L2 L1 ⇤ Se L1 é regular, então L1 também é regular Se L1 e L2 são regulares, então L1 L2 também é regular Objetivos: Originar novas LRs a partir de existentes Provar (ou refutar) que alguma linguagem é regular Se L1 L2 = {ai bi | i > 0}, uma das linguagens não é regular Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468 Linguagens Regulares – Propriedades Propriedades de Fechamento Se L1 e L2 são regulares, então também são regulares: L1 [ L2 L1L2 L1 ⇤ Se L1 é regular, então L1 também é regular Prova: basta inverter os estados finais com não-finais Se L1 e L2 são regulares, então L1 L2 também é regular Objetivos: Originar novas LRs a partir de existentes Provar (ou refutar) que alguma linguagem é regular Se L1 L2 = {ai bi | i > 0}, uma das linguagens não é regular Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468 Linguagens Regulares – Propriedades Propriedades de Fechamento Se L1 e L2 são regulares, então também são regulares: L1 [ L2 L1L2 L1 ⇤ Se L1 é regular, então L1 também é regular Prova: basta inverter os estados finais com não-finais Se L1 e L2 são regulares, então L1 L2 também é regular Prova: Lei de Morgan: L1 L2 = (L1 [ L2) Objetivos: Originar novas LRs a partir de existentes Provar (ou refutar) que alguma linguagem é regular Se L1 L2 = {ai bi | i > 0}, uma das linguagens não é regular Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 158 / 468 Linguagens Regulares – Propriedades Propriedades de Fechamento Prove que a linguagem formada por palavras sobre {a,b} que tenham aa e não tenham bb é regular (Exemplo 6.4.1, Sudkamp [6]) L1 = palavras com aa = (a [ b)⇤ aa(a [ b)⇤ é regular L2 = palavras com bb = (a [ b)⇤ bb(a [ b)⇤ é regular L2 também é regular Logo, L1 L2 é regular Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 159 / 468
  • 55.
    Linguagens Regulares –Propriedades Propriedades de Fechamento – Exemplo Prove que L = {aibj | i, j 0 e i 6= j} não é regular Suponha que L seja regular Então, L também é regular Mas, L = {ai bj | i, j 0 e i = j} não é regular Logo, L não pode ser regular Método utilizado: Prova por contradição Supõe-se que o contrário do que se deseja provar é verdade Então, demonstra-se que essa suposição leva a um absurdo (contradição) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 160 / 468 Linguagens Regulares – Propriedades LR é Vazia, Finita ou Infinita? Dada uma linguagem L reconhecida por um AFD M com n estados, logo L é: 1 Infinita sse M aceita palavras z tal que |z| n i.e., possui ciclo 2 Finita sse M aceita apenas palavras z tal que |z| < n i.e., não possui ciclo 3 Vazia sse M não aceita qualquer palavras z i.e., F = ; ou é inalcançável (ocorre apenas em autômatos incompletos) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 161 / 468 Linguagens Regulares – Propriedades É possível garantir que duas LRs são iguais? Sim, é possível verificar se L1 = L2 Prova Suponha os AFs M1 e M2 onde L(M1) = L1 e L(M2) = L2 Pelas propriedades de fechamento, é possível construir um AF M3 tal que: L3 = (L1 L2) [ (L1 L2) Portanto, L1 = L2 sse L3 for vazia E, como vimos anteriormente, é possível determinar se uma linguagem é vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 162 / 468 Linguagens Regulares Lema do Bombeamento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 163 / 468
  • 56.
    Linguagens Regulares –Lema do Bombeamento Lema do Bombeamento (Pumping Lemma) (um teorema na verdade) Técnica usada para provar que linguagem não é regular e só para linguagens infinitas (pq?) Se um AFD tem k estados, então qualquer caminho de aceitação de uma palavra z de tamanho |z| k contém um ciclo q0 q1 a b b a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 164 / 468 Linguagens Regulares – Lema do Bombeamento Exemplo (k=2, pense em qualquer z tal que |z| k e z 2 L) q0 q1 a b b a Caminhos de aceitação O caminho de aceitação de qualquer palavra z tal que |z| k e z 2 L contém um ciclo e.g., aa, baa, bb, . . . Podem existir palavras de tamanho menor que 2 e.g. e b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 165 / 468 Linguagens Regulares – Lema do Bombeamento Decomposição Suponha uma palavra z 2 L tal que |z| k Logo, z pode ser dividida em três subpalavras z = uvw tal que |uv|  k, v 6= e v é parte de z reconhecida pelo ciclo Claramente, o ciclo pode ser executado (“bombeado”) várias vezes uvi w 2 L para todo i 0 q0 Q(s) qf u v w Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 166 / 468 Linguagens Regulares – Lema do Bombeamento Exemplo q0 q1 q2 q3 b a a ba b a, b Decomponha as palavras z 2 L e |z| k em z = uvw aabb abaab bababb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 167 / 468
  • 57.
    Linguagens Regulares –Lema do Bombeamento Enunciado do Lema do Bombeamento “Seja L uma LR aceita pelo AFD M com k estados. Seja z qualquer palavra de L tal que |z| k. Então, z pode ser decomposta em z = uvw com uv  k, v 6= e uviw 2 L para todo i 0.” Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 168 / 468 Linguagens Regulares – Lema do Bombeamento Exemplo #1: L = {aibi | i 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 169 / 468 Linguagens Regulares – Lema do Bombeamento Exemplo #1: L = {aibi | i 0} Assuma que L é regular e seja k a constante especificada pelo Lema. Seja z = ak bk . Qualquer decomposição de z = uvw satisfazendo as precondições do lema terão a seguinte forma: u v w ai aj ak i j bk onde i + j  k e j > 0. Bombeando alguma subpalavra nesta forma produzirá uv2 w = ai aj aj ak i j bk = ak aj bk que não pertence a L. Como z 2 L não possui decomposições que satisfaçam as condições do Lema do Bombeamento, conclui-se que L não é regular. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 169 / 468 Linguagens Regulares – Lema do Bombeamento Exemplo #2: L = {an | n é um quadrado perfeito } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 170 / 468
  • 58.
    Linguagens Regulares –Lema do Bombeamento Exemplo #2: L = {an | n é um quadrado perfeito } Assuma que L é regular e seja k a constante especificada pelo Lema. Seja z = ak2 e, portanto, |z| = k2 . Qualquer decomposição de z = uvw conterá apenas a. Assim, conduziremos a prova no tamanho da palavra bombeada: |uv2 w| = |uvw| + |v| = k2 + |v| (0 < |v|  k)  k2 + k < k2 + 2k + 1 = (k + 1)2 Como k2 < |uv2 w| < (k + 1)2 , uv2 w 62 L. Como z 2 L não possui decomposições que satisfaçam as condições do Lema do Bombeamento, conclui-se que L não é regular. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 170 / 468 Linguagens Regulares – Lema do Bombeamento Exercício de Fixação 1 L1 = {0m1n | m > n} 2 L2 = {0n12n | n > 0} 3 L3 = {aibmcn | 0 < i, 0 < m < n} 4 L4 = {0m1n2m+n | m > 0 e n > 0} 5 L5 = {0n | n é um número primo } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 171 / 468 4. Linguagens Livres de Contexto – Conteúdo 1 Revisão 3 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Gramática Livre de Contexto 178 Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Formas Normais 207 Transformações de Gramática 214 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Forma Normal de Chomsky 248 Remoção de recursividade à esquerda 256 Forma Normal de Greibach 264 Autômatos com Pilha 278 Variantes Critérios de Aceitação Algoritmos de Reconhecimento 305 Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Algoritmos 337 Transformação de GLCs para APs Transformação de APs para GLCs Propriedades 356 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 172 / 468 Linguagens Livres de Contexto Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 173 / 468
  • 59.
    Linguagens Livres deContexto O que sabemos: LR, GR e AF (Tipo 3) LR: Ling. natural: Palavras sobre {a, b} que terminam com {a} Conj. regular: {a, b}⇤ {a} Abreviação: (a [ b)⇤ a GR: S ! bS | aA A ! aA | bS | AF: S A b a a b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 174 / 468 Linguagens Livres de Contexto LR x LLC LR descrevem linguagens simples Geradas por GR Reconhecidas por AF No entanto, existem uma ampla gama de linguagens que não podem ser descritas por LR Exemplo Clássico: L = {ai bi | i 0} Como já visto, o lema do bombeamento indica que a linguagem L não é regular Logo, devemos “subir” na Hierarquia de Chomsky! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 175 / 468 Linguagens Livres de Contexto De LR (tipo 3) para LLC (tipo 2) LLC aumentam o poder de expressão da linguagem (veremos o porquê) GLC é o sistema formal para geração de LLC Assim, descrever L= {aibi | i 0} é possível com uma GLC S ! aSb | (e, pelo jeito, bem simples também) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 176 / 468 Linguagens Livres de Contexto Aplicabilidade Como já vimos, LR são fundamentais no projeto de um analisador léxico Padrões são descritos por ER Diagramas de Transição (AF estendidos) são usados no reconhecimento de tokens Por outro lado, LLC são fundamentais no projeto de um analisador sintático A sequência de tokens segue a gramática da linguagem? GLC especificam a gramática formal da LP Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 177 / 468
  • 60.
    Linguagens Livres deContexto Gramática Livre de Contexto Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 178 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Gramática Livre de Contexto (GLC) Uma GLC é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 V (i.e., um não-terminal) ⌫ 2 (V [ ⌃)⇤ (i.e., palavra formada por elementos de V e ⌃) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 179 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Regras Mecânica: A ! w o não-terminal A pode ser trocado por w Exemplo: uAv ) uwv Livre de contexto: A sempre pode ser trocado por w (independentemente do “contexto” u e v onde A ocorrer) Característica Intrínseca GLC permitem produzir duplo balanceamento Em uma analogia com LPs Permitem blocos balanceado, e.g., beginn endn ou {n }n Permitem parênteses balanceados (n )n Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 180 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Derivação Aplicação consecutiva de regras Definição de regra (!) 6= Aplicação de regra ()) v )⇤ w w é derivável a partir de v aplicando 0 ou mais regras v )+ w w é derivável a partir de v aplicando 1 ou mais regras v )i w w é derivável a partir de v aplicando i regras Portanto: Uma palavra w 2 (V [ ⌃)⇤ é uma forma sentencial se S )⇤ w Uma palavra w 2 ⌃⇤ é uma sentença se S )⇤ w L(G) = {w 2 ⌃⇤ | S )⇤ w} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 181 / 468
  • 61.
    Linguagens Livres deContexto – Gramática Livre de Contexto Exemplos Definir GLCs para as seguintes linguagens: 1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤ | w = wR } 2 Palavras sobre {a, b} com tamanho ímpar, i.e., L = {w 2 {a, b}⇤ | |w| (mod 2) = 1} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplos Definir GLCs para as seguintes linguagens: 1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤ | w = wR } S ! aSa | bSb | a | b | 2 Palavras sobre {a, b} com tamanho ímpar, i.e., L = {w 2 {a, b}⇤ | |w| (mod 2) = 1} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplos Definir GLCs para as seguintes linguagens: 1 Palíndromas sobre {a, b}, i.e., L = {w 2 {a, b}⇤ | w = wR } S ! aSa | bSb | a | b | 2 Palavras sobre {a, b} com tamanho ímpar, i.e., L = {w 2 {a, b}⇤ | |w| (mod 2) = 1} S ! A | a | b A ! aaS | abS | baS | bbS Essa linguagem é, de fato, livre de contexto? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 182 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exercícios Definir GLCs para as seguintes linguagens: 1 L = {an bm an | m > 0 e n > 0} 2 L = {an bm cm d2n | m > 0 e n 0} 3 L = {an bm | 0  n  m  2n} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 183 / 468
  • 62.
    Linguagens Livres deContexto Gramática Livre de Contexto Recursividade Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 184 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Recursividade Uma regra A ! uAv é dita ser recursiva Uma regra A ! Av é dita ser recursiva à esquerda Uma regra A ! uA é dita ser recursiva à direita Tipo de Derivações Derivações mais à esquerda (usada por analisadores sintáticos descendentes) Sempre trocam o V mais à esquerda da forma sentencial Derivações mais à direita Sempre trocam o V mais à direita da forma sentencial Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 185 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplo Assuma a seguinte GLC: S ! AA A ! AAA | bA | Ab | a Possíveis derivações para palavra ababaa: S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa S ) AA ) AAAA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa ) Ababaa ) ababaa S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa ) ababAa ) ababaa Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplo Assuma a seguinte GLC: S ! AA A ! AAA | bA | Ab | a Possíveis derivações para palavra ababaa: S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa (derivação mais à esq.) S ) AA ) AAAA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa (derivação mais à esq.) S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa ) Ababaa ) ababaa (derivação mais à dir.) S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa ) ababAa ) ababaa (só derivação) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468
  • 63.
    Linguagens Livres deContexto – Gramática Livre de Contexto Exemplo Assuma a seguinte GLC: S ! AA A ! AAA | bA | Ab | a Possíveis derivações para palavra ababaa: S ) AA ) aA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa (derivação mais à esq.) S ) AA ) AAAA ) aAAA ) abAAA ) abaAA ) ababAA ) ababaA ) ababaa (derivação mais à esq.) S ) AA ) Aa ) AAAa ) AAbAa ) AAbaa ) AbAbaa ) Ababaa ) ababaa S ) AA ) aA ) aAAA ) aAAa ) abAAa ) abAbAa ) ababAa ) ababaa Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 186 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Teorema Seja G uma GLC. Uma palavra w pertence a L(G) sse existe uma derivação mais à esquerda para w a partir de S Prova pode ser encontrada em Sudkamp [6] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 187 / 468 Linguagens Livres de Contexto Gramática Livre de Contexto Árvore de Derivação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 188 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Derivação de palavras em uma árvore Partindo do símbolo inicial como raíz Terminando em símbolos terminais como folhas Conveniente em muitas aplicações Compiladores Processadores de texto Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 189 / 468
  • 64.
    Linguagens Livres deContexto – Gramática Livre de Contexto Árvore de Derivação – Definição Raíz: símbolo inicial Vértices interiores: variáveis Se A é um vértice interior e X1, X2, ..., Xn são “filhos” de A A ! X1, X2, ..., Xn é uma produção da gramática X1, X2, ..., Xn são ordenados da esquerda para a direita Folha: terminal ou símbolo vazio Se vazio: único filho de seu pai (A ! ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 190 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplo #1 GLC: S ! aSb | Palavra: aabb S a S b a bS Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 191 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplo #2 GLC: E ! E + E | E ⇤ E | (E) | id Palavra: id + id * id E E + E id E ⇤ E id id Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 192 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Exemplo #2 GLC: E ! E + E | E ⇤ E | (E) | id Palavra: id + id * id E E + E id E ⇤ E id id Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 192 / 468 Algum problema com a GLC ou com a árvore?
  • 65.
    Linguagens Livres deContexto Gramática Livre de Contexto Ambiguidade Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 193 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade Uma GLC G é ambígua se existir uma palavra w em L(G) que possua duas derivações mais à esquerda diferentes o que significa duas árvores de derivação diferentes Exemplo: L(G) = a+ Exemplo de gramática ambígua para L(G): S ! aS | Sa | a Ambiguidade para aa: Exemplo de gramática não-ambígua para L(G): Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade Uma GLC G é ambígua se existir uma palavra w em L(G) que possua duas derivações mais à esquerda diferentes o que significa duas árvores de derivação diferentes Exemplo: L(G) = a+ Exemplo de gramática ambígua para L(G): S ! aS | Sa | a Ambiguidade para aa: S ) aS ) aa e S ) Sa ) aa Exemplo de gramática não-ambígua para L(G): Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade Uma GLC G é ambígua se existir uma palavra w em L(G) que possua duas derivações mais à esquerda diferentes o que significa duas árvores de derivação diferentes Exemplo: L(G) = a+ Exemplo de gramática ambígua para L(G): S ! aS | Sa | a Ambiguidade para aa: S ) aS ) aa e S ) Sa ) aa Exemplo de gramática não-ambígua para L(G): S ! aS | a (além de não-ambígua, é regular) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 194 / 468
  • 66.
    Linguagens Livres deContexto – Gramática Livre de Contexto Ambiguidade – Exemplo #1 Assuma a seguinte GLC G: S ! aSb | aSbb | Pergunta-se: Essa GLC é ambígua? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Exemplo #1 Assuma a seguinte GLC G: S ! aSb | aSbb | Pergunta-se: Essa GLC é ambígua? Sim. Assuma w = aabbb, logo: S ) aSb ) aaSbbb ) aabbb S ) aSbb ) aaSbbb ) aabbb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Exemplo #1 Assuma a seguinte GLC G: S ! aSb | aSbb | Pergunta-se: Essa GLC é ambígua? Sim. Assuma w = aabbb, logo: S ) aSb ) aaSbbb ) aabbb S ) aSbb ) aaSbbb ) aabbb Gramática equivalentemente não ambígua: S ! aSb | A | A ! aAbb | abb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 195 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Exemplo #2 Assuma a seguinte GLC G usada reconhecer expressões aritméticas em um analisador sintático E ! E + E | E ⇤ E | (E) | id Pergunta-se: Essa GLC é ambígua? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 196 / 468
  • 67.
    Linguagens Livres deContexto – Gramática Livre de Contexto Ambiguidade – Exemplo #2 Assuma a seguinte GLC G usada reconhecer expressões aritméticas em um analisador sintático E ! E + E | E ⇤ E | (E) | id Pergunta-se: Essa GLC é ambígua? Sim. Assuma w = id + id ⇤ id, logo: E ) E + E ) id + E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id E ) E ⇤ E ) E + E ⇤ E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 196 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Exemplo #2 – Árvores de Derivação GLC: E ! E + E | E ⇤ E | (E) | id Derivações: E ) E + E ) id + E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id E ) E ⇤ E ) E + E ⇤ E ) id + E ⇤ E ) id + id ⇤ E ) id + id ⇤ id E E + E id E ⇤ E id id E E⇤E idE+E idid Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 197 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Exemplo #2 – Gramática equivalentemente não ambígua Deve definir a prioridade de operadores: E ! E + T | T T ! T ⇤ F | F F ! (E) | id É possível duas derivações mais à esquerda para id + id ⇤ id? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 198 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Indecibilidade O problema de determinar se uma GLC arbitrária é ambígua é indecidível Portanto, isso significa que ... Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 199 / 468
  • 68.
    Linguagens Livres deContexto – Gramática Livre de Contexto Para refletir! Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤: S ! abSA | A ! Aa | Pergunta-se: Essa GLC é ambígua? Pergunta-se: Essa GLC gera uma LLC? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Para refletir! Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤: S ! abSA | A ! Aa | Pergunta-se: Essa GLC é ambígua? Não Pergunta-se: Essa GLC gera uma LLC? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Para refletir! Seja a seguinte GLC que gere { } [ {ab}{ab}⇤{a}⇤: S ! abSA | A ! Aa | Pergunta-se: Essa GLC é ambígua? Não Pergunta-se: Essa GLC gera uma LLC? Então, ela gera, de fato, uma LR. No entanto, LR ⇢ LLC Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 200 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Gramáticas Inerentemente ambíguas Maioria das LLC podem ser geradas por uma GLC não ambígua No entanto... Nem toda LLC pode ser gerada por uma GLC não ambígua Tais LLC são inerentemente ambíguas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 201 / 468
  • 69.
    Linguagens Livres deContexto – Gramática Livre de Contexto Ambiguidade – Gramáticas Inerentemente ambíguas Exemplo clássico: L= {an bm cm dn ou an bn cm dm | m 1 e n 1} Crie uma GLC para L Mostre a derivação de, e.g., aabbccdd Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 202 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Ambiguidade – Gramáticas Inerentemente ambíguas Exemplo clássico: L= {an bm cm dn ou an bn cm dm | m 1 e n 1} Crie uma GLC para L Mostre a derivação de, e.g., aabbccdd G(L): S ! aNd | aXbcYd N ! aNd | bMc M ! bMc | X ! aXb | Y ! cYd | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 202 / 468 Linguagens Livres de Contexto Gramática Livre de Contexto Backus-Nahur Form (BNF) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 203 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto Notação Backus-Nahur Form (BNF) Proposta em ⇠1960 Notação normalmente utilizada para definir GLCs de LPs Notação BNF: “!” é substituído por “::=” (ou apenas “:”) Terminais: negrito (ou começando com minúsculas) Variáveis: < . . . > (ou começando com maiúsculas) Não se usa {A} denota zero ou mais repetições de A [A] denota que A é opcional Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 204 / 468
  • 70.
    Linguagens Livres deContexto – Gramática Livre de Contexto BNF de Java The Java Language Specification (http://java.sun.com/docs/books/jls/) Fragmento de exemplo: IfThenStatement: if ( Expression ) Statement IfThenElseStatement: if ( Expression ) StatementNoShortIf else Statement BasicForStatement: for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 205 / 468 Linguagens Livres de Contexto – Gramática Livre de Contexto BNF de DCL (não apenas LP) 1 S ::= ModDecl | DCDecl 3 ModDecl ::= module ModId : ModDef { , ModDef} ( ModDecl | DCDecl ) 5 ModDef ::= ClassName | ClassName+ | Pkg* | Pkg** | RegExpr 7 DCDecl ::= only RefMod can-Type { , can-Type} RefMod [ DCDecl ] | 9 RefMod cannot-Type {, cannot-Type} RefMod [DCDecl] | RefMod can-Type-only {, can-Type-only} RefMod [DCDecl] | 11 RefMod must-MustType { , must-MustType } RefMod [ DCDecl ] 13 RefMod ::= ( ModDef | ModId ) { , RefMod} 15 MustType ::= extend | implement | derive | throw | useannotation 17 Type ::= access | declare | handle | create | depend | MustType Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 206 / 468 Linguagens Livres de Contexto Formas Normais Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 207 / 468 Linguagens Livres de Contexto – Formas Normais Problema GLCs são muito flexíveis Não existem restrições na forma do lado direito das regras Isso facilita a construção das gramáticas Embora dificulte a construção de analisadores sintáticos Formas Normais (FN) Impõem restrições no lado direito das regras de uma GLC Mas não reduzem o poder de expressão de GLC Geradas automaticamente (via algoritmo) Serão abordadas: FN de Chomsky FN de Greibach Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 208 / 468
  • 71.
    Linguagens Livres deContexto – Formas Normais FN de Chomsky Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas regras têm uma das seguintes formas: A ! BC onde B, C 2 V {S} A ! a onde a 2 ⌃ S ! Propriedade: árvores de derivação são sempre binárias Não é complexo converter uma GLC para a FN de Chomsky quando a mesma: Símbolo inicial não é recursivo (S 6! ↵S ) É essencialmente não-contrátil (só S ! ) Não possui regras de cadeia (A 6! B) Não possui símbolos inúteis (8B | B ) ⌃+ e S ) ↵B ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 209 / 468 Linguagens Livres de Contexto – Formas Normais FN de Chomsky Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas regras têm uma das seguintes formas: A ! BC onde B, C 2 V {S} A ! a onde a 2 ⌃ S ! Propriedade: árvores de derivação são sempre binárias Não é complexo converter uma GLC para a FN de Chomsky quando a mesma: Símbolo inicial não é recursivo (S 6! ↵S ) ? É essencialmente não-contrátil (só S ! ) ? Não possui regras de cadeia (A 6! B) ? Não possui símbolos inúteis (8B | B ) ⌃+ e S ) ↵B ) ? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 209 / 468 Linguagens Livres de Contexto – Formas Normais Forma normal não é minimização! (Parte 1) Assuma a GLC clássica: S ! aSb | Símbolo inicial não recursivo: (S 6! ↵S ) S0 ! S S ! aSb | Essencialmente não-contrátil: (só S ! ) S0 ! S | S ! aSb | ab Sem regras de cadeia: (A 6! B) S0 ! aSb | ab | S ! aSb | ab Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 210 / 468 Linguagens Livres de Contexto – Formas Normais Forma normal não é minimização! (Parte 1 ainda) Sem regras de cadeia: (A 6! B) S0 ! aSb | ab | S ! aSb | ab Sem símbolos inúteis (que não geram terminais): (8B | B ) ⌃+ ) Todos geram terminais! Sem símbolos inúteis (que não são alcançáveis): (8B | S ) ↵B ) Todos são alcançáveis! Forma Normal de Chomsky (FNC): S0 ! AX | AB | X ! SB S ! AX | AB A ! a B ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 211 / 468
  • 72.
    Linguagens Livres deContexto – Formas Normais FN de Greibach Uma GLC G = (V, ⌃, P, S) está na FN de Greibach se suas regras têm uma das seguintes formas: A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S} A ! a S ! 1o passo: Transformar GLC para FN de Chomsky 2o passo: Em um futuro próximo... Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 212 / 468 Linguagens Livres de Contexto – Formas Normais Forma normal não é minimização! (Parte 2) Forma Normal de Chomsky (FNC): S0 ! AX | AB | X ! SB S ! AX | AB A ! a B ! b Forma Normal de Greibach (FNG): S0 ! aX | aB | X ! aXB | aBB S ! aX | aB B ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 213 / 468 Linguagens Livres de Contexto Transformações de Gramática Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 214 / 468 Linguagens Livres de Contexto – Transformações de Gramática Transformações de Gramática Para alcançar uma FN, é importante que transformações sejam realizadas na GLC As quais adicionam, modificam ou eliminam regras Veremos uma série de transformações em GLC: Remoção de recursividade no símbolo inicial (S 6! ↵S ) Eliminação de regras (NULLABLE, só S ! ) Eliminação de regras de cadeia (CHAIN, A 6! B) Remoção de símbolos inúteis [TERM, 8B | B )⇤ ⌃+ e REACH, 8B | S )⇤ ↵B ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 215 / 468
  • 73.
    Linguagens Livres deContexto Transformações de Gramática Remoção de recursividade no símbolo inicial Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 216 / 468 Linguagens Livres de Contexto – Transformações de Gramática Remoção de recursividade no símbolo inicial Símbolo inicial (S) deve se limitar a iniciar derivações i.e., S não deve ser uma variável recursiva Não deve ser possível ter S )⇤ ↵S Assuma uma GLC G = (V, ⌃, P, S) onde S é recursivo, logo: G0 = (V [ {S0 }, ⌃, P [ {S0 ! S}, S0 ) L(G0 ) = L(G) Símbolo inicial S0 de G0 não é mais recursivo Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 217 / 468 Linguagens Livres de Contexto – Transformações de Gramática Remoção de recursividade no símbolo inicial (V, ⌃, P, S) =) (V [ {S0}, ⌃, P [ {S0 ! S}, S0) Exemplo S ! aS | AB | AC A ! aA | B ! bB | bS C ! cC | + Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 218 / 468 Linguagens Livres de Contexto – Transformações de Gramática Remoção de recursividade no símbolo inicial (V, ⌃, P, S) =) (V [ {S0}, ⌃, P [ {S0 ! S}, S0) Exemplo S ! aS | AB | AC A ! aA | B ! bB | bS C ! cC | + S0 ! S S ! aS | AB | AC A ! aA | B ! bB | bS C ! cC | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 218 / 468
  • 74.
    Linguagens Livres deContexto Transformações de Gramática Eliminação de regras Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 219 / 468 Linguagens Livres de Contexto – Transformações de Gramática Eliminação de regras Variável anulável: V que pode derivar Se A é anulável, então: A )⇤ Gramática não-contrátil: Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! ) Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫| Gramática essencialmente não-contrátil: Gramática não-contrátil, mas admite uma regra : S ! Todas as derivações são não-contráteis, exceto S ) Exemplo: S ! aAb A ! aA | B B ! bB | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468 Linguagens Livres de Contexto – Transformações de Gramática Eliminação de regras Variável anulável: V que pode derivar Se A é anulável, então: A )⇤ Gramática não-contrátil: Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! ) Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫| Gramática essencialmente não-contrátil: Gramática não-contrátil, mas admite uma regra : S ! Todas as derivações são não-contráteis, exceto S ) Exemplo: S ! aAb A ! aA | B Variáveis anuláveis? B ! bB | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468 Linguagens Livres de Contexto – Transformações de Gramática Eliminação de regras Variável anulável: V que pode derivar Se A é anulável, então: A )⇤ Gramática não-contrátil: Não possui variáveis anuláveis, i.e., ¬9A 2 V (A ! ) Assim, não diminuem tamanho forma sentencial, i.e., |µ|  |⌫| Gramática essencialmente não-contrátil: Gramática não-contrátil, mas admite uma regra : S ! Todas as derivações são não-contráteis, exceto S ) Exemplo: S ! aAb A ! aA | B Variáveis anuláveis? B e A B ! bB | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 220 / 468
  • 75.
    Linguagens Livres deContexto – Transformações de Gramática Algoritmo NULLABLE (estratégia bottom-up) Entrada: Uma GLC G = (V, ⌃, P, S) Saída: Conjunto de variáveis anuláveis (NULLABLE) NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 221 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA A ! aAa | B | C B ! bB | b C ! cC | NULLABLE NULL PREV Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468 NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA A ! aAa | B | C B ! bB | b C ! cC | NULLABLE NULL PREV (0) {C} ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468 NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA A ! aAa | B | C B ! bB | b C ! cC | NULLABLE NULL PREV (0) {C} ; (1) {C, A} {C} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468 NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV
  • 76.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! ACA A ! aAa | B | C B ! bB | b C ! cC | NULLABLE NULL PREV (0) {C} ; (1) {C, A} {C} (2) {C, A, S} {C, A} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468 NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA A ! aAa | B | C B ! bB | b C ! cC | NULLABLE NULL PREV (0) {C} ; (1) {C, A} {C} (2) {C, A, S} {C, A} (3) {C, A, S} {C, A, S} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 222 / 468 NULL = {A | {A ! } 2 P} repita PREV = NULL para cada A 2 V faça se A ! w e w 2 PREV⇤ faça NULL = NULL [ {A} até NULL == PREV Linguagens Livres de Contexto – Transformações de Gramática Técnica para eliminação de regras Calcular conjunto de variáveis anuláveis e eliminar regras que levam diretamente a Adicionar regras na gramática onde a ocorrência de variáveis anuláveis é omitida, por exemplo: Assuma GLC com a seguinte regra: A ! BABa Assuma que B é anulável Logo, as seguintes regras devem ser adicionadas: A ! ABa A ! BAa A ! Aa Se 2 L(G), então regra S ! deve estar presente Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 223 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo #1 S ! ACA A ! aAa | B | C B ! bB | b C ! cC | + variáveis anuláveis: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468
  • 77.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo #1 S ! ACA A ! aAa | B | C B ! bB | b C ! cC | + variáveis anuláveis: {S, A, C} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo #1 S ! ACA A ! aAa | B | C B ! bB | b C ! cC | + variáveis anuláveis: {S, A, C} S ! ACA | AC | AA | CA | A | C | A ! aAa | B | C | aa B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 224 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo #2 L(G) = a⇤b⇤c⇤ G : S ! ABC A ! aA | B ! bB | C ! cC | + variáveis anuláveis: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo #2 L(G) = a⇤b⇤c⇤ G : S ! ABC A ! aA | B ! bB | C ! cC | + variáveis anuláveis: {S, A, B, C} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468
  • 78.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo #2 L(G) = a⇤b⇤c⇤ G : S ! ABC A ! aA | B ! bB | C ! cC | + variáveis anuláveis: {S, A, B, C} S ! ABC | AB | BC | AC | A | B | C | A ! aA | a B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 225 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exercício de Fixação G : S ! aBC | Ba A ! aA | B ! AC C ! cA | b | A Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 226 / 468 Linguagens Livres de Contexto Transformações de Gramática Eliminação de regras de cadeia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 227 / 468 Linguagens Livres de Contexto – Transformações de Gramática Eliminação de regras de cadeia Uma regra na forma A ! B Não aumenta tamanho da forma sentencial Não gera símbolos terminais Apenas renomeia uma variável Tais regras são chamadas regras de cadeia (chain rules) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 228 / 468
  • 79.
    Linguagens Livres deContexto – Transformações de Gramática Eliminação de regras de cadeia – Exemplo Suponha a seguinte gramática: A ! aA | a | B B ! bB | b | C Eliminando a cadeia A ! B: A ! aA | a | bB | b | C B ! bB | b | C Infelizmente, uma nova cadeia apareceu: A ! C Portanto, o procedimento deve ser reaplicado Até não mais restarem cadeias Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 229 / 468 Linguagens Livres de Contexto – Transformações de Gramática Algoritmo CHAIN Entrada: Uma GLC essencialmente não contrátil G = (V, ⌃, P, S) e uma variável qualquer A 2 V Saída: Conjunto de variáveis deriváveis a partir de A aplicando-se apenas regras de cadeia CHAIN(A) = {A} PREV = ; repita NEW = CHAIN(A) PREV PREV = CHAIN(A) para cada B 2 NEW faça para cada B ! C faça CHAIN(A) = CHAIN(A) [ {C} até CHAIN(A) == PREV Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 230 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; (1) (2) (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) (2) (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
  • 80.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} (2) (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} {A, C} (2) (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} {A, C} (2) {S, A, C, B} {S, A, C} (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} {A, C} (2) {S, A, C, B} {S, A, C} {B} (3) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468
  • 81.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} {A, C} (2) {S, A, C, B} {S, A, C} {B} (3) {S, A, C, B} {S, A, C, B} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) CHAIN(S) PREV NEW (0) {S} ; {S} (1) {S, A, C} {S} {A, C} (2) {S, A, C, B} {S, A, C} {B} (3) {S, A, C, B} {S, A, C, B} – Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 231 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c Resultado do algoritmo aplicado em todas as variáveis CHAIN(S) = {S, A, C, B} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 232 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
  • 82.
    Linguagens Livres deContexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | A ! aAa | aa B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | | aAa | aa A ! aAa | aa B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | | aAa | aa | bB | b A ! aAa | aa B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c A ! aAa | aa B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468
  • 83.
    Linguagens Livres deContexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c A ! aAa | aa | bB | b B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! ACA | CA | AA | AC | A | C | A ! aAa | aa | B | C B ! bB | b C ! cC | c CHAIN(S) = {S, A, B, C} CHAIN(A) = {A, B, C} CHAIN(B) = {B} CHAIN(C) = {C} Novas Regras A ! w onde B ! w 2 P, w 62 V e B 2 CHAIN(A) Nova Gramática sem Regras de Cadeia S ! ACA | CA | AA | AC | | aAa | aa | bB | b | cC | c A ! aAa | aa | bB | b | cC | c B ! bB | b C ! cC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 233 / 468 Linguagens Livres de Contexto – Transformações de Gramática Resumo GLCs essencialmente não-contráteis e sem regras de cadeia tem uma das seguintes formas: S ! A ! a A ! w onde w 2 (V [ ⌃)⇤ e |w| 2 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 234 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exercício de Fixação G : S ! aS | b | A A ! aA | a | C B ! a | b C ! c | B D ! dD | B Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 235 / 468
  • 84.
    Linguagens Livres deContexto Transformações de Gramática Remoção de símbolos inúteis Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 236 / 468 Linguagens Livres de Contexto – Transformações de Gramática Remoção de símbolos inúteis Variável inútil não aparece em derivações que geram palavras não contribui para geração de palavras Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 237 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo (Qual é a L(G)?) S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b Símbolos Inúteis Um símbolo x 2 (V [ ⌃) é útil se: S )⇤ uxv )⇤ w, onde u, v 2 (V [ ⌃)⇤ e w 2 ⌃⇤ Um terminal é útil quando ocorre em uma palavras w 2 L(G) Uma variável A é útil se existe: S )⇤ uAv )⇤ w, w 2 L(G) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 238 / 468 Linguagens Livres de Contexto – Transformações de Gramática Algoritmo TERM Entrada: Uma GLC G = (V, ⌃, P, S) Saída: Conjunto de variáveis que geram terminais (TERM) TERM = {A | existe uma regra A ! w 2 P , com w 2 ⌃⇤ } repita PREV = TERM para cada A 2 V faça se A ! w 2 P e w 2 (PREV [ ⌃)⇤ então TERM = TERM [ A até PREV == TERM Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 239 / 468
  • 85.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b TERM TERM PREV Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b TERM TERM PREV (0) {B, F} ; Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b TERM TERM PREV (0) {B, F} ; (1) {B, F, A, S} {B, F} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b TERM TERM PREV (0) {B, F} ; (1) {B, F, A, S} {B, F} (2) {B, F, A, S, E} {B, F, A, S} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468
  • 86.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b TERM TERM PREV (0) {B, F} ; (1) {B, F, A, S} {B, F} (2) {B, F, A, S, E} {B, F, A, S} (3) {B, F, A, S, E} {B, F, A, S, E} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 240 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b Variáveis que não geram terminal V {B, F, A, S, E} = {C, D} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! AC | BS | B A ! aA | aF B ! CF | b C ! cC | D D ! aD | BD | C E ! aA | BSA F ! bB | b Variáveis que não geram terminal V {B, F, A, S, E} = {C, D} Nova Gramática sem variáveis que não geram terminal S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 241 / 468
  • 87.
    Linguagens Livres deContexto – Transformações de Gramática Algoritmo REACH Entrada: Uma GLC G = (V, ⌃, P, S) Saída: Conjunto de variáveis alcançáveis a partir de S (REACH) REACH = {S} PREV = ; repita NEW = REACH PREV PREV = REACH para cada A 2 NEW faça para cada A ! w faça adicione todas as variáveis de w em REACH até REACH == PREV Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 242 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; (1) (2) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; {S} (1) (2) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; {S} (1) {S, B} {S} (2) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468
  • 88.
    Linguagens Livres deContexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; {S} (1) {S, B} {S} {B} (2) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; {S} (1) {S, B} {S} {B} (2) {S, B} {S, B} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exemplo S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b REACH REACH PREV NEW (0) {S} ; {S} (1) {S, B} {S} {B} (2) {S, B} {S, B} – Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 243 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468
  • 89.
    Linguagens Livres deContexto – Transformações de Gramática Gramática Original S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b Variáveis inalcançáveis: V {S, B} = {A, E, F} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468 Linguagens Livres de Contexto – Transformações de Gramática Gramática Original S ! BS | B A ! aA | aF B ! b E ! aA | BSA F ! bB | b Variáveis inalcançáveis: V {S, B} = {A, E, F} Nova Gramática sem variáveis inalcançáveis (Qual a L(G)?) S ! BS | B B ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 244 / 468 Linguagens Livres de Contexto – Transformações de Gramática Exercício de Fixação (TERM e REACH) G : S ! aB | aA | bcC A ! aA | ABA B ! bB | b C ! cC | BEA D ! aE | bEc | d E ! cD | cEb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 245 / 468 Linguagens Livres de Contexto – Transformações de Gramática Para remoção de variáveis inúteis: TERM e REACH (nesta ordem) G : S ! a | AB A ! b B ! aB TERM = {S, A} GT : S ! a A ! b REACH = {S} GR : S ! a Se algoritmos forem aplicados na ordem inversa, o resultado seria incorreto! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 246 / 468
  • 90.
    Linguagens Livres deContexto – Transformações de Gramática Se fosse na ordem errada: G : S ! a | AB A ! b B ! aB REACH = {S, A, B} GR : S ! a | AB A ! b B ! aB TERM = {S, A} GT : S ! a A ! b Bem esquisito! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 247 / 468 Linguagens Livres de Contexto Forma Normal de Chomsky Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 248 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky FN de Chomsky Uma GLC G = (V, ⌃, P, S) está na FN de Chomsky se suas regras têm uma das seguintes formas: A ! BC onde B, C 2 V {S} A ! a onde a 2 ⌃ S ! Propriedade: árvores de derivação são sempre binárias Não é complexo converter uma GLC para a FN de Chomsky quando a mesma: Símbolo inicial não é recursivo (S 6! ↵S ) É essencialmente não-contrátil (só S ! ) Não possui regras de cadeia (A 6! B) Não possui símbolos inúteis (8B | B ) ⌃+ e S ) ↵B ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 249 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #1 A ! bDcF FN de Chomsky: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468
  • 91.
    Linguagens Livres deContexto – Forma Normal de Chomsky Exemplo #1 A ! bDcF FN de Chomsky: Primeira transformação: A ! B0DC0F B0 ! b C0 ! c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #1 A ! bDcF FN de Chomsky: Primeira transformação: A ! B0DC0F B0 ! b C0 ! c Segunda transformação: A ! B0T1 B0 ! b C0 ! c T1 ! DT2 T2 ! C0F Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 250 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #2 S ! aABC | a A ! aA | a B ! bcB | bc C ! cC | c FN de Chomsky: Já satisfaz pré-condições: Símbolo inicial não é recursivo (S 6! ↵S ) É essencialmente não-contrátil (só S ! ) Não possui regras de cadeia (A 6! B) Não possui símbolos inúteis (8B | B ) ⌃+ e S ) ↵B ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 251 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #2 S ! aABC | a A ! aA | a B ! bcB | bc C ! cC | c FN de Chomsky: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 252 / 468
  • 92.
    Linguagens Livres deContexto – Forma Normal de Chomsky Exemplo #2 S ! aABC | a A ! aA | a B ! bcB | bc C ! cC | c FN de Chomsky: S ! A0T1 | a A0 ! a T1 ! AT2 T2 ! BC A ! A0A | a B ! B0T3 | B0C0 T3 ! C0B C ! C0C | c B0 ! b C0 ! c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 252 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #3 S ! aXb | ab X ! aXb | ab FN de Chomsky: Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 253 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exemplo #3 S ! aXb | ab X ! aXb | ab FN de Chomsky: S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 253 / 468 Linguagens Livres de Contexto – Forma Normal de Chomsky Exercício de Fixação (apenas o último passo da FNC) G : S ! aA | bC | A ! bAba | ba C ! cCAba | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 254 / 468
  • 93.
    Linguagens Livres deContexto – Forma Normal de Chomsky Exercício de Fixação (todos os passos para chegar à FNC) G : S ! aAb | bAa | B | aS A ! bB | B ! cBc | Ba | aB | D C ! a | b | c D ! aDC E ! BB | F F ! FEB Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 255 / 468 Linguagens Livres de Contexto Remoção de rec. à esquerda Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 256 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Remoção de recursividade à esquerda Recursividade direta à esquerda pode produzir “loops infinitos” em analisadores sintáticos descendentes (top-down) Exemplo: S ! Aa A ! Aa | b S ) Aa ) Aaa ) Aaaa ) . . . Suponha a regra genérica diretamente recursiva à esq.: A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n Regra equivalente não-recursiva à esquerda: A ! ⌫1 | ⌫2 | . . . | ⌫n | ⌫1Z | ⌫2Z | . . . | ⌫nZ Z ! µ1Z | µ2Z | . . . | µmZ | µ1 | µ2 | . . . | µm Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 257 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #1 A ! Aa | b + remoção de recursividade à esq. Exemplo #2 A ! Aa | Ab | b | c + remoção de recursividade à esq. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
  • 94.
    Linguagens Livres deContexto – Remoção de rec. à esquerda Exemplo #1 A ! Aa | b + remoção de recursividade à esq. A ! bZ | b Exemplo #2 A ! Aa | Ab | b | c + remoção de recursividade à esq. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #1 A ! Aa | b + remoção de recursividade à esq. A ! bZ | b Z ! aZ | a Exemplo #2 A ! Aa | Ab | b | c + remoção de recursividade à esq. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #1 A ! Aa | b + remoção de recursividade à esq. A ! bZ | b Z ! aZ | a Exemplo #2 A ! Aa | Ab | b | c + remoção de recursividade à esq. A ! bZ | cZ | b | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #1 A ! Aa | b + remoção de recursividade à esq. A ! bZ | b Z ! aZ | a Exemplo #2 A ! Aa | Ab | b | c + remoção de recursividade à esq. A ! bZ | cZ | b | c Z ! aZ | bZ | a | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 258 / 468
  • 95.
    Linguagens Livres deContexto – Remoção de rec. à esquerda Exemplo #3 A ! AB | BA | a B ! b | c + remoção de recursividade à esq. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #3 A ! AB | BA | a B ! b | c + remoção de recursividade à esq. A ! BAZ | aZ | BA | a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #3 A ! AB | BA | a B ! b | c + remoção de recursividade à esq. A ! BAZ | aZ | BA | a Z ! BZ | B Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #3 A ! AB | BA | a B ! b | c + remoção de recursividade à esq. A ! BAZ | aZ | BA | a Z ! BZ | B B ! b | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 259 / 468
  • 96.
    Linguagens Livres deContexto – Remoção de rec. à esquerda Exemplo #4 A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤ + remoção de recursividade à esq. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #4 A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤ + remoção de recursividade à esq. A ! bbZ | bZ | bb | b – gera (b [ bb)(Z [ ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exemplo #4 A ! Aa | Aab | bb | b – gera (b [ bb)(a [ ab)⇤ + remoção de recursividade à esq. A ! bbZ | bZ | bb | b – gera (b [ bb)(Z [ ) Z ! aZ | abZ | a | ab – gera (a [ ab)+ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 260 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Exercício de Fixação G : A ! aA | ABc | ccA Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 261 / 468
  • 97.
    Linguagens Livres deContexto – Remoção de rec. à esquerda Remoção de Recursão à Esquerda Problema: recursão à esquerda indireta A ! Bu B ! Av Recursão indireta também pode gerar “loops infinitos” Solução: Forma Normal de Greibach Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 262 / 468 Linguagens Livres de Contexto – Remoção de rec. à esquerda Observação Relevante Removemos recursividade como a seguir: G: A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n G’ (sem rec. à esquerda): A ! ⌫1 | ⌫2 | . . . | ⌫n | ⌫1Z | ⌫2Z | . . . | ⌫nZ Z ! µ1Z | µ2Z | . . . | µmZ | µ1 | µ2 | . . . | µm Outros autores (e.g., Aho) removem como a seguir: G: A ! Aµ1 | Aµ2 | . . . | Aµm | ⌫1 | ⌫2 | . . . | ⌫n G’ (sem rec. à esquerda): A ! ⌫1Z | ⌫2Z | . . . | ⌫nZ Z ! µ1Z | µ2Z | . . . | µmZ | Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 263 / 468 Linguagens Livres de Contexto Forma Normal de Greibach Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 264 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach Uma GLC G = (V, ⌃, P, S) está na FN de Greibach se suas regras têm uma das seguintes formas: A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S}] A ! a S ! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 265 / 468
  • 98.
    Linguagens Livres deContexto – Forma Normal de Greibach FN de Greibach 1o passo: Transformar GLC para FN de Chomsky 2o passo: Ordenar variáveis (i.e., cada variável ganha um número) S = 1, A = 2, B = 3, . . . Resolver, em ordem, as recursões recursões diretas e indiretas 3o passo: regras das seguintes formas S ! A ! aw A ! Bw onde w 2 V⇤ e num(B) > num(A) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 266 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach Exemplo S ! AB | A ! AB | CB | a B ! AB | b C ! AC | c Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 267 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[1] (S = 1; A = 2; B = 3; C = 4) Eliminando recursão à esquerda em A: S ! AB | – ok, A > S A ! CBR1 | aR1 | CB | a Aantes ! AB | CB | a – ok, C > A B ! AB | b – não ok C ! AC | c – não ok R1 ! BR1 | B Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 268 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[2] (S = 1; A = 2; B = 3; C = 4) Movendo lado direito de A para regra B ! AB e C ! AC S ! AB | A ! CBR1 | aR1 | CB | a B ! CBR1B | aR1B | CBB | aB | b Bantes ! AB | b – ok, C > B C ! CBR1C | aR1C | CBC | aC | c Cantes ! AC | c – rec. esq. R1 ! BR1 | B Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 269 / 468
  • 99.
    Linguagens Livres deContexto – Forma Normal de Greibach FN de Greibach[3] (S = 1; A = 2; B = 3; C = 4) Eliminando recursão à esquerda em C: S ! AB | – ok 3opasso A ! CBR1 | aR1 | CB | a – ok 3opasso B ! CBR1B | aR1B | CBB | aB | b – ok 3opasso C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2 – ok 3opasso Cantes ! CBR1C | aR1C | CBC | aC | c R1 ! BR1 | B R2 ! BR1CR2 | BCR2 | BR1C | BC PS C já está na FN de Greibach Mas e B? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 270 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[4] (S = 1; A = 2; B = 3; C = 4) Movendo regra C para lado direito de B: S ! AB | A ! CBR1 | aR1 | CB | a B ! aR1B | aB | b | Bantes ! CBR1B | aR1B | CBB | aB | b aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2 R1 ! BR1 | B R2 ! BR1CR2 | BCR2 | BR1C | BC PS B agora também está na FN de Greibach Repetir o procedimento para A, S, R1 e R2 (nesta ordem) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 271 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[5] (S = 1; A = 2; B = 3; C = 4) Movendo regra C para lado direito de A: S ! AB | Aantes ! CBR1 | aR1 | CB | a A ! aR1CBR1 | aCBR1 | cBR1 | aR1CR2BR1 | aCR2BR1 | cR2BR1 | aR1 | aR1CB | aCB | cB | aR1CR2B | aCR2B | cR2B | a B ! aR1B | aB | b | aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2 R1 ! BR1 | B R2 ! BR1CR2 | BCR2 | BR1C | BC PS A agora também está na FN de Greibach Repetir o procedimento para S, R1 e R2 (nesta ordem) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 272 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[6] (S = 1; A = 2; B = 3; C = 4) Movendo regra A para lado direito de S: Santes ! AB | S ! aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1B | aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB | aB | A ! aR1CBR1 | aCBR1 | cBR1 | aR1CR2BR1 | aCR2BR1 | cR2BR1 | aR1 | aR1CB | aCB | cB | aR1CR2B | aCR2B | cR2B | a B ! aR1B | aB | b | aR1CBR1B | aCBR1B | cBR1B | aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1CBB | aCBB | cBB | aR1CR2BB | aCR2BB | cR2BB C ! aR1C | aC | c | aR1CR2 | aCR2 | cR2 R1 ! BR1 | B R2 ! BR1CR2 | BCR2 | BR1C | BC PS S agora também está na FN de Greibach Repetir o procedimento para R1 e R2 (nesta ordem) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 273 / 468
  • 100.
    Linguagens Livres deContexto – Forma Normal de Greibach FN de Greibach[7] (S = 1; A = 2; B = 3; C = 4) Movendo regra B para lado direito de R1 : S ! aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B | aR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB | aB | A ! aR1 CCBR1 | aCCBR1 | cCBR1 | aR1 CR2 CBR1 | aCR2 CBR1 | cR2 CBR1 | aR1 | aR1 CB | aCB | cB | aR1 CR2 B | aCR2 B | cR2 B | a B ! aR1 B | aB | b | aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB C ! aR1 C | aC | c | aR1 CR2 | aCR2 | cR2 R1 ! aR1 BR1 | aBR1 | bR1 | aR1 CBR1 BR1 | aCBR1 BR1 | cBR1 BR1 | aR1 CR2 BR1 BR1 | aCR2 BR1 BR1 | cR2 BR1 BR1 | aR1 CBBR1 | aCBBR1 | cBBR1 | aR1 CR2 BBR1 | aCR2 BBR1 | cR2 BBR1 aR1 B | aB | b | aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB R2 ! BR1 CR2 | BCR2 | BR1 C | BC PS R1 agora também está na FN de Greibach Repetir o procedimento para R2 (nesta ordem) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 274 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach FN de Greibach[8] (S = 1; A = 2; B = 3; C = 4) Movendo regra B para lado direito de R2 : S ! aR1 CCBR1 B | aCCBR1 B | cCBR1 B | aR1 CR2 CBR1 B | aCR2 CBR1 B | cR2 CBR1 B | aR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB | aB | A ! aR1 CCBR1 | aCCBR1 | cCBR1 | aR1 CR2 CBR1 | aCR2 CBR1 | cR2 CBR1 | aR1 | aR1 CB | aCB | cB | aR1 CR2 B | aCR2 B | cR2 B | a B ! aR1 B | aB | b | aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB C ! aR1 C | aC | c | aR1 CR2 | aCR2 | cR2 R1 ! aR1 BR1 | aBR1 | bR1 | aR1 CBR1 BR1 | aCBR1 BR1 | cBR1 BR1 | aR1 CR2 BR1 BR1 | aCR2 BR1 BR1 | cR2 BR1 BR1 | aR1 CBBR1 | aCBBR1 | cBBR1 | aR1 CR2 BBR1 | aCR2 BBR1 | cR2 BBR1 aR1 B | aB | b | aR1 CBR1 B | aCBR1 B | cBR1 B | aR1 CR2 BR1 B | aCR2 BR1 B | cR2 BR1 B | aR1 CBB | aCBB | cBB | aR1 CR2 BB | aCR2 BB | cR2 BB R2 ! aR1 BR1 CR2 | aBR1 CR2 | bR1 CR2 | aR1 CBR1 BR1 CR2 | aCBR1 BR1 CR2 | cBR1 BR1 CR2 | aR1 CR2 BR1 BR1 CR2 | aCR2 BR1 BR1 CR2 | cR2 BR1 BR1 CR2 | aR1 CBBR1 CR2 | aCBBR1 CR2 | cBBR1 CR2 | aR1 CR2 BBR1 CR2 | aCR2 BBR1 CR2 | cR2 BBR1 CR2 aR1 BCR2 | aBCR2 | bCR2 | aR1 CBR1 BCR2 | aCBR1 BCR2 | cBR1 BCR2 | aR1 CR2 BR1 BCR2 | aCR2 BR1 BCR2 | cR2 BR1 BCR2 | aR1 CBBCR2 | aCBBCR2 | cBBCR2 | aR1 CR2 BBCR2 | aCR2 BBCR2 | cR2 BBCR2 aR1 BR1 C | aBR1 C | bR1 C | aR1 CBR1 BR1 C | aCBR1 BR1 C | cBR1 BR1 C | aR1 CR2 BR1 BR1 C | aCR2 BR1 BR1 C | cR2 BR1 BR1 C | aR1 CBBR1 C | aCBBR1 C | cBBR1 C | aR1 CR2 BBR1 C | aCR2 BBR1 C | cR2 BBR1 C aR1 BC | aBC | bC | aR1 CBR1 BC | aCBR1 BC | cBR1 BC | aR1 CR2 BR1 BC | aCR2 BR1 BC | cR2 BR1 BC | aR1 CBBC | aCBBC | cBBC | aR1 CR2 BBC | aCR2 BBC | cR2 BBC Agora está na Forma Normal de Greibach (FNG)! =) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 275 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach Comentários Finais FN de Greibach: Gramáticas grandes (i.e., diversas regras) Gramáticas sem a simplicidade original Transformação de GLCs para FN de Greibach pode ser automatizada (via algoritmo descrito nos slides anteriores) Propriedades importante de GLC na FN de Greibach: Toda derivação adiciona um terminal no início da palavra que está sendo derivada Logo, não existe recursão à esquerda (direta ou indireta) Palavras de tamanho n > 0 são derivadas aplicando-se exatamente n regras Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 276 / 468 Linguagens Livres de Contexto – Forma Normal de Greibach Exercício de Fixação (apenas os passos da FNG) G : S ! AB | BA | a A ! AB | b | c B ! AB | BA | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 277 / 468
  • 101.
    Linguagens Livres deContexto Autômatos com Pilha Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 278 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha AFDs são incapazes de reconhecer aibi porque possuem uma “memória limitada” Memória de um AFD: seus estados, os quais são finitos Autômatos com Pilha (AP): AFND- + Pilha de tamanho infinito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 279 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômato com Pilha Não-Determinístico (APND) Um APND é uma sextupla (Q, ⌃, , , q0, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da pilha : Q x (⌃ [ ) x ( [ ) ! P(Q x ( [ )) = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Permite transições (qi, a, b) e (qi, a0, b0) compatíveis: É ND, i.e., (qi, a, B) = {[qj, C], [qk, D]} Uma palavra w 2 ⌃⇤ é dita ser aceita por um APND se, e somente se, existe uma computação que a consome e para em um estado final com pilha vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 280 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha Exemplo: (qi, a, A) = [qj, B] qi qj a A/B qi : estado atual a: símbolo a ser lido pela entrada A: símbolo no topo da pilha (a ser desempilhado) qj : novo estado B: novo topo da pilha (a ser empilhado) Se (estado== qi) && (entrada== a) && (topo == A) então Lê a da entrada Muda o estado atual de qi para qj Desempilha A do topo da pilha e empilha B Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 281 / 468
  • 102.
    Linguagens Livres deContexto – Autômatos com Pilha Autômatos com Pilha: Transições Transições são permitidas Exemplo: (qi, a, A) = [qj, B] Se a = , não irá ler nada da entrada Se A = , irá realizar a transição independente do símbolo que estiver no topo da pilha Se B = , não irá empilhar nada após a transição Se A = e B = em todas as transições: o AP é um AFND- Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 282 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha: Transições Exemplos: (qi, , A) = [qj, ] qi qj A/ (qi, , ) = [qj, B] qi qj /B (qi, a, ) = [qj, ] qi qj a / Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 283 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha: Aceitação Seja M = (Q, ⌃, , , q0, F) um AP Uma palavra w 2 ⌃⇤ é aceita por M se existe uma computação da forma: [q0, w, ] ` ⇤ [qi, , ], onde qi 2 F Ou seja: A palavra de entrada deve ser toda lida Deve-se terminar em um estado final A pilha deve começar e terminar vazia A linguagem de M, denotada por L(M), é o conjunto das palavras aceitas por M Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 284 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Exemplo Clássico L(G) = {aibi | i > 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 285 / 468
  • 103.
    Linguagens Livres deContexto – Autômatos com Pilha Exemplo Clássico L(G) = {aibi | i > 0} AP: q0 q1 a /X b X/ b X/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 285 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha: Exemplos L1 = {wcwR | w = (a [ b)⇤} L2 = {ai | i 0} [ {aibi | i 0} L3 = palíndromos de tamanho par sobre {a, b} L4 = {aib2i | i 1} L5 = palavras sobre {a, b} com o mesmo número de a e b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 286 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Autômatos com Pilha Determinísticos (APD) Assuma as transições: (qi, u, A) = [qj, C] (qi, v, B) = [qk , D] qi qj qk u A/C v B/D Um AP é determinístico se não possui transições compatíveis Essas duas transições são compatíveis se: u = v e A = B u = v e (A = ou B = ) A = B e (u = ou v = ) (u = ou v = ) e (A = ou B = ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 287 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Poder computacional AP sem uso da pilha Semelhante ao AF e reconheceria a classe das LR APD Aceita um importante subconjunto próprio da classe de LLC Aplicação: analisadores sintáticos (compiladores) APND Aceita a classe das LLC AP com 2 (ou mais) pilhas Mesmo poder computacional da MT (dispositivo mais geral da computação) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 288 / 468
  • 104.
    Linguagens Livres deContexto Autômatos com Pilha Variantes Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 289 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Atômicos Transições são sempre de uma das formas: (qi, a, ) = [qj, ] – apenas lê entrada (qi, , A) = [qj, ] – apenas desempilha (qi, , ) = [qj, A] – apenas empilha Todo AP pode ser transformado em um AP atômico Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 290 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Atômicos – Exemplo AP atômico para L = {aibi | i > 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 291 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Atômicos – Exemplo AP atômico para L = {aibi | i > 0} q0 q1 q2 q3 q4 a / /A b / A/ b / A/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 291 / 468
  • 105.
    Linguagens Livres deContexto – Autômatos com Pilha APs Estendidos Pode-se empilhar mais de uma letra, como resultado de uma única transição (qi, a, A) = [qj, BCD] Leia a, Desempilha A e Empilha D, C e B (i.e., B é o novo topo) qi qj a A/BCD Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 292 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Estendidos – Exemplo #1 AP estendido para L = {aib2i | i 1} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 293 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Estendidos – Exemplo #1 AP estendido para L = {aib2i | i 1} q0 q1 a /XX b X/ b X/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 293 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Estendidos – Exemplo #2 AP estendido para L = {ai(bc)i | i 1} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 294 / 468
  • 106.
    Linguagens Livres deContexto – Autômatos com Pilha APs Estendidos – Exemplo #2 AP estendido para L = {ai(bc)i | i 1} q0 q1 a /BC b B/ b B/ c C/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 294 / 468 Linguagens Livres de Contexto – Autômatos com Pilha APs Atômicos e Estendidos Variantes de APs (i.e., Atômicos e Estendidos) não aumentam o poder de expressão de APs Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 295 / 468 Linguagens Livres de Contexto Autômatos com Pilha Critérios de Aceitação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 296 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Critério de Aceitação Critério normal de aceitação: por estado final e pilha vazia [q0, w, ] ` ⇤ [qi, , ], qi 2 F Critério alternativo de aceitação: por estado final [q0, w, ] ` ⇤ [qi, , ↵], qi 2 F, ↵ 2 ⇤ Basta processar toda a palavra e terminar em estado final Critério alternativo de aceitação: por pilha vazia [q0, w, ] ` + [qi, , ], qi 2 Q Basta processar toda a palavra e terminar com a pilha vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 297 / 468
  • 107.
    Linguagens Livres deContexto – Autômatos com Pilha Aceitação por Estado Final Novo critério não aumenta o poder de expressão de APs Quando a aceitação é por estado final e pilha vazia, às vezes são acrescentados transições e/ou estados apenas para esvaziar a pilha Exemplo: {ai | i > 0} [ {ai bi | i > 0} No caso de aceitação por estado final, tais estados são desnecessários q0 q1 q2 a /X X/ b X/ X/ b X/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 298 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Estado Final Lema: Seja L uma linguagem aceita por um AP M por estado final, então existe um AP M0 que aceita L por estado final e pilha vazia Basta acrescentar um novo estado final qf 0 e ’(qi, , ) = [qf 0 , ], para todo qi 2 F ’(qf 0 , , X) = [qf 0 , ], para todo X 2 Aceitação: [q0, w, ] ` ⇤ [qi, , ↵] ` [qf 0, , ↵] ` ⇤ [qf 0, , ] Resumindo: Aceita por estado final ) aceita por estado final e pilha vazia (pelo lema acima) Aceita por estado final e pilha vazia ) aceita por estado final Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 299 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Estado Final – Exemplo L = {aibj | i j 0} Estado Final (EF) Estado Final e Pilha Vazia (EF/PV) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Estado Final – Exemplo L = {aibj | i j 0} Estado Final (EF) q0 q1 a /A b A/ b A/ Estado Final e Pilha Vazia (EF/PV) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468
  • 108.
    Linguagens Livres deContexto – Autômatos com Pilha Aceitação por Estado Final – Exemplo L = {aibj | i j 0} Estado Final (EF) q0 q1 a /A b A/ b A/ Estado Final e Pilha Vazia (EF/PV) q0 q1 q0 f a /A b A/ / / b A/ A/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 300 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Pilha Vazia Critério alternativo de aceitação: por pilha vazia [q0, w, ] ` + [qi, , ], qi 2 Q Observe que não se exige mais que qi 2 F Basta que a palavra seja toda lida (sempre) e pilha vazia Por que não [q0, w, ] ` ⇤ [qi, , ] ? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 301 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Pilha Vazia Lema: Seja L uma linguagem aceita por um AP M por pilha vazia, então existe um AP M0 que aceita L por estado final e pilha vazia Todo estado de M é um estado final em M0 Novo estado inicial q0 0 0 (q0 0 , x, A) = (q0, x, A) e 0 (qi 0 , x, A) = (qi, x, A) para todo qi 2 Q, x 2 ⌃ [ { }, A 2 [ { } Resumindo: Aceita por pilha vazia ) aceita por estado final e pilha vazia (pelo lema acima) Aceita por estado final e pilha vazia ) aceita por pilha vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 302 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Pilha Vazia – Exemplo L = {aibi | i > 0} Pilha Vazia (PV) Estado Final e Pilha Vazia (EF/PV) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468
  • 109.
    Linguagens Livres deContexto – Autômatos com Pilha Aceitação por Pilha Vazia – Exemplo L = {aibi | i > 0} Pilha Vazia (PV) q0 q1 a /A / b A/ Estado Final e Pilha Vazia (EF/PV) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Aceitação por Pilha Vazia – Exemplo L = {aibi | i > 0} Pilha Vazia (PV) q0 q1 a /A / b A/ Estado Final e Pilha Vazia (EF/PV) q0 q1 q0 0 a /A / b A/ a /A / Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 303 / 468 Linguagens Livres de Contexto – Autômatos com Pilha Critérios de Aceitação: Teorema Assuma uma LLC L, logo Existe um AP M1 que aceita L com critério de aceitação por pilha vazia e estado final Existe um AP M2 que aceita L com critério de aceitação por estado final Existe um AP M3 que aceita L com critério de aceitação por pilha vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 304 / 468 Linguagens Livres de Contexto Algoritmos de Reconhecimento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 305 / 468
  • 110.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento Algoritmos de Reconhecimento Alguns problemas não possuem solução computacional: 1 Certa LLC é ambígua? 2 Duas LLCs são iguais ou diferentes? 3 Uma palavra pertence a uma linguagem? No entanto, o problema (3) possui solução em LLCs Uma palavra pertence a uma LLC? Algoritmos de reconhecimento válidos para qualquer linguagem da classe complexidade computacional (tempo e espaço) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 306 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Reconhecedores que utilizam AP muito simples em geral, ineficientes tempo de processamento é proporcional a k|w| w: palavra de entrada k: constante que depende do autômato Reconhecedores que não utilizam AP Tempo de processamento proporcional a |w|3 contudo limite não foi provado, pode ser até inferior Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 307 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Algoritmos construídos a partir de uma GLC Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 308 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Classificação Top-Down (ou Preditivo) constrói uma árvore de derivação a partir da raiz (símbolo inicial da gramática) com ramos em direção às folhas (terminais) Bottom-up oposto do Top-Down parte das folhas construindo a árvore de derivação em direção à raiz Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 309 / 468
  • 111.
    Linguagens Livres deContexto Algoritmos de Reconhecimento Autômato com Pilha como Reconhecedor Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 310 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Autômato com Pilha como Reconhecedor Reconhecedores usando AP Construção relativamente simples e imediata Relação “direta” entre produções e as transições do AP Algoritmos Top-Down Simula derivação mais à esquerda Não determinista Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 311 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Autômato com Pilha como Reconhecedor É direta a conversão de qualquer GLC na FN de Greibach para um AP Cada produção gera exat. um terminal (FN de Greibach) Logo, geração de w requer |w| etapas de derivação No entanto, cada terminal pode ter diversas produções associadas AP testa as diversas alternativas número de passos para reconhecer w é proporcional a k|w| k = aprox. metade da média de produções das variáveis Logo, o tempo de reconhecimento é pode ser muito ineficiente para entradas mais longas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 312 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Exemplo L = {anbn | n 1} G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! aSb, S ! ab}, S} Forma Normal de Greibach: G0 (L) = {{S0 , S, B}, {a, b}, {S0 ! aSB, S0 ! aB, S ! aSB, S ! aB, B ! b}, S0 } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 313 / 468
  • 112.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento Exemplo L = {anbn | n 1} G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! aSb, S ! ab}, S} Forma Normal de Greibach: G0 (L) = {{S0 , S, B}, {a, b}, {S0 ! aSB, S0 ! aB, S ! aSB, S ! aB, B ! b}, S0 } q0 q1 a /SB a /B a S/SB a S/B b B/ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 313 / 468 Linguagens Livres de Contexto Algoritmos de Reconhecimento Autômato com Pilha Descendente Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 314 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Autômato com Pilha Descendente Forma alternativa de construir AP não há necessidade de estar na FNG Igualmente simples e com o mesmo nível de eficiência a partir de uma GLC sem recursão à esquerda simula a derivação mais à esquerda Algoritmo inicialmente, empilha o símbolo inicial se topo == variável, então substitui (não determinismo) por todas as produções da variável se topo = terminal, então testa se é igual ao próximo símbolo da entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 315 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Exemplo L = {anbn | n 1} G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! AX, S ! AB, X ! SB, A ! a, B ! b}, S} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 316 / 468
  • 113.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento Exemplo L = {anbn | n 1} G(L) = {V, ⌃, P, S} = {{S}, {a, b}, {S ! AX, S ! AB, X ! SB, A ! a, B ! b}, S} q0 q1 q2 /S S/AX S/AB X/SB A/a B/b a a/ b b/ / Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 316 / 468 Linguagens Livres de Contexto Algoritmos de Reconhecimento Algoritmo de Cocke-Younger-Kasami (CYK) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 317 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Algoritmo de Cocke-Younger-Kasami (CYK) Proposto por J. Cocke, D. H. Younger e T. Kasami em 1965 GLC deve estar na FNC Mecânica: Estratégia bottom-up para criação de todas as possíveis árvores de derivação da palavra de entrada w Tempo de processamento proporcional a |w|3 (ruim) Ideia básica: Tabela triangular de derivação Célula: raízes que podem gerar a correspondente subárvore Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 318 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Exemplo (contribuição de Alberto Hokari) Considere a seguinte GLC L: S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 319 / 468
  • 114.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Coloca-se a palavra a ser reconhecida na base da tabela a a a b b b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 320 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 1a linha devemos verificar qual variável gera a sequencia de 1 terminal a a a b b b A A A B B B1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 321 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 2a linha devemos verificar qual variável gera a sequencia de 2 terminais Por exemplo, existe alguma regra que produza AA? A resposta é não, então marcamos a célula com um – a a a b b b A A A B B B1 2 - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 322 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) O processo se repete a a a b b b A A A B B B1 2 - - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 323 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b
  • 115.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Neste caso, existem duas regras que geram AB Logo, ambas são colocadas na célula S,X a a a b b b A A A B B B1 2 - - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 324 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) O processo se repete até completar a 2a linha S,X a a a b b b A A A B B B1 2 - - - - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 325 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 3a linha devemos verificar qual variável gera a sequência de 3 terminais as setas mostram quais pares de células devemos trabalhar a fim de se obter a sequência de três terminais a a a b b b 1 2 3 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 326 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) 1 + 2 = A + = A Par inválido, logo marcamos a célula com um S,X a a a b b b A A A B B B1 2 - - - - -3 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 327 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b
  • 116.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) 2 + 1 = + A = A Par inválido, logo marcamos a célula com um S,X a a a b b b A A A B B B1 2 - - - - -3 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 328 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) O processo se repete até completar a 3a linha S,X a a a b b b A A A B B B1 2 - - - - -3 - -T Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 329 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 4a linha devemos verificar qual variável gera a sequência de 4 terminais o processo se repete para as linhas superiores S,X a a a b b b A A A B B B1 2 - - - - -3 - -T 4 - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 4a linha devemos verificar qual variável gera a sequência de 4 terminais o processo se repete para as linhas superiores S,X a a a b b b A A A B B B1 2 - - - - -3 - -T 4 - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b
  • 117.
    Linguagens Livres deContexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Para preencher a 4a linha devemos verificar qual variável gera a sequência de 4 terminais o processo se repete para as linhas superiores S,X a a a b b b A A A B B B1 2 - - - - -3 - -T 4 - Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 330 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento L aceita a palavra aaabbb? (contribuição de Alberto Hokari) Ao final do processo, se o símbolo inicial se encontra na primeira célula, a palavra é reconhecida pela linguagem Neste exemplo, aaabbb 2 L Como S é a raiz então a palavra é reconhecida S,X a a a b b b A A A B B B1 2 - - - - -3 - -T 4 - S,X - 5 6 T- S,X Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 331 / 468 S ! AT | AB T ! XB X ! AT | AB A ! a B ! b Linguagens Livres de Contexto – Algoritmos de Reconhecimento Exercício de Fixação #1 Verifique se a palavra abab é aceita na seguinte GLC: S ! XY T ! ZT | a X ! TY Y ! YT | b Z ! TZ | b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 332 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Exercício de Fixação #2 Verifique se a palavra baaba é aceita na seguinte GLC: S ! AB | BC A ! BA | a B ! CC | b C ! AB | a Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 333 / 468
  • 118.
    Linguagens Livres deContexto Algoritmos de Reconhecimento Algoritmo de Early Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 334 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Algoritmo de Early Possivelmente o mais rápido algoritmo para LLC Proposto em 1968 Tempo de processamento: qualquer GLC sem produções : |w|3 qualquer GLC não ambígua: |w|2 muitas gramáticas de interesse prático: |w| Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 335 / 468 Linguagens Livres de Contexto – Algoritmos de Reconhecimento Algoritmo de Early Entrada: GLC sem produções vazias Algoritmo Top-Down (a partir de S) Executa sempre a derivação mais à esquerda Cada iteração gera um terminal comparado com o símbolo da entrada continua se puder achar uma produção que gere o próximo símbolo Algoritmos eficientes como o de Early serão abordados em Compiladores! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 336 / 468 Linguagens Livres de Contexto Algoritmos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 337 / 468
  • 119.
    Linguagens Livres deContexto Algoritmos Transformação de GLCs para APs Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 338 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de GLCs para APs (veja Autômato com Pilha como Reconhecedor) Teorema: Se L é uma LLC, então há um AP que aceita L Seja L uma LLC e G = (V, ⌃, P, S) a GLC que gera L Transforme G para a forma normal de Greibach: A ! aA1A2A3 . . . An onde a 2 ⌃ e A1..n 2 V {S} A ! a S ! Crie um AP estendido M = (Q, ⌃, , , q0, F): (estado inicial q0) QM = {q0, q1}, ⌃M = ⌃G, M = VG {S}, FM = {q1} (q0, a, ) = { [q1, w] | S ! aw 2 P } (q1, a, A) = { [q1, w] | A ! aw 2 P e A 2 V {S} } (q0, , ) = [q1, ], se S ! 2 P Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 339 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de GLCs para APs – Exemplo S ! aAB | aB A ! aAB | aB B ! b Intuitivamente, uma regra A ! aAB somente pode ser aplicada quando o topo da pilha for A Neste caso, aplicar a regra em questão implica em: Desempilhar A Ler a Empilhar AB Ou seja, a pilha armazena as variáveis que ainda devem ser derivadas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 340 / 468 Linguagens Livres de Contexto Algoritmos Transformação de APs para GLCs Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 341 / 468
  • 120.
    Linguagens Livres deContexto – Algoritmos Transformação de APs para GLCs Toda linguagem aceita por um AP é uma LLC Dado um AP, gerar um AP M’ estendido onde ’ herda todas as transições de e acrescenta duas novas transições: Se [qj, ] 2 (qi, u, ) então [qj , A] 2 0 (qi , u, A), para todo A 2 Se [qj, B] 2 (qi, u, ) então [qj , BA] 2 0 (qi , u, A), para todo A 2 Interpretação para novas transições: Todas transições que não desempilham, passam agora a empilhar e desempilhar o mesmo símbolo Veja que é para todo A 2 M (qualquer que seja o topo) Claramente, L(M) = L(M0) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 342 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs Algoritmo para gerar uma GLC G a partir do AP M0 Variáveis não vão ser mais maiúsculas, mas sim tuplas da forma <qi, A, qj> estou em qi , quero ir para qj e existe A no topo da pilha Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 343 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs Regras de G: #1 S ! <q0, , qj>, para todo qj 2 F #2 Se [qj, B] 2 0 (qi, x, A), então (A e B 2 [ { }) <qi , A, qk > ! x<qj , B, qk >, para todo qk 2 Q #3 Se [qj, BA] 2 0 (qi, x, A), então (A e B 2 ) <qi , A, qk > ! x<qj , B, qn >< qn , A, qk >, qk , qn 2 Q #4 Para todo qk 2 Q <qk , , qk > ! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 344 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo Construa uma gramática G para o seguinte AP M: Q = {q0, q1} ⌃ = {a, b, c}, = {A} F = {q1} L(M) = an cbn , n 0 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 345 / 468
  • 121.
    Linguagens Livres deContexto – Algoritmos Transformação de APs para GLCs – Exemplo q0 q1 a /A c / b A/ Função de transição (q0, a, ) = [q0, A] – não desempilha e empilha A (q0, c, ) = [q1, ] – não desempilha, não empilha (q1, b, A) = [q1, ] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 346 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo q0 q1 a /A a A/AA c / c A/A b A/ Função de transição 0 é igual a mais duas regras: 0 (q0, a, A) = [q0, AA] – pois A é o único elemento de 0 (q0, c, A) = [q1, A] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 347 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo #1 S ! <q0, , qj>, para todo qj 2 F Logo, primeira regra da GLC será: S ! <q0, , q1> #2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { }) <qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q Como [q0, A] 2 (q0, a, ), então <q0, , qk > ! a<q0, A, qk > Novas regras: <q0, , q0 > ! a<q0, A, q0 > – k = 0 <q0, , q1 > ! a<q0, A, q1 > – k = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 348 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo #3 Se [qj, BA] 2 0(qi, x, A), então (A e B 2 ) <qi, A, qk > ! x<qj, B, qn >< qn , A, qk >, qk , qn 2 Q Como [q0, AA] 2 (q0, a, A), então <q0, A, qk > ! a<q0, A, qn> Novas regras: <q0, A, q0 > ! a<q0, A, q0 >< q0 , A, q0 > – k = 0 , n = 0 <q0, A, q1 > ! a<q0, A, q0 >< q0 , A, q1 > – k = 1 , n = 0 <q0, A, q0 > ! a<q0, A, q1 >< q1 , A, q0 > – k = 0 , n = 1 <q0, A, q1 > ! a<q0, A, q1 >< q1 , A, q1 > – k = 1 , n = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 349 / 468
  • 122.
    Linguagens Livres deContexto – Algoritmos Transformação de APs para GLCs – Exemplo #2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { }) <qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q Como [q1, ] 2 (q0, c, ), então <q0, , qk > ! c<q1, , qk > Novas regras: <q0, , q0 > ! c<q1, , q0 > – k = 0 <q0, , q1 > ! c<q1, , q1 > – k = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 350 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo #2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { }) <qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q Como [q1, A] 2 (q0, c, A) então <q0, A, qk > ! c<q1.A, qk > Novas regras: <q0, A, q0 > ! c<q1, A, q0 > – k = 0 <q0, A, q1 > ! c<q1, A, q1 > – k = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 351 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo #2 Se [qj, B] 2 0(qi, x, A), então (A e B 2 [ { }) <qi, A, qk > ! x<qj, B, qk >, para todo qk 2 Q Como [q1, ] 2 (q1, b, A) então <q1, A, qk > ! b<q1, , qk > Novas regras: <q1, A, q0 > ! b<q1, , q0 > – k = 0 <q1, A, q1 > ! b<q1, , q1 > – k = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 352 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo #4 Para todo qk 2 Q <qk , , qk > ! Novas regras: <q0, , q0> ! – k = 0 <q1, , q1> ! – k = 1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 353 / 468
  • 123.
    Linguagens Livres deContexto – Algoritmos Transformação de APs para GLCs – Exemplo – GLC resultante S ! <q0, , q1> <q0, , q0> ! a<q0, A, q0> <q0, , q1> ! a<q0, A, q1> <q0, A, q0> ! a<q0, A, q0><q0, A, q0> <q0, A, q1> ! a<q0, A, q0><q0, A, q1> <q0, A, q0> ! a<q0, A, q1><q1, A, q0> <q0, A, q1> ! a<q0, A, q1><q1, A, q1> <q0, , q0> ! c<q1, , q0> <q0, , q1> ! c<q1, , q1> <q0, A, q0> ! c<q1, A, q0> <q0, A, q1> ! c<q1, A, q1> <q1, A, q0> ! b<q1, , q0> <q1, A, q1> ! b<q1, , q1> <q0, , q0> ! <q1, , q1> ! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 354 / 468 Linguagens Livres de Contexto – Algoritmos Transformação de APs para GLCs – Exemplo – Derivação aacbb S ) <q0, , q1> ) a<q0, A, q1> ) aa<q0, A, q1><q1, A, q1> ) aac<q1, A, q1><q1, A, q1> ) aacb<q1, , q1><q1, A, q1> ) aacb<q1, A, q1> ) aacbb<q1, , q1> ) aacbb Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 355 / 468 Linguagens Livres de Contexto Propriedades Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 356 / 468 Linguagens Livres de Contexto – Propriedades LLCs Mais geral que LRs Mas, ainda é relativamente restrita Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 357 / 468
  • 124.
    Linguagens Livres deContexto – Propriedades Fácil definir linguagens que não são LLC Palavra duplicada, e.g., L = {ww | w 2 {a, b}⇤} Analogia com compiladores: declaração de uma variável antes do seu uso Triplo balanceamento, e.g., L = {anbncn | n 0} Mais importante limitação das LLC (propositalmente) incomum em LPs Usando Autômato com Pilha fácil intuir por que não são LLC Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 358 / 468 Linguagens Livres de Contexto – Propriedades Linguagens de Programação LPs normalmente são 99% LLC (e 1% safadão) Mas, LPs são o quê então? Mas, e a construção if then else? Isso é encadeamento, não balanceamento Não confunda! Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 359 / 468 Linguagens Livres de Contexto – Propriedades Como verificar... ... se uma LLC é fechada para operações união? interseção? concatenação? complemento? ... se uma LLC é infinita? finita? vazia? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 360 / 468 Linguagens Livres de Contexto – Propriedades Propriedades de fechamento Fechamento é importante para construir novas linguagens a partir de operações sobre linguagens conhecidas provar propriedades construir algoritmos O conjunto das LLC é fechado para: União Concatenação Kleene Mas não é fechado para: Interseção Complemento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 361 / 468
  • 125.
    Linguagens Livres deContexto – Propriedades O conjunto das LLC é fechado para União Prova usando AP: Seja M1 e M2 dois APs que reconhecem duas LLCs Basta criar um novo AP com um novo estado inicial que possui transições para os estados iniciais de M1 e M2 (que agora deixam de ser iniciais) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 362 / 468 Linguagens Livres de Contexto – Propriedades O conjunto das LLC é fechado para Concatenação Prova usando AP: Seja M1 e M2 dois APs que reconhecem duas LLCs com critério de aceitação por estado final Basta criar um novo AP em que o(s) estado(s) final(is) de M1 possui(em) transições para o estado inicial de M2 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 363 / 468 Linguagens Livres de Contexto – Propriedades O conjunto das LLC é fechado para Kleene Prova usando AP: Seja M um AP que reconhece uma LLC com critério de aceitação por estado final Basta fazer transições do(s) estado(s) final(is) para o estado inicial Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 364 / 468 Linguagens Livres de Contexto – Propriedades O conjunto das LLC não é fechado para Interseção Prova por Contradição: Seja L1 = {ai bi cj | i, j 0} uma LLC Seja L2 = {aj bi ci | i, j 0} uma LLC No entanto, L1 L2 = {ai bi ci | i 0} não é LLC Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 365 / 468
  • 126.
    Linguagens Livres deContexto – Propriedades O conjunto das LLC não é fechado para complemento Prova por Contradição: Suponha que seja fechado para complemento Suponha que L1 e L2 são LLC Então L = L1 [ L2 também é LLC Mas, L = L1 L2 Já foi mostrado que L1 L2 não necessariamente é LLC Logo, revendo a hipótese, o conjunto das LLC não é fechado para complemento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 366 / 468 Linguagens Livres de Contexto – Propriedades O conjunto das LLC não é fechado para complemento Prova por Intuição: Suponha uma LLC L Suponha um AP M que reconheça L (que pode ser APND) Uma palavra w 2 L se alguma computação de M a aceitar É possível um AP rejeitar o complemento de L, mas não aceitar o complemento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 367 / 468 Linguagens Livres de Contexto – Propriedades O conjunto das LLC não é fechado para complemento Prova por Intuição: Suponha uma LLC L Suponha um AP M que reconheça L (que pode ser APND) Uma palavra w 2 L se alguma computação de M a aceitar É possível um AP rejeitar o complemento de L, mas não aceitar o complemento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 367 / 468 Linguagens Livres de Contexto – Propriedades Propriedades de fechamento Teorema: Seja R uma linguagem regular e L uma linguagem livre de contexto, então R L é LC Suponha um AFD N que reconheça R Suponha um AP M que reconheça L Basta criar um AP M0 que simule a operação de N e M Os estados nessa máquina composta serão pares ordenados [qNi , qMj ], onde qNi é um estado de N e qMj é um estado de M Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 368 / 468
  • 127.
    Linguagens Livres deContexto – Propriedades LLC é Vazia? Prova: Suponha uma LLC L Seja G = (V, ⌃, P, S) uma GLC que reconhece L Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos inúteis Se P0 for vazio, então L é vazia Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 369 / 468 Linguagens Livres de Contexto – Propriedades LLC é Finita ou Infinita? Seja G = (V, ⌃, P, S) uma GLC que reconhece L Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos inúteis, regras de cadeia e regras Crie um grafo de dependência das variáveis Se existirem ciclos no grafo de dependência, L é infinita Caso contrário, L é finita Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 370 / 468 Linguagens Livres de Contexto – Propriedades LLC é Finita ou Infinita? Seja G = (V, ⌃, P, S) uma GLC que reconhece L Seja G0 = (V0, ⌃0, P0, S) a GLC equivalente a G sem símbolos inúteis, regras de cadeia e regras Crie um grafo de dependência das variáveis Se existirem ciclos no grafo de dependência, L é infinita Caso contrário, L é finita Exemplo (finita ou infinita?) S ! AB A ! aCb | a B ! bB | bb C ! cBS S A B C Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 370 / 468 Linguagens Livres de Contexto – Propriedades Investigação se é LLC Para demonstrar que uma linguagem L é LC, basta: Criar um GLC que gere L Criar um AP que reconheça L Para demostrar que uma linguagem L não é LC, deve-se: Aplicar o Lema do Bombeamento para LLCs Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 371 / 468
  • 128.
    Linguagens Livres deContexto – Propriedades Lema do Bombeamento para LLCs Ideia similar ao Lema do Bombeamento para LRs LRs podem expressar bombeamentos sem qualquer balanceamento não podem expressar bombeamentos balanceados 2 a 2 LLCs podem expressar bombeamentos balanceados 2 a 2 não podem expressar bombeamentos balanceados 3 a 3 Detalhes em Sudkamp [6] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 372 / 468 5. Linguagens Sensíveis ao Contexto – Conteúdo 1 Revisão 3 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs Gramática Sensível ao Contexto 375 Autômato Linearmente Limitado 381 Teoremas 388 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 373 / 468 Linguagens Sensíveis ao Contexto Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 374 / 468 Linguagens Sensíveis ao Contexto Gramática Sensível ao Contexto Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 375 / 468
  • 129.
    Linguagens Sensíveis aoContexto – Gram. Sensível ao Contexto Gramática Sensível ao Contexto (GSC) Uma GSC é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) ⌫ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) |µ|  |⌫| (i.e., regras não-contráteis, o que indica que tamanho da forma sentencial ou aumenta ou permanece constante) nunca é uma palavra válida em uma LSC Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 376 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Gramáticas Sensíveis ao Contexto Se L1 é uma LR, então L1 é uma LLC Se L2 é uma LLC, então L2–{ } é uma LSC É uma GSC? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Gramáticas Sensíveis ao Contexto Se L1 é uma LR, então L1 é uma LLC Se L2 é uma LLC, então L2–{ } é uma LSC É uma GSC? S ! aSCbc | Cb ! bc Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Gramáticas Sensíveis ao Contexto Se L1 é uma LR, então L1 é uma LLC Se L2 é uma LLC, então L2–{ } é uma LSC É uma GSC? S ! aSCbc | Cb ! bc É uma GSC? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468
  • 130.
    Linguagens Sensíveis aoContexto – Gram. Sensível ao Contexto Gramáticas Sensíveis ao Contexto Se L1 é uma LR, então L1 é uma LLC Se L2 é uma LLC, então L2–{ } é uma LSC É uma GSC? S ! aSCbc | Cb ! bc É uma GSC? S ! aAc | bc Ac ! b Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 377 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Exemplo Clássico L = {aibici | i > 0} GSC(L): Derivação, por exemplo, de aabbcc: S ) aAbc ) aabCbc ) aabbCc ) aabbcc Toda LSC é recursiva, logo: existe um ALL que reconhece uma LSC existe uma MT que decide LSC, i.e., sempre para para qualquer entrada w 2 ⌃⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 378 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Exemplo Clássico L = {aibici | i > 0} GSC(L): S ! aAbc | abc A ! aAbC | abC Cb ! bC Cc ! cc Derivação, por exemplo, de aabbcc: S ) aAbc ) aabCbc ) aabbCc ) aabbcc Toda LSC é recursiva, logo: existe um ALL que reconhece uma LSC existe uma MT que decide LSC, i.e., sempre para para qualquer entrada w 2 ⌃⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 378 / 468 Linguagens Sensíveis ao Contexto – Gram. Sensível ao Contexto Por que não usamos apenas terminais L = {aibici | i > 0} GSC(L): S ! aAbc | abc A ! aAbc | abc cb ! bc cc ! cc Derivação, por exemplo, de aabbcc: S ) aAbc ) aabcbc ) aabbcc Durante uma derivação: Se w 2 ⌃⇤ , então w é uma palavra da linguagem aabcbc 2 L? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 379 / 468
  • 131.
    Linguagens Sensíveis aoContexto – Gram. Sensível ao Contexto Exercícios 1 Defina L(G) para a seguinte GSC: S ! SBA | a BA ! AB aA ! aaB B ! b 2 Desenvolva uma GSC G em que L(G) = {aib2ici | i > 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 380 / 468 Linguagens Sensíveis ao Contexto Autômato Linearmente Limitado Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 381 / 468 Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado Autômato Linearmente Limitado (ALL) Um ALL é uma óctupla (Q, ⌃, , , q0, <, >, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da fita : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) < e > = delimitadores da palavra de entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 382 / 468 Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado Autômato Linearmente Limitado (ALL) Seja w uma palavra de entrada Configuração inicial da fita: hwi Delimitadores podem ser lidos, mas não apagados Delimitadores não podem ser ultrapassados Tamanho da fita = |w| + 2 Basicamente, um ALL é uma MT cuja quantidade de fita disponível é limitada ao tamanho da palavra de entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 383 / 468
  • 132.
    Linguagens Sensíveis aoContexto – Autômato Linearm. Limitado Por que sempre para? Assuma um ALL a verificar a palavra aabb Logo, configuração inicial da fita: haabbi Como a fita é finita, o número máximo de combinações é dado pela fórmula: max_combinacoes = |Q| ⇥ |w| ⇥ | ||w| onde Q é o conjunto de estados, w é a palavra e é o alfabeto da fita Assuma, nesse exemplo, Q = {q0, q1} e = {h, i, a, b, X}. Dessa forma, o número máximo de configurações seria: max_combinacoes = 2 ⇥ 4 ⇥ 54 = 5.000 Se o ALL ultrapassa esse limite, a palavra é rejeitada, pois certamente está repetindo configurações (loop) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 384 / 468 Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado Exemplo Clássico L = {aibici | i > 0} q0 q1 q2 q3 q4 q5 q6 q7 </< D a/X D Y/Y D b/Y D Y/Y D a/a D c/Z D Z/Z D b/b D >/> E c/c D X/X D Z/Z E Y/Y E c/c E b/b E a/a E >/> E Y/Y D Z/Z D Z/Z E Y/Y E X/X E Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 385 / 468 Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado Exercício de Fixação 1 L1 = {wcw | w 2 {a, b}⇤ e tem o mesmo número de a e b} 2 L2 = {ww | w 2 {a, b}+} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 386 / 468 Linguagens Sensíveis ao Contexto – Autômato Linearm. Limitado L1 = {wcw | w 2 {a, b}⇤ e tem o mesmo número de a e b} q0 q1 q2 q3 q4 q5 q6q7 q8 q9 q0 0 q0 1 q0 2 q0 3 q0 4 </< D a/X D b/Y D c/c D a/a D b/b D c/c D a/a D b/b D a/X E X/X D Y/Y D b/Y E X/X D Y/Y D c/c E X/X E Y/Y E X/X D Y/Y D a/a E b/b E c/c D >/> E X/X D Y/Y D </< D X/a E Y/b E c/c E c/c D a/X D b/X D X/X D b/X E X/X D a/a D a/X E X/X D b/b D </< D a/a E b/b E X/X E Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 387 / 468
  • 133.
    Linguagens Sensíveis aoContexto Teoremas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 388 / 468 Linguagens Sensíveis ao Contexto – Teoremas Teorema #1: Se G é GSC, então L(G) é recursiva Mostrar que existe uma MT M que decide L(G) Se p é derivável ou não por L(G), então p é decidido por M M deve simular as derivações de G M é uma MT não-determinística com 3 fitas Fita #1: palavra de entrada p Fita #2: regras de G u ! v na fita fica ##u#v## ##: separador de regras e #: ! Fita #3: usada para registrar todas as formas sentenciais de uma derivação Ex.: S#aAbc#aabCbc#aabbCc#aabbcc Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 389 / 468 Linguagens Sensíveis ao Contexto – Teoremas Teorema #1: Se G é GSC, então L(G) é recursiva Funcionamento de M (máquina que decide L): S# é gravado na posição 1 da Fita #3 Regras de G são escritas na Fita #2 loop Escolher uma regra u#v na Fita #2 Seja q# a palavra mais recente gravada na Fita #3 Escolher uma instância de u em q (se existir). Senão, parar em estado de rejeição Sendo q = xuy#, gravar xvy# na Fita #3, logo após q# Se xvy == p, parar em estado de aceitação Se xvy ocorrer em outra forma sentencial na Fita #3 ou tam(xvy) > tam(p), parar em estado de rejeição Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 390 / 468 Linguagens Sensíveis ao Contexto – Teoremas Teorema #1: Se G é GSC, então L(G) é recursiva Funcionamento de M (máquina que decide L) Se xvy ocorrer em outra posição na Fita #3, parar em estado de rejeição Justificativa: derivações cíclicas S )+ w )+ w Se tam(xvy) > tam(p), parar em estado de rejeição Justificativa: em GSC, derivações são não-contráteis Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 391 / 468
  • 134.
    Linguagens Sensíveis aoContexto – Teoremas Teorema #2: Se L é uma LSC, então tem uma GSC G tal que L(G) = L Se L é uma LSC, então existe um ALL M cuja L(M) = L Em uma LSC, nenhuma forma sentencial pode ser maior que a palavra de entrada É impossível uma derivação S )⇤ ↵ )⇤ w, onde tam(↵) > tam(w) Logo, “memória” (ou quantidade de fita) necessária para realizar derivações pode ser limitada pelo tamanho da palavra de entrada Gramáticas irrestritas não são reconhecidas por ALL É possível uma derivação S )⇤ ↵ )⇤ w, onde tam(↵) > tam(w) ALLs são mais parecidos com computadores reais do que uma MT (já que essas assumem memória infinita) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 392 / 468 6. Linguagens Irrestritas – Conteúdo 1 Revisão 3 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs 5 Linguagens Sensíveis ao Contexto 373 Gramática Irrestrita 395 Teoremas 6 Linguagens Irrestritas 393 Máquinas de Turing 404 Variantes Teoremas 444 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 393 / 468 Linguagens Irrestritas Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 394 / 468 Linguagens Irrestritas Gramática Irrestrita Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 395 / 468
  • 135.
    Linguagens Irrestritas –Gramática Irrestrita Gramática Irrestrita (GI) Todo o universo de linguagens é gerado por GIs Uma GI é uma quádrupla (V, ⌃, P, S): V = conjunto de símbolos não-terminais (variáveis) ⌃ = conjunto de símbolos terminais (⌃ V = ) P = conj. de regras (produções) S = símbolo não-terminal inicial (S 2 V) Regras: µ ! ⌫ µ 2 (V [ ⌃)+ (i.e., palavra formada por elementos de V e ⌃) ⌫ 2 (V [ ⌃)⇤ (i.e., palavra formada por elementos de V e ⌃) “Quase” nenhuma restrição é imposta (|µ| > 0) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 396 / 468 Linguagens Irrestritas – Gramática Irrestrita Exemplo Clássico L = {u[u] | u 2 {a, b}⇤} GI(L): S ! aT[a] | bT[b] | [] T[! aT[A | bT[B | [ Aa ! aA Ab ! bA Ba ! aB Bb ! bB A] ! a] B] ! b] Toda GI é recursivamente enumerável, logo: existe uma MT que reconhece LI, mas não necessariamente para para qualquer entrada w 2 ⌃⇤ Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 397 / 468 Linguagens Irrestritas – Gramática Irrestrita Exemplo Clássico GI: S ! aAbc | A ! aAbC | Cb ! bC (b’s podem ser passados para antes dos C’s) CC ! Cc Derivações: S ) aAbc )i 1 ai A(bC)i 1 bc ) ai (bC)i 1 bc Exemplificando (i=3): aaabCbCbc ) aaabCbbCc ) aaabCbbcc ) aaabbCbcc ) aaabbbCcc ) aaabbbccc Logo: L(GI) = aibici, i 0 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 398 / 468 Linguagens Irrestritas – Gramática Irrestrita Exercício L = {aibjaibj | i, j 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 399 / 468
  • 136.
    Linguagens Irrestritas –Gramática Irrestrita Exercício L = {aibjaibj | i, j 0} GI(L): S ! X | Y | aPAbQb X ! aaX | Y ! bbY | P ! aPA | Q ! bQb | E Ab ! bA AE ! a Aa ! aa Derivação Exemplo S ) aPAbQb ) aaPAAbQb ) aaAAbQb ) aaAAbEb ) aaAbAEb ) aabAAEb ) aabAab ) aabaab Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 399 / 468 Linguagens Irrestritas Gramática Irrestrita Teoremas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 400 / 468 Linguagens Irrestritas – Gramática Irrestrita Teorema #3: Se G é GI, então L(G) é rec. enumerável Mostrar que existe uma MT M que reconhece L(G) Se p é derivável por L(G), então p é reconhecida por M Ou seja, M deve simular as derivações de G M é uma MT não-determinística com 3 fitas Fita #1: palavra de entrada p Fita #2: regras de G u ! v na fita fica ##u#v## ##: separador de regras e #: ! Fita #3: usada para registrar todas as formas sentenciais de uma derivação Ex.: S#aAbc#aabCbc#aabbCc#aabbcc Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 401 / 468 Linguagens Irrestritas – Gramática Irrestrita Teorema #3: Se G é GI, então L(G) é rec. enumerável Funcionamento de M: S# é gravado na posição 1 da Fita #3 Regras de G são escritas na Fita #2 loop Escolher uma regra u#v na Fita #2 Seja q# a palavra mais recente gravada na Fita #3 Escolher uma instância de u em q (se existir). Senão, parar em estado de rejeição Sendo q = xuy#, gravar xvy# na Fita #3, logo após q# Se xvy == p, parar em estado de aceitação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 402 / 468
  • 137.
    Linguagens Irrestritas –Gramática Irrestrita Teorema #4: Se L é uma LRE, então tem uma GI G tal que L(G) = L Dada uma MT M que reconhece L, prova consiste em demonstrar como criar uma GI G, com L(G) = L Prova completa pode ser encontrada no Teorema 10.1.3 em Sudkamp [6] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 403 / 468 Linguagens Irrestritas Máquinas de Turing Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 404 / 468 Linguagens Irrestritas – Máquinas de Turing Máquinas de Turing Modelo abstrato para os computadores modernos Propostas por Alan Turing em 1936 Considerado um dos pais da Ciência da Computação Prêmio Turing: “Prêmio Nobel” da área de Computação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 405 / 468 Linguagens Irrestritas – Máquinas de Turing Máquina de Turing (MT) Uma MT Padrão é uma quíntupla (Q, ⌃, , , q0): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da fita : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados qo 2 Q = estado inicial Memória ilimitada Seja w uma palavra de entrada Configuração inicial da fita: BwBBBBBBBB... A fita é infinita à direita Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 406 / 468
  • 138.
    Linguagens Irrestritas –Máquinas de Turing Máquinas de Turing Máquina de estados com uma fita e uma cabeça de leitura/gravação Cada posição da fita possui um símbolo de Fita começa na posição zero Fita possui infinitas posições para a direita B (branco): simbolo especial de Entrada é gravada na fita, começando na posição 1 Posição 0 é sempre um B Posições depois da palavra de entrada são todas B Cabeça começa posicionada na posição 0 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 407 / 468 Linguagens Irrestritas – Máquinas de Turing Máquinas de Turing Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 408 / 468 Linguagens Irrestritas – Máquinas de Turing Função de Transição ( ) MT padrão é determinística : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados Computação Computação para quando encontra um estado/símbolo para o qual não exista transição definida Se a cabeça for deslocada para esquerda da posição 0, então a computação termina anormalmente (“quebra”) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 409 / 468 Linguagens Irrestritas – Máquinas de Turing Exemplo: (qi, x) = [qj, y, E ou D] Se (estado atual == qi) e (símbolo atual da fita == x) então Novo estado = qj Grave y na fita Mova cabeça de leitura/gravação para esquerda (E) ou direita (D) qi qj qi qj x/y E x/y D Símbolo atual da fita: símbolo embaixo da cabeça de leitura/gravação Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 410 / 468
  • 139.
    Linguagens Irrestritas –Máquinas de Turing Exercício de Fixação #1 MT para ler uma entrada formada por uma palavra sobre {a, b} e trocar a por b e vice-versa. Ao final do processamento, rebobinar a cabeça de leitura/gravação para a posição zero da fita Exercício de Fixação #2 MT para realizar a seguinte transformação na fita de entrada: BuB... ) BuBuB..., onde u = (a [ b)⇤ Exercício de Fixação #3 MT para somar 1 em um número binário gravado inicialmente na fita de entrada Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 411 / 468 Linguagens Irrestritas – Máquinas de Turing Exercício de Fixação #4 MT para realizar as seguintes transformações na fita de entrada: Ban Bam B... ) Ban Bam Ban+m B..., n, m 0 Ban Bam B... ) Ban Bam Ban m B..., n m Ban B... ) Ban Ba2n B..., n 0 Ban Bam B... ) Ban Bam Ban⇤m B..., n, m 0 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 412 / 468 Linguagens Irrestritas – Máquinas de Turing MT para Aceitação de Linguagens Um MT é uma séxtupla (Q, ⌃, , , q0, F): Q = conjunto finito de estados ⌃ = alfabeto de entrada = alfabeto da fita : Q ⇥ ! Q ⇥ ⇥ {E, D} = função de transições de estados qo 2 Q = estado inicial F ✓ Q = conjunto de estados finais (aceitação) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 413 / 468 Linguagens Irrestritas – Máquinas de Turing MT para Aceitação de Linguagens MTs que aceitam ou rejeitam uma palavra de entrada Seja M = (Q, ⌃, , , q0, F) uma MT, onde F ✓ Q é o conjunto de estados finais Uma palavra u 2 ⌃⇤ é aceita por estado final se a computação de M com entrada u para em um estado final Isto é, MT não precisa ler toda a palavra para aceitá-la Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 414 / 468
  • 140.
    Linguagens Irrestritas –Máquinas de Turing MT para Aceitação de Linguagens Linguagem L(M): conjunto das palavras aceitas por M Exemplos: L1 = (a [ b)⇤ aa(a [ b)⇤ L2 = {ai bi ci | i 0} L3 = {wcv | w e v tem o mesmo número de a e b} L4 = {ww | w 2 {a, b}+ } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 415 / 468 Linguagens Irrestritas – Máquinas de Turing MT para Aceitação de Linguagens Uma MT pode: Parar e aceitar uma palavra de entrada Parar e rejeitar uma palavra de entrada Entrar em loop (isto é, não parar) MT reconhece uma linguagem L, logo L é recursivamente enumerável (LI) Uma MT reconhece uma linguagem L se ela para para todas as palavras de L, mas pode não parar para as palavras que não estão em L MT decide uma linguagem L, logo L é recursiva (LSC) Uma MT decide uma linguagem L se ela para para todas as possíveis palavras de entrada (⌃⇤ ) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 416 / 468 Linguagens Irrestritas – Máquinas de Turing Reflexão As linguagens L1...4 (anteriormente citadas) são: a. recursivamente enumeráveis? b. recursivas? Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 417 / 468 Linguagens Irrestritas Máquinas de Turing Variantes Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 418 / 468
  • 141.
    Linguagens Irrestritas –Máquinas de Turing MT com Fita Bidirecional Fita se estende infinitamente para esquerda e para direita Entrada pode ser inserida em qualquer ponto da fita Cabeça de leitura/gravação é posicionada no branco imediatamente à esquerda da palavra de entrada Uma linguagem L é aceita por uma MT com fita bidirecional sse é aceita por uma MT padrão (por quê?) Exercício de Fixação MT para somar 1 em um número binário Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 419 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT com fita bidirecional, então é aceita por uma MT padrão Uma fita infinita à direita tem o mesmo tamanho de uma fita infinita à direita e à esquerda basicamente: 1 = 1 + 1 Para não utilizar a fita “da esquerda”, basta realizar o shift de toda a fita “da direita” antes de realizar uma transição que utilizaria a fita “da esquerda” (volta) Se uma linguagem L é aceita por uma MT padrão, então é aceita por uma MT com fita bidirecional Basta não utilizar a fita “da esquerda” Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 420 / 468 Linguagens Irrestritas – Máquinas de Turing MT com Movimento Estático Modificação da função de transição de estados: : Q ⇥ ! Q ⇥ ⇥ {E, D, S} Agora após uma leitura/gravação, é possível não mover a cabeça de leitura/gravação (S) Seu uso só faz sentido quando se tem mais fitas (por quê?) Uma linguagem L é aceita por uma MT com movimento estático sse é aceita por uma MT padrão (por quê?) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 421 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT com movimento estático, então é aceita por uma MT padrão Basta substituir todas transições que possuem movimento estático como a seguir: qi qj qi qk qj a/a S a/a D x/x E, 8x 2 (volta) Se uma linguagem L é aceita por uma MT padrão, então é aceita por uma MT com movimento estático Basta não utilizar o movimento estático Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 422 / 468
  • 142.
    Linguagens Irrestritas –Máquinas de Turing MT Multitrilhas Fita é dividida em múltiplas trilhas, mantendo uma única cabeça de leitura/gravação Máquina com duas trilhas: (qi, [x, y]) = [qj, [z, w], m], onde m 2 {E, D} x = símbolo a ser lido da Fita 1 y = símbolo a ser lido da Fita 2 z = símbolo a ser gravado na Fita 1 w = símbolo a ser gravado na Fita 2 Uma linguagem L é aceita por uma MT com duas trilhas sse é aceita por uma MT padrão (por quê?) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 423 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT multitrilha, então é aceita por uma MT padrão Assuma uma MT com duas trilhas Trilha 1: x0 x1 x2 x3 x4 x5 . . . Trilha 2: y0 y1 y2 y3 y4 y5 . . . 1 Intercale as trilhas em uma única fita como a seguir: Fita: x0 y0 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 . . . 2 Adapte as transições [x/y w/z M] como a seguir: [x/y w/z M] =) [x/y D] e [w/z D] Quando M = E, deve-se recuar o número de trilhas ⇥ 2 No nosso exemplo (2 trilhas), fazem-se 4 transições [ / E] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 424 / 468 Linguagens Irrestritas – Máquinas de Turing (volta) Se uma linguagem L é aceita por uma MT padrão, então é aceita por uma MT multitrilha Basta utilizar somente uma trilha i.e., as demais terão sempre transições B/B Dessa forma, uma transição [x/y D] em uma MT padrão ficaria da seguinte forma em uma MT com n trilhas: [x/y B2/B2 B3/B3 . . . Bn/Bn D] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 425 / 468 Linguagens Irrestritas – Máquinas de Turing MT Multifitas Máquina com k fitas e k cabeças de leitura/gravação Máquina lê as k fitas simultaneamente (de forma síncrona) Transição consulta: Estado atual (único) Símbolos lidos por cada uma das cabeças Uma transição pode: Mudar o estado Escrever um símbolo em cada uma das fitas Reposicionar de forma independente cada uma das cabeças de leitura/gravação Uma linguagem L é aceita por uma MT Multifitas sse é aceita por uma MT padrão (por quê?) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 426 / 468
  • 143.
    Linguagens Irrestritas –Máquinas de Turing MT Multifitas Entrada é escrita na Fita 1 Todas as outras fitas estão em branco (BBBBB...) Todas as fitas começam com a cabeça de leitura/gravação na posição 0 Exercício de Fixação MT para reconhecer as seguintes linguagens: L1 = {ai bi | i > 0} L2 = {wdw | w 2 {a, b, c}⇤ } L3 = {wcwr | w 2 {a, b}⇤ } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 427 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT multifita, então é aceita por uma MT padrão Assuma uma MT com duas fitas #1: B a b c B . . . #2: B x y z B . . . Assuma também as seguintes configurações: #1: B qi a b c B . . . (i.e., cabeça de leitura/gravação aponta para a) #2: B x y qi z B . . . (i.e., cabeça de leitura/gravação aponta para z) 1 Concatene as fitas separadas por # Fita: B a b c B # B x y z B . . . 2 Estenda o alfabeto da fita como a seguir: 8x 2 ! x 2 0 ^ ˆx 2 0 (são adicionados ˆB, ˆa, ˆb, ˆc, ˆx, ˆy e ˆz) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 428 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT multifita, então é aceita por uma MT padrão 3 Dessa forma, os símbolos “acentuados” correspondem aos símbolos que estão com a cabeça de leitura/gravação: Fita: B ˆa b c B # B x y ˆz B . . . 4 A cabeça de leitura/gravação sempre se inicia na Fita #1: Fita: B qi0 ˆa b c B # B x y ˆz B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 429 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT multifita, então é aceita por uma MT padrão 5 A computação para uma transição [a/x D z/c E] será realizada como a seguir: Substitua ˆa por x na “Fita #1” “Acentue” o próximo símbolo da “Fita #1” (b ! ˆb) Passe para a “Fita #2” (após o símbolo #) Procure por ˆz (caso não ache, pare) Substitua ˆz por c “Acentue” o símbolo anterior da “Fita #2” (y ! ˆy) Retorne à “Fita #1” parando no símbolo “acentuado” e compute a próxima transição Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 430 / 468
  • 144.
    Linguagens Irrestritas –Máquinas de Turing (volta) Se uma linguagem L é aceita por uma MT padrão, então é aceita por uma MT multifita Basta utilizar somente uma fita i.e., as demais terão sempre transições B/B S Dessa forma, uma transição [x/y D] em uma MT padrão ficaria da seguinte forma em uma MT com n fitas: [x/y D B2/B2 S B3/B3 S . . . Bn/Bn S] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 431 / 468 Linguagens Irrestritas – Máquinas de Turing MT Não-Determinísticas Modificação da função de transição de estados: : Q ⇥ ! P(Q ⇥ ⇥ {E, D}) P(X): conjunto potência de X (todos subconjuntos de X) Exemplo de transição: (q1, c) = {[q1, c, D], [q2, c, D], [q3, C, E]} ND não aumenta o poder de expressão de MTs Uma linguagem L é aceita por uma MT Não-Determinística sse é aceita por uma MT padrão (por quê?) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 432 / 468 Linguagens Irrestritas – Máquinas de Turing Exercício de Fixação MT para reconhecer as seguintes linguagens: Palavras contendo um c precedido ou sucedido por ab L = {ww | w 2 {a, b}⇤ } Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 433 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão Prova é feita assumindo uma MT multifita uma vez já provamos ter o mesmo poder computacional Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 434 / 468
  • 145.
    Linguagens Irrestritas –Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão Assuma 3 fitas: #1: B a b b B . . . (palavra de entrada) #2: q0B a b b B # . . . (configurações iniciando com a 1a ) #3: B B B B B . . . (configuração em execução) Loop 1 Mova a 1a configuração da Fita #2 para Fita #3 2 Execute a MTND sobre a configuração presente na Fita #3 Caso não haja transições, verifique se é igual a palavra de entrada. Se for, pare e aceite. Se não for, pule para o passo (3) Caso haja uma transição possível, execute e concatene a configuração resultante + “#” na Fita #2 Caso hajam várias transições possíveis (ND), concatene todas as configurações resultantes + “#” na Fita #2 3 Apague Fita #3 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 435 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão Exemplificando: Assuma Lexemplo = {w 2 {a, b}⇤ | w termina com b} Assuma a seguinte MTND M em que L(M) = Lexemplo q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D Simule a execução da MTND em uma MT padrão com a palavra abb Antes, construa a árvore de computações possíveis para o melhor entendimento Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 436 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: q0B a b b B # . . . (configurações iniciando com a 1a ) #3: B B B B B . . . (configuração em execução) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B B B B B . . . (mover 1a ) #3: q0B a b b B . . . (executar) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
  • 146.
    Linguagens Irrestritas –Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B q1a b b B # . . . (transição resultante) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B B B B B . . . (mover 1a ) #3: B q1a b b B . . . (executar) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a q1b b B # . . . (transição resultante) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B B B B B . . . (mover 1a ) #3: B a q1b b B # . . . (executar, ND) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
  • 147.
    Linguagens Irrestritas –Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b q1b B # B a b q2b B # . . . (transições resultantes) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b q2b B # . . . (mover 1a ) #3: B a b q1b B # (executar, ND) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b q2b B # B a b b q1B # B a b b q2B # . . . (transições res.) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b b q1B # B a b b q2B # . . . (mover 1a ) #3: B a b q2b B # (executar, para e rejeita) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
  • 148.
    Linguagens Irrestritas –Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b b q1B # B a b b q2B # . . . (antigas transições resultantes) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b b q2B # . . . (mover 1a ) #3: B a b b q1B # (executar, para e rejeita) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b b q2B # . . . (antiga transição resultante) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B B B B B . . . (mover 1a ) #3: B a b b q2B # . . . (executar) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468
  • 149.
    Linguagens Irrestritas –Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B a b b B q3 . . . (transição resultante) #3: B B B B B . . . Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (ida) Se uma linguagem L é aceita por uma MT Não-Determinística, então é aceita por uma MT padrão q0 q1 q2 q3 B/B D a/a D b/b D b/b D B/B D #1: B a b b B . . . (palavra de entrada) #2: B B B B B . . . (mover 1a ) #3: B a b b B q3 . . . (executar, para e aceita) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 437 / 468 Linguagens Irrestritas – Máquinas de Turing (volta) Se uma linguagem L é aceita por uma MT padrão, então é aceita por uma MT Não-Determinística Basta não utilizar transições não-determinísticas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 438 / 468 Linguagens Irrestritas – Máquinas de Turing MT Enumeradoras de Linguagens MT vistas até o momento são aceitadoras de linguagens: Entrada: palavra de acordo com um alfabeto Saída: palavra válida (parada em estado final) ou inválida MT Enumeradoras de Linguagens Máquina com k-fitas (multi-fita) Não possui entrada Saída: grava (ou enumera) todas as palavras de uma linguagem em uma de suas fitas (chamada fita de saída) Se linguagem for infinita, MT enumeradora não para Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 439 / 468
  • 150.
    Linguagens Irrestritas –Máquinas de Turing MT Enumeradoras de Linguagens Uma MT com k-fitas E = (Q, ⌃, , , q0) enumera uma linguagem L se: Sua computação começa com todas fitas vazias Fita 1 é chamada de fita de saída A cada transição, cabeça da Fita 1 permanece parada (S) ou se move para a direita (D) Parte “não-branca” da Fita 1 tem uma das formas: B#u1#u2#...#uk # ou B#u1#u2#...#uk #v onde ui 2 L e v 2 ⌃⇤ ui é escrito na Fita 1 (entre #0s) sse ui 2 L Definição não requer que a máquina pare (mesmo que a linguagem seja finita) Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 440 / 468 Linguagens Irrestritas – Máquinas de Turing Exemplo MT para enumerar a linguagem L = {aibi | i > 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 441 / 468 Linguagens Irrestritas – Máquinas de Turing Exemplo MT para enumerar a linguagem L = {aibi | i > 0} q0 q2 q3 q4 [B/B D, B/B D] [B/# D, B/X S] [B/B S, B/B D] [B/a D, X/X E] [B/# D, B/X S] [B/b D, X/X D] Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 441 / 468 Linguagens Irrestritas – Máquinas de Turing Exemplo Descrição do funcionamento da MT anterior: Escreve ## na F1 (já que 2 L) Escreve “X” na posição 1 da F2 Loop: q3: volta na F2: para cada X, escreve a na F1 q4: avança na F2: para cada X, escreve b na F1 q4 para q3: escreve X no final da F2 e escreve # na F1 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 442 / 468
  • 151.
    Linguagens Irrestritas –Máquinas de Turing Exercício de Fixação MT para enumerar a linguagem L = {aibici | i 0} Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 443 / 468 Linguagens Irrestritas Teoremas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 444 / 468 Linguagens Irrestritas – Teoremas Linguagem Recursiva MT decide uma linguagem L, logo L é recursiva (LSC) Uma MT decide uma linguagem L se ela para para todas as possíveis palavras de entrada (⌃⇤ ) Teorema #5: L é recursiva se, e somente se, L pode ser enumerada em ordem lexicográfica Deve-se provar que: (ida) se L é recursiva, então L pode ser enumerada em ordem lexicográfica (volta) Se L pode ser enumerada em ordem lexicográfica, então L é recursiva Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 445 / 468 Linguagens Irrestritas – Teoremas Teorema #5 (ida) se L é recursiva, então L pode ser enumerada em ordem lexicográfica Seja M a MT que decide L Seja E⇤ uma MT que enumera ⌃⇤ em ordem lexicográfica Prova consiste em mostrar que pode-se construir uma MT E que enumera L em ordem lex. como a seguir: loop: Rode E⇤ e produza uma palavra u (em ordem lex.) Rode M com u Se M aceita u, escreva u na fita de saída de E Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 446 / 468
  • 152.
    Linguagens Irrestritas –Teoremas Teorema #5 (explicação gráfica) (ida) se L é recursiva, então L pode ser enumerada em ordem lexicográfica Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 447 / 468 Linguagens Irrestritas – Teoremas Teorema #5 (explicação gráfica) (ida) se L é recursiva, então L pode ser enumerada em ordem lexicográfica Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 447 / 468 Linguagens Irrestritas – Teoremas Teorema #5 (volta) Se L pode ser enumerada em ordem lexicográfica, então L é recursiva Se L for finita, então L é imediatamente recursiva Se L for infinita e puder ser enumerada em ordem lex.: Seja E a MT que enumera L em ordem lex. Prova consiste em mostrar que pode-se construir uma máquina M que decide L como a seguir: Rode E, sendo que toda vez que E escrever uma palavra w na fita de saída, M deve verificar se: lo(w) == lo(u): M para e aceita u lo(w) < lo(u): execução de E prossegue lo(w) > lo(u): M para e rejeita u Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 448 / 468 Linguagens Irrestritas – Teoremas Teorema #5 (explicação gráfica) (volta) Se L pode ser enumerada em ordem lexicográfica, então L é recursiva Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 449 / 468
  • 153.
    Linguagens Irrestritas –Teoremas Teorema #5 (explicação gráfica) (volta) Se L pode ser enumerada em ordem lexicográfica, então L é recursiva Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 449 / 468 Linguagens Irrestritas – Teoremas Linguagem Recursivamente Enumerável MT reconhece uma linguagem L, logo L é recursivamente enumerável (LI) Uma MT reconhece uma linguagem L se ela para para todas as palavras de L, mas pode não parar para as palavras que não estão em L Teorema #6: Uma linguagem é rec. enumerável se, e somente se, ela puder ser enumerada por uma MT Deve-se provar que: (ida) se L é RE, então L é enumerada por uma MT (volta) se L é enumerada por uma MT, então L é RE Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 450 / 468 Linguagens Irrestritas – Teoremas Teorema #6 (volta) se L é enumerada por uma MT, então L é RE Seja E a MT que enumera L Prova consiste em mostrar que pode-se construir uma máquina M que reconhece L M recebe como entrada uma palavra u 2 ⌃⇤ Sempre que E escrever uma palavra w na fita de saída, M verifica se w == u. Se for, M para em um estado final Veja que M não vai parar se u 62 L Porém, definição de RE não exige parada em caso de palavras não pertencentes à linguagem Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 451 / 468 Linguagens Irrestritas – Teoremas Teorema #6 (explicação gráfica) (volta) se L é enumerada por uma MT, então L é RE Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 452 / 468
  • 154.
    Linguagens Irrestritas –Teoremas Teorema #6 (explicação gráfica) (volta) se L é enumerada por uma MT, então L é RE Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 452 / 468 Linguagens Irrestritas – Teoremas Teorema #6 (ida) se L é RE, então L é enumerada por uma MT Primeira tentativa (“gerar-e-testar via força bruta”): Seja M a MT que reconhece palavras de L Prova consiste em mostrar que pode-se construir uma MT E que enumera L Para cada palavra u 2 ⌃⇤ (i.e., gerar todas palavras de ⌃) Se M aceitar u, escrever u na fita de saída de E Essa tentativa não funciona, pois: Requer que todas palavras de u sejam geradas (ok) Porém, ao se gerar uma palavra inválida, M pode não parar ao analisar u Com isso, próximas palavras de u não serão geradas e testadas Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 453 / 468 Linguagens Irrestritas – Teoremas Teorema #6 (explicação gráfica do porquê força bruta falha) (ida) se L é RE, então L é enumerada por uma MT Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 454 / 468 Linguagens Irrestritas – Teoremas Ordem Lexicográfica Ordem lexicográfica de ⌃: função que mapeia palavras de ⌃ para números naturais Seja ⌃ = {a1, ..., an} um alfabeto. A ordem lexicográfica lo de ⌃ é definida recursivamente como: Base: lo( ) = 0, lo(ai) = i Passo recursivo: lo(aiu) = lo(u) + i ⇤ ntam(u) Exemplo: ⌃ = {a, b, c} e a1 = a, a2 = b, a3 = c lo( )= 0, lo(a)= 1, lo(b)= 2, lo(c)= 3, lo(aa)= 4, lo(ba)= 7, lo(ca)= 10, lo(aaa)=13, lo(aba)=16, lo(ab)= 5, lo(bb)= 8, lo(cb)= 11, lo(aab)=14, lo(abb)=17, lo(ac)= 6, lo(bc)= 9, lo(cc)= 12, lo(aac)=15, lo(abc)=18, Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 455 / 468
  • 155.
    Linguagens Irrestritas –Teoremas Preparando a Prova Suponha as palavras de ⌃ em ordem lexicográfica , u1, u2, u3, ... Seja a seguinte tabela: Os pares dessa tabela podem ser enumerados “pelas diagonais”: [ , 0], [ , 1], [u1, 0], [ , 2], [u1, 1], [u2, 0], [ , 3], [u1, 2], ... Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 456 / 468 Linguagens Irrestritas – Teoremas Voltando à Prova Significado de par [i,j]: rode M com entrada ui por j passos Finalmente, a prova que ficou pendente "Ida": se L é RE, então L é enumerada por uma MT Seja M a MT que reconhece L Prova consiste em mostrar que pode-se construir uma MT E que enumera L Para cada par ordenado [i, j] Rode M com entrada ui por j passos (ou até M parar) Se M aceitar ui , escrever ui na fita de saída de E Cada palavra ui 2 ⌃⇤ vai ser testada com 0, 1, 2, 3, ... passos Se ui for válida, M vai parar para algum número k de passos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 457 / 468 Linguagens Irrestritas – Teoremas Teorema #6 (explicação gráfica) (ida) se L é RE, então L é enumerada por uma MT Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 458 / 468 7. Considerações Finais – Conteúdo 1 Revisão 3 2 Introdução 59 Autômatos Finitos Determinísticos Autômatos Finitos Não-Determinísticos Autômatos Finitos Não-Determinísticos com Transições- 3 Linguagens Regulares 74 Máquina de Moore Máquinas de Mealy Algoritmos de Transformação Transformação AFND- para AFD Minimização de AFD Transformação de ER para AFND- Recursividade Árvore de Derivação Ambiguidade Backus-Nahur Form (BNF) 4 Linguagens Livres de Contexto 172 Remoção de recursividade no símbolo inicial Eliminação de regras Eliminação de regras de cadeia Remoção de símbolos inúteis Variantes Critérios de Aceitação Autômato com Pilha como Reconhecedor Autômato com Pilha Descendente Algoritmo de Cocke-Younger-Kasami (CYK) Algoritmo de Early Transformação de GLCs para APs Transformação de APs para GLCs 5 Linguagens Sensíveis ao Contexto 373 Teoremas 6 Linguagens Irrestritas 393 Variantes Hierarquia de Chomsky 460 Tese de Church-Turing 462 7 Considerações Finais 459 Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 459 / 468
  • 156.
    Considerações Finais Hierarquia deChomsky Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 460 / 468 Considerações Finais – Hierarquia de Chomsky Hierarquia de Chomsky Tipo Linguagem Gramática Máquina de aceitação 0 Rec. enumerável Irrestrita Máquina de Turing 1 Recursiva Sensível ao contexto Autômato linearmente limitado 2 Livre de contexto Livre de contexto Autômato com pilha 3 Regular Regular Autômato finito Toda categoria é um subconjunto próprio da categoria superior Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 461 / 468 Considerações Finais Tese de Church-Turing Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 462 / 468 Considerações Finais – Tese de Church-Turing “Toda ‘função naturalmente computável’ pode ser computada por uma Máquina de Turing.” A tese não pode ser formalmente provada O que é uma função naturalmente computável? No entanto, pode ser refutada Basta a descoberta de uma máquina mais poderosa que uma Máquina de Turing Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 463 / 468
  • 157.
    Considerações Finais –Tese de Church-Turing Linguagens de Programação Se uma LP é capaz de manipular uma MT de uma única fita, essa LP é capaz de expressar qualquer algoritmo Normalmente, LPs provêem abstrações mais elaboradas O poder de computação, contudo, é o mesmo de uma MT Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 464 / 468 Agradecimentos Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 465 / 468 Agradecimentos Kleber Marchetti Antunes Gostaria de agradecer ao aluno pela tarefa de conversão inicial da apostila em formato ppt para LaTeX Alberto Hokari Gostaria de agradecer ao aluno pelos desenhos das máquinas em formato TikZ e ao desenvolvimento do material de CYK Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 466 / 468 Referências I P. F. Blauth Menezes. Linguagens formais e autômatos, volume 3. Bookman, 6 edition, 2011. S. L. G. de Oliveira. Algoritmos e seus fundamentos. Editora UFLA, 2011. J. E. Hopcroft and J. D. Ullman. Formal languages and their relation to automata. Addison-Wesley, 1969. J. E. Hopcroft and J. D. Ullman. Introduction to Automata Theory, Languages, and Computation. Addison-Wesley, 1979. M. Sipser. Introdução à Teoria da Computação. Thompson, 2007. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 467 / 468
  • 158.
    Referências II T. A.Sudkamp. Languages and machines: an introduction to the theory of Computer Science. Addison-Wesley, 2 edition, 2005. M. T. Valente. Notas de aula da disciplina Fundamentos Teóricos da Computação. Programa de Pós-graduação em Informática, PUC Minas, 2007. N. J. Vieira. Introdução aos Fundamentos da Computação: Linguagens e máquinas. Thomson, 2006. N. J. Vieira. Notas de aula da disciplina fundamentos da teoria da computação. Bacharelado em Ciência da Computação, UFMG, 2009. Ricardo Terra (rterrabh [at] gmail.com) Linguagens Formais e Autômatos (LFA) Maio, 2017 468 / 468