DCC063
Linguagens Formais
e Autômatos
Análise sintática ascendente (Bottom-up)
Construção de um AP que aceita uma LLC gerada
por uma GLC.
Técnica simétrica àquela empregada para
transformar uma GLC em um AP não determinístico.
Constrói uma árvore de análise sintática
partindo das folhas em direção à raiz, razão pela qual essa classe de métodos é chamada
ascendente.
Análise Sintática Descendente
Baseadas em AP
Análise sintática ascendente (Bottom-up)
Sejam
G = (N, T, P, S) uma gramática livre de contexto e
M = (, , Q, p, F, ) o autômato de pilha a ser
construído a partir de G.
Como M deve aceitar L(G), é claro que seu
alfabeto de entrada tem que ser igual a T.
3
Análise sintática ascendente (Bottom-up)
Construção de AP por meio de GLC
o alfabeto de entrada = T; (alfabeto de entrada é igual conjunto de terminais de G)
o alfabeto da pilha = TN; (alfabeto de pilha é a união de terminais e não terminais de G)
o conjunto de estados Q = {p, q};
o estado inicial p;
o conjunto de estados finais F = {q};
4
Análise sintática ascendente (Bottom-up)
a função de transição
é definida por
5
Autômatos de Pilha
( ) ( ) ( ) : Q T T N * →Q T N
Análise sintática ascendente (Bottom-up)
As transições do tipo 1 empilham símbolos de
entrada;
Transições do tipo 2 substituem o lado direito de
uma regra, contido na pilha, pelo correspondente lado esquerdo (o lado direito é encontrado ao revés na pilha);
Transições do tipo 3 encerram uma computação
transitando para o estado final, deixando a pilha vazia ao retirar o S (não terminal inicial).
6
Análise sintática ascendente (Bottom-up)
Exemplo. Desenvolver o AP M para a gramática:
E → E + T | T T → T * F | F F → (E) | id
7
Análise sintática ascendente (Bottom-up)
Aplicando-se o método apresentado, obtém-se o
AP M:
1. (p, a, ) → (p, a) para cada a
2. (p, , T+E) → (p, E)
3. (p, , T) → (p, E)
4. (p, , F*T) → (p, T)
8
Autômatos de Pilha
E → E + T | T T → T * F | F F → (E) | id
5. (p, , F) → (p, T)
6. (p, , )E( ) → (p, F)
7. (p, , id) → (p, F)
Análise sintática ascendente (Bottom-up)
Um computação para a entrada id*(id) é
mostrada abaixo:
9
Autômatos de Pilha
𝑝, 𝑖𝑑 ∗ 𝑖𝑑 , 𝜀 ⊢1
𝑝,∗ 𝑖𝑑 , 𝑖𝑑 ⊢7
𝑝,∗ 𝑖𝑑 , 𝐹 ⊢5
𝑝,∗ 𝑖𝑑 , 𝑇 ⊢1
𝑝, 𝑖𝑑 ,∗ 𝑇 ⊢1
𝑝, 𝑖𝑑), (∗ 𝑇 ⊢1
𝑝, ), 𝑖𝑑(∗ 𝑇 ⊢7
𝑝, ), 𝐹(∗ 𝑇 ⊢5
𝑝, ), 𝑇(∗ 𝑇 ⊢3
𝑝, ), 𝐸(∗ 𝑇 ⊢1
𝑝, 𝜀, )𝐸(∗ 𝑇 ⊢6
𝑝, 𝜀, 𝐹 ∗ 𝑇 ⊢4
𝑝, 𝜀, 𝑇 ⊢3
𝑝, 𝜀, 𝐸 ⊢8
𝑞, 𝜀, 𝜀
Análise sintática ascendente (Bottom-up)
M é um dispositivo não-determinístico.
Em qualquer ponto, M pode empilhar (shift,
deslocar) um terminal da cadeia de entrada.
Da mesma forma, M pode reconhecer, no topo da
pilha, uma cadeia que corresponda ao lado direito invertido de uma regra de G, podendo assim reduzir (reduce) essa cadeia ao não terminal do lado esquerdo.
10
Análise sintática ascendente (Bottom-up)
A sequência de regras, correspondentes aos
passos de redução, espelha, em ordem reversa, uma derivação mais a direita da entrada:
11
Autômatos de Pilha
E T T*F T*(E) T*(T) T*(F)
Tipos de Linguagem
Autômatos de 2 Pilhas
12
Tipo 0 Linguagens Irrestritas (rec. enumeráveis) Tipo 1 Linguagens Sensíveis ao Contexto
Tipo 2 Linguagens Livres de Contexto Tipo 3 Linguagens Regulares
Gramáticas sensíveis ao contexto (tipo 1) e gramáticas recursivamente enumeráveis (tipo 0)
13
Autômatos de 2 Pilhas
Inclui todas as linguagens que podem ser
reconhecidas por uma máquina de Turing;
Abrangem as outras gramáticas; Tipo 0 ou Irrestritas:
𝑃 = 𝛼 → 𝛽 𝛼 ∈ 𝑁 ∪ 𝑇 +, 𝛽 ∈ 𝑁 ∪ 𝑇 ∗
A diferença entre essas gramáticas é que no tipo
1 (sensível ao contexto), obrigatoriamente 𝛼 ≤
Exemplos:
14
Autômatos de 2 Pilhas
𝐺 = ൮
൲
𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝑆 , 𝑎, 𝑏, 𝑐, 𝑑 , 𝑃 =
𝑆 → 𝐴𝐵 𝐴𝐵 → 𝐶𝑑𝐸𝐵
𝐴𝑏𝑐𝑑 → 𝑎𝑏𝐶𝐷𝐵𝑐𝑑 𝐵 → 𝑏
Exemplos: 𝐿𝑎𝑏𝑐 = 𝑎𝑛𝑏𝑛𝑐𝑛 𝑛 ≥ 0
15
Autômatos de 2 Pilhas
𝐺 = 𝑆, 𝐴, 𝐵, 𝐶 , 𝑎, 𝑏, 𝑐 , 𝑃 =
𝑆 → 𝑎𝑆𝐵𝐶|𝜀 𝐶𝐵 → 𝐵𝐶
𝑎𝐵 → 𝑎𝑏 𝑏𝐵 → 𝑏𝑏 𝑏𝐶 → 𝑏𝑐
𝑐𝐶 → 𝑐𝑐
Principais características de AP de 2 Pilhas
16
Autômatos de 2 Pilhas
Possuem poder computacional equivalente ao de
uma máquina de Turing;
Diferentemente de autômatos com uma pilha, o
não-determinismo não aumenta seu poder computacional;
Se um autômato com duas pilhas é equiparável à
Principais características de AP de 2 Pilhas
17
Autômatos de 2 Pilhas
Errado. Um autômato com três ou mais pilhas
contém o mesmo poder computacional que um autômato de duas pilhas;
Autômato com Duas Pilhas ou Autômato com
Pilhas possui a memória de entrada separada das memórias de trabalho e de saída;
Essas estruturas auxiliares são do tipo pilha, e
Um AP de 2 Pilhas é composto por:
18
Autômatos de 2 Pilhas
Fita: dispositivo de entrada que contém a
informação a ser processada;
Duas Pilhas: memórias auxiliares que podem ser
usadas livremente para leitura e gravação;
Unidade de Controle, Cabeça da Fita, Função de
Transição e
Topo das Pilhas: move para cima ao gravar e para
Definição formal
19
Autômatos de 2 Pilhas
Um AP de 2 pilhas é uma 6-tupla
𝑀 = (Σ, Γ, 𝑄, 𝑞1, 𝐹, 𝛿), onde: Σ → alfabeto de entrada
Γ → alfabeto das pilhas
𝑄 → conjunto de estados
𝛿 → função de transição
𝑞1 → estado inicial
Definição formal
20
Autômatos de 2 Pilhas
A função programa considera:
o estado corrente;
o símbolo lido da fita (pode ser omitido);
o símbolo lido de cada pilha (pode ser omitido)
Para determinar:
o novo estado;
e o símbolo gravado em cada pilha (pode ser
Representação da função programa
21
Autômatos de 2 Pilhas
p
𝜎, 𝛾, 𝑢, 𝛿, 𝑣
qEstado anterior
Símbolo lido da fita
Estado novo
Símbolo lido da pilha 1 (topo)
Cadeia gravada na pilha 1 (topo)
Símbolo lido da pilha 2 (topo)
Exemplo: AP com 2 Pilhas
22
Autômatos de 2 Pilhas
Desenvolver um AP2 M para 𝐿𝑎𝑏𝑐 = 𝑎𝑛𝑏𝑛𝑐𝑛 𝑛 ≥ 0 :
q p
(a, , a, , )
M
r
(b, a, , , c)
(b, a, , , c)
(c, , , c, )
23
Autômatos de 2 Pilhas
Desenvolver um AP2 para
𝐿𝑛2𝑛/2 = 𝑎𝑛𝑏2𝑛𝑐 𝑛2 𝑛 ≥ 0
Exemplo: AP com 2 Pilhas
q
(a, , bb, , c)
s
(b, b, , , )
(b, b, , , )
(c, , , c, )
(c, , , c, )
r
(, , , c, )
t
(, , , c, )
p
24
Autômatos de 2 Pilhas
Desenvolver um AP2 para
𝐿𝑎=𝑏=𝑐 = 𝑤 𝑤 ∈ 𝑎, 𝑏, 𝑐 ∗, 𝑤 𝑎 = 𝑤 𝑏 = 𝑤 𝑐
Exemplo: AP com 2 Pilhas
q p
(a, , , $, a$)
(, , $, , $)
(b, , , $, b$) (c, , , $, c$) (a, $, a$, , )
(b, $, b$, , ) (c, $, c$, , )
(a, , , a, aa) (b, , , b, bb)
(c, , , c, cc) (a, a, aa, , )
(b, b, bb, , ) (c, c, cc, , )
r
(, $, , $, )
(a, b, , c, ) (a, c, , b, ) (b, a, , c, )
(c, b, , a, )
Complexidade das conversões em
LLC
Conversões lineares no comprimento da
representação GLC para AP
AP de estado final para AP de pilha vazia
AP de pilha vazia para AP de estado final
Conversão O(n3)
AP para GLC (tamanho da GLC também O(n3))
Conversão O(n2)
GLC para FNC (tamanho da FNC também O(n2))
Propriedades de decisão das LLC
Teste de linguagem vazia
Verificar se S é gerador
◼ Com estrutura de dados adequada, O(n)
Teste de pertinência numa LLC
O(n3), usando programação dinâmica,
preenchimento de tabela
S → AB | BC A → BA | a B → CC | b C → AB | a w = baaba
{S,A,C}
{S,A,C}
{B} {B}
{S,A} {B} {S,C} {S,A}
{B} {A,C} {A,C} {B} {A,C}
b a a b a
Problemas não decidíveis em LLC
Não há algoritmo para responder a estas
perguntas:
Uma dada GLC é ambígua?
Uma dada LLC é inerentemente ambígua?
A interseção de duas LLC é vazia?
Duas LLC dadas são a mesma linguagem?
Uma LLC é o “universo” *, em que é o seu
alfabeto?