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 Xb Xc ©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 Xb Xc 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 Xb Xc 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 SbX ScX XbY YaY Yε (b|c)ba* ©Clarisse S. de Souza, 2013 GRE Final SXb SXc XYb YYa 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