Slides - DI PUC-Rio

Propaganda
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Linguagens Formais e Autômatos (LFA)
Aula de 16/09/2013
Conversões e Transformações
©Clarisse S. de Souza, 2013
1
Informática
PUC-Rio
INF1626 Linguagens Formais e Autômatos (2013-2)
Conversões de Gramáticas LR em LL e vice-versa
S
S
Qual é a ideia?
a
a
c
=
a
b
c
ε
a
ε
a
b
a
Seja GRD uma gramática linear à direita: Existe uma gramática GRE linear à
esquerda que gera o mesmo conjunto de cadeias que GRD?
©Clarisse S. de Souza, 2013
2
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Uma exploração interessante
As regras de LR, gerada por GRD, têm o seguinte padrão:
a cadeia β de toda produção α β é (Σ ∪ ε) . ((V-Σ) ∪ ε)
para Σ = alfabeto de LR e V = vocabulário da GRD que gera LR
Seja T a seguinte transformação definida sobre as produções de
GRD:
Para toda produção α β de GRD onde |β| > 1
•
criar uma produção α δ onde δ é o inverso de β
Para toda produção α β de GRD onde |β| ≤ 1
•
criar uma produção α δ idêntica a α β
Qual o perfil da linguagem LT gerada pelas produções
resultantes da transformações, se comparado a LR?
©Clarisse S. de Souza, 2013
3
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Exemplo
LR
S  aS
S  bX
Xb
Xc
©Clarisse S. de Souza, 2013
LΓ
S’  S’a
S’  X’b
X’  b
X’  c
4
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Exemplo
LR
S  aS
S  bX
Xb
Xc
LT
S’  S’a
S’  X’b
X’  b
X’  c
a*b(b|c)
©Clarisse S. de Souza, 2013
5
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Exemplo
LR
S  aS
S  bX
Xb
Xc
a*b(b|c)
©Clarisse S. de Souza, 2013
LT
S’  S’a
S’  X’b
X’  b
X’  c
(b|c)ba*
6
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Para gerar GRE a partir de GRD
Seja L uma linguagem LR e LRev e linguagem reversa de LR.
Seja GRDRev a gramática regular à direita capaz de gerar LRev
A gramática regular à esquerda GRE, que gera as mesmas cadeias
que LR, resulta das seguintes transformações sobre as produções
de GRDRev:
Para toda produção α β de GRDRev onde |β| > 1
•
criar uma produção α δ onde δ é o inverso de β
Para toda produção α β de GRDRev onde |β| ≤ 1
•
criar uma produção α δ idêntica a α β
Nosso desafio:
Encontrar GRDRev, a gramática regular à direita que gera LRev
©Clarisse S. de Souza, 2013
7
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
O valor de AF na busca da versão LL de LR
1. Para encontrar a linguagem reversa de LR,
invertemos a GRD que gera LR (= GRE de LRev)
GRD que gera LR
}
Note-se que as
expansões do símbolo
RAIZ (“S”) numa LR,
quando incluem um
terminal, indicam o
PREFIXO das cadeias
da linguagem que
definem.
©Clarisse S. de Souza, 2013
GRE que gera LRev
}
As expansões do símbolo
RAIZ (“S”) numa LL,
quando incluem um
terminal, indicam o
SUFIXO das cadeias
da linguagem que
definem.
8
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
O valor de AF na busca da versão LL de LR
2. Para encontrar GRDRev (gramática regular à direita
que gera LRev) podemos usar o AF de GRE:
GRE
S’  S’a
S’  X’b
X’  b
X’  c
(b|c)ba*
AFRev
estado inicial : q0
estado final : q2
Transições:
q0,b,q1 ................ S  b X
q0,c,q1 ................ S  c X
q1,b,q2 ................ X  b Y
q2,a,q2 ................ Y  a Y | ε
GRDRev
(b|c)ba*
©Clarisse S. de Souza, 2013
9
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
O valor de AF na busca da versão LL de LR
3. A GRE que gera o mesmo conjunto de cadeias de LR é
o resultado da inversão das regras de GRDRev
GRDRev
SbX
ScX
XbY
YaY
Yε
(b|c)ba*
©Clarisse S. de Souza, 2013
GRE Final
SXb
SXc
XYb
YYa
Yε
a*b(b|c)
10
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Aspectos interessantes de estruturas LR e LL
A linguagem de programação
PROLOG (baseada em lógica,
muito utilizada em aplicações
de Inteligência Artificial),
tem facilidades
interessantes para se
trabalhar com ‘Gramáticas’.
Uma destas facilidades é um
formalismo denominado
“Definite Clause Grammars”
ou DCG.
Neste formalismo, a GRD inicial
(que gera LR) se escreve
assim:
s --> [a], s.
s --> [b], x.
x --> [b].
x --> [c].
©Clarisse S. de Souza, 2013
O uso de ‘[ ]’ marca
os terminais do alfabeto
de GRD. Os demais
literais marcam os não
terminais do vocabulário
de GRD.
11
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Execução de uma “consulta à base gramatical”
s(S,[]).
Mostre TODAS
as formas de
instanciar a
variável “S” de
tal modo a
SATISFAZER a(s)
regra(s) relativa(s)
ao nó “s” da
gramática.
Base Gramatical
©Clarisse S. de Souza, 2013
12
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Como o Prolog busca “respostas” para consultas
Uma consulta constitui uma “meta” a ser provada.
O Prolog busca satisfazer a “meta” em questão, varrendo
toda a sua base de fatos e regras, de cima para
baixo, da esquerda para a direita.
Ao encontrar uma condição que satisfaz a meta, uma
resposta é produzida e a busca por uma nova resposta
possível é retomada.
Observem no próximo slide o que ocorre se alteramos a
ordem das cláusulas na base gramatical do programa.
©Clarisse S. de Souza, 2013
13
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
“Stack Overflow” se 1a cláusula da base é recursiva
Se a regra recursiva
s --> [a], s. for retirada
da base gramatical
(ou reposicionada) podem-se
fazer novamente consultas
sem riscos de
“stack overflow”.
©Clarisse S. de Souza, 2013
14
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
A GRE gera a linguagem reversa de LR (LRev)
GRE=GRD invertida
(gera LRev)
©Clarisse S. de Souza, 2013
15
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
A GRDRev (GRD que gera a linguagem LRev)
©Clarisse S. de Souza, 2013
16
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
A GRE equivalente à GRD, ambas gerando a*b(b|c)
Várias ordens
alternativas das
regras vão sempre
acabar em “overflow”.
A menos de um desvio
de controle na estrutura
de execução, o Prolog
tem problemas com
estruturas que se
expandem “à esquerda”
(ou “primeiro” [antes] do
que uma solução que é
terminal, não se expande).
O teste de alternativas
frequentemente leva a
“overflow”.
Quase... Por que o “stack overflow”?
©Clarisse S. de Souza, 2013
Eis um exemplo de por que
interessa saber e poder
converter LL’s em LR’s!
Se recebemos uma base
LL para trabalhar, podemos
transformá-la em LR.
Da mesma forma perceber
que as condições de
parada devem preceder
17 as
de expansão é fundamental.
INF1626 Linguagens Formais e Autômatos (2013-2)
Informática
PUC-Rio
Exercícios
Criar uma GRE para LR’s definidas a seguir:
1.
S  a A; A  b C; A b D ; C  c C; C  c; D  d
2. (a(b|c)*)+ | d*e+
3. AF
©Clarisse S. de Souza, 2013
18
Download