Linguagens Livres do Contexto
Linguagens Livres do Contexto
Linguagens Livres do Contexto
• Para as LLC, temos as Gramáticas Livres do Contexto;
• Tais gramáticas podem descrever certas características que possuem estrutura recursiva, o que as torna úteis em uma variedade de aplicações;
Linguagens Livres do Contexto
• Para as LLC, temos as Gramáticas Livres do Contexto; • Tais gramáticas podem descrever certas características
que possuem estrutura recursiva, o que as torna úteis em uma variedade de aplicações;
• GLC foram primeiramente utilizadas no estudo de linguagens humanas;
Linguagens Livres do Contexto
• Para as LLC, temos as Gramáticas Livres do Contexto; • Tais gramáticas podem descrever certas características
que possuem estrutura recursiva, o que as torna úteis em uma variedade de aplicações;
• GLC foram primeiramente utilizadas no estudo de linguagens humanas;
• Exemplo de estudo:
▫ “Tribo do Amazonas causa guerra na lingüística”
Linguagens Livres do Contexto
• Uma aplicação importante de GLC ocorre na especificação e compilação de linguagens de programação;
Linguagens Livres do Contexto
• Uma aplicação importante de GLC ocorre na especificação e compilação de linguagens de programação;
• A maioria dos compiladores e interpretadores contém um componente chamado analisador sintático que extrai o significado de um programa antes e gerar o código
Linguagens Livres do Contexto
• Várias metodologias facilitam a construção de um analisador uma vez que a GLC esteja disponível;
Linguagens Livres do Contexto
• Várias metodologias facilitam a construção de um analisador uma vez que a GLC esteja disponível;
• Algumas ferramentas até geram automaticamente o analisador a partir da gramática;
Linguagens Livres do Contexto
• Várias metodologias facilitam a construção de um analisador uma vez que a GLC esteja disponível;
• Algumas ferramentas até geram automaticamente o analisador a partir da gramática;
• A coleção de linguagens associadas com GLC são
Linguagens Livres do Contexto
• Várias metodologias facilitam a construção de um analisador uma vez que a GLC esteja disponível;
• Algumas ferramentas até geram automaticamente o analisador a partir da gramática;
• A coleção de linguagens associadas com GLC são
denominadas Linguagens Livres do Contexto (LLC); • Elas incluem todas as linguagens regulares e muitas
Linguagens Livres do Contexto
Recursivamente enumeráveis Recursivas
Sensíveis ao contexto Livres regulares contexto
Linguagens Livres do Contexto
• Um exemplo de GLC:
• Por exemplo, a gramática apresentadas gera a cadeia 000#111.
Linguagens Livres do Contexto
• Um exemplo de GLC:
• Cadeia:
Exemplos de LLC
• As cadeiras ▫ a+a*a
▫ (a+a)*a
Exemplos de LLC
• As cadeiras ▫ a+a*a
▫ (a+a)*a
• podem ser geradas com a gramática apresentada;
• Um compilador traduz o código escrito em uma linguagem de programação para outra forma mais adequada para a execução;
Exemplos de LLC
• As cadeiras ▫ a+a*a
▫ (a+a)*a
• podem ser geradas com a gramática apresentada;
• Um compilador traduz o código escrito em uma linguagem de programação para outra forma mais adequada para a execução;
• Para fazer isso, o compilador extrai o significado do código em um processo chamado análise sintática;
Exemplos de LLC
• a+a*a
• (a+a)*a
• Para extrair o significado real (executável) da expressão, o compilador geralmente utiliza de uma das duas estratégias:
▫ Top-down
• Derivação para a cadeia: ▫ a+a*a
• Derivação para a cadeia: ▫ a+a*a
• Derivação para a cadeia: ▫ a+a*a
EXPR TERMO
EXPR
TERMO
• Derivação para a cadeia: ▫ a+a*a
EXPR
TERMO
EXPR
TERMO
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO FATOR EXPR +
TERMO
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO FATOR a EXPR +
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO TERMO * FATOR TERMO FATOR a EXPR +
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO FATOR * TERMO FATOR TERMO FATOR a EXPR +
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO FATOR * TERMO FATOR a TERMO FATOR a EXPR +
• Derivação para a cadeia: ▫ a+a*a EXPR TERMO * TERMO FATOR a FATOR a TERMO FATOR a EXPR +
• Feita uma seqüência completa, dizemos que a
expressão passou pela análise sintática, e ela pertence a linguagem que a gramática é capaz de gerar.
EXPR TERMO * TERMO FATOR a FATOR a TERMO FATOR a EXPR +
• Além dos conceitos relacionados com gramáticas, o compilador precisa gerar uma estrutura capaz de executar em uma máquina.
EXPR TERMO * TERMO FATOR a FATOR a TERMO FATOR a EXPR +
• A execução depende da natureza da máquina; • Existem, por exemplo:
▫ Máquina baseada em pilha;
Comumente utilizada na implementação de JVMs;
▫ Máquina baseada em registradores;
Utiliza variáveis para registrar resultados intermediários;
• Vamos apresentar um exemplo de execução da expressão na máquina baseada em pilha:
▫ O primeiro passo é identificar elementos que são relevantes ao processamento (não são itens
• Vamos apresentar um exemplo de execução da expressão na máquina baseada em pilha:
▫ O primeiro passo é identificar elementos que são relevantes ao processamento (não são itens
• Identificados os elementos, eles devem ser adicionados em uma pilha seguindo o percurso Pré-ordem;
• Pré-ordem:
• A expressão é uma SOMA
SOMA
• Pré-ordem:
• A expressão é uma variável:
▫ Exemplo: 10
PILHA
10 SOMA
• Pré-ordem: • A expressão é uma multiplicação; PILHA MULT. 10 SOMA
• Pré-ordem: • Variável... PILHA 10 MULT. 10 SOMA
• Pré-ordem: • Variável... PILHA 10 10 MULT. 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: SOMA PILHA 10 MULT. 10 10
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 10; PILHA 10 10 MULT. 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 10; ▫ Desempilha: R2 = 10; PILHA 10 MULT. 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 10; ▫ Desempilha: R2 = 10; ▫ Desempilha: Executar multiplicação: R1 * R2 PILHA MULT. 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ O resultado da multiplicação é empilhado: 100 PILHA 100 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 100; PILHA 100 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 100; ▫ Desempilha: R2 = 10; PILHA 10 SOMA
• Dada a pilha, a máquina pode avaliar toda a expressão: ▫ Desempilha: R1 = 100; ▫ Desempilha: R2 = 10; ▫ Desempilha:
Executar a operação de SOMA:
R1+R2
PILHA
• Dada a pilha, a máquina pode avaliar toda a expressão:
▫ O resultado da soma é empilhado:
110;
110
• Dada a pilha, a máquina pode avaliar toda a expressão:
▫ Desempilha:
R1=110;
PILHA
• Dada a pilha, a máquina pode avaliar toda a expressão:
▫ Desempilha:
R1=110;
▫ Topo da pilha aponta pra nulo: Pilha vazia!
Indica que R1 possui o resultado da expressão avaliada!!!
PILHA 10 10 MULT. 10 SOMA
• Relação com compiladores e arquitetura...
• Relação com compiladores e estrutura de dados...
Autômato com Pilha
• Semelhante ao autômato finito determinístico, mas com uma componente adicional:
Autômato com Pilha
• Semelhante ao autômato finito determinístico, mas com uma componente adicional:
▫ A pilha!
a b a a b
Autômato Finito Controle de
Controle de estado a b a a b a b a a b X Y Y X
Autômato com Pilha
• Semelhante ao autômato finito determinístico, mas com uma componente adicional:
▫ A pilha!
Autômato com Pilha Controle de
estado Autômato Finito
Autômato com Pilha
• Um autômato com pilha (AP) pode escrever símbolos sobre a fita e lê-los de volta mais tarde;
Autômato com Pilha
• Um autômato com pilha (AP) pode escrever símbolos sobre a fita e lê-los de volta mais tarde;
• Escrever um símbolo “empurra para baixo” todos os outros símbolos sobre a pilha;
Controle de estado a b a a b X Y Y X
Autômato com Pilha
• Em qualquer momento, o símbolo no topo da pilha pode ser lido e removido;
▫ O restante dos símbolos da pilha “volta a subir”;
▫ Política: LIFO
Last in, first out!
Controle de estado a b a a b X Y Y X
Autômato com Pilha
• Nos APs, a fila possui utilidade porque ela pode conter uma quantidade ilimitada de informação;
Autômato com Pilha
• Nos APs, a fila possui utilidade porque ela pode conter uma quantidade ilimitada de informação;
• Relembrando: um AFD é incapaz de reconhecer {anbn| n>0}
▫ Ele não é capaz de reconhecer porque possui memória limitada em torno do seu conceito de estado.
Autômato com Pilha
• Nos APs, a fila possui utilidade porque ela pode conter uma quantidade ilimitada de informação;
• Relembrando: um AFD é incapaz de reconhecer {anbn| n>0}
▫ Ele não é capaz de reconhecer porque possui memória limitada em torno do seu conceito de estado.
• Já os APs podem armazenar elementos em uma quantidade ilimitada (em sua pilha);
Autômato com Pilha
• Mecanismo informal para reconhecer a linguagem {anbn| n>0}
utilizando uma pilha:
▫ Leia símbolos da entrada. A medida que cada 0 é lido, empilhe-o. Assim que 1’s são vistos, desempilhe um 0 da pilha para cada 1 lido. Se a leitura da entrada
termina exatamente quanto a pilha fica vazia de 0’s, aceite a entrada. Se a pilha fica vazia enquanto 1’s permanecem ou se os 1’s terminam enquanto a pilha
ainda contém 0’s ou se quaisquer 0’s aparecem na entrada seguindo 1’s, rejeite a entrada.
Autômato com Pilha
Autômato com Pilha
• Os autômatos com pilha podem ser não-determinísticos;
• Os APs não-determinísticos não são equivalentes em poder se
comparados aos APs determinísticos, diferentemente da relação que existia entre AFNs e AFDs;
Autômato com Pilha
• Os autômatos com pilha podem ser não-determinísticos;
• Os APs não-determinísticos não são equivalentes em poder se
comparados aos APs determinísticos, diferentemente da relação que existia entre AFNs e AFDs;
• Nos nossos estudos, vamos focar nos APs não-determinísticos porque estes reconhecem as linguagens livres do contexto;
Autômato com Pilha
• Antes de desenharmos um autômato...• Escrevermos "a,b c" para indicar que quando a máquina está lendo o símbolo a da palavra de entrada ela pode substituir b no topo da pilha por um c.
Autômato com Pilha
• Antes de desenharmos um autômato...• Escrevermos "a,b c" para indicar que quando a máquina está lendo o símbolo a da palavra de entrada ela pode substituir b no topo da pilha por um c.
Autômato com Pilha
• Antes de desenharmos um autômato...• Escrevermos "a,b c" para indicar que quando a máquina está lendo o símbolo a da palavra de entrada ela pode substituir b no topo da pilha por um c.
• a, b ou c podem ser símbolos vazios:
▫ Se a é vazio: a máquina pode fazer a transição sem consumir um símbolo da palavra e entrada;
Autômato com Pilha
• Antes de desenharmos um autômato...• Escrevermos "a,b c" para indicar que quando a máquina está lendo o símbolo a da palavra de entrada ela pode substituir b no topo da pilha por um c.
• a, b ou c podem ser símbolos vazios:
▫ Se a é vazio: a máquina pode fazer a transição sem consumir um símbolo da palavra e entrada;
▫ Se b é vazio: a máquina pode fazer a transição sem desempilhar nenhum símbolo da pilha;
Autômato com Pilha
• Antes de desenharmos um autômato...• Escrevermos "a,b c" para indicar que quando a máquina está lendo o símbolo a da palavra de entrada ela pode substituir b no topo da pilha por um c.
• a, b ou c podem ser símbolos vazios:
▫ Se a é vazio: a máquina pode fazer a transição sem consumir um símbolo da palavra e entrada;
▫ Se b é vazio: a máquina pode fazer a transição sem desempilhar nenhum símbolo da pilha;
▫ Se c é vazio: a máquina pode fazer a transição sem empilhar nenhum símbolo na pilha.
Autômato com Pilha
•
{ a
nb
n| n >= 0 }
Autômato com Pilha
•
Exercício:
▫
crie um AP que reconheça a linguagem
Autômato com Pilha
•
{ww
R|w{0,1}
*}
Exemplos
L={anbn n 0} (b,X,) S1 (a,,X) (b,X, ) S0Exemplos
L = wcwR : w{ a,b}* (c,, ) S1 (a,,X) (a,X,) S0 (b,,Y) (b,Y,)Exemplos
L={anbman+m n 0, m 0} (b,,A) S2 S0 (a,, A) (a,A,) ( a,A,) (b,,A)Bibliografia
• SIPSER, Michael. Introdução à Teoria da Computação. 2a ed.:São Paulo, Thomson, 2007.
• VIEIRA, Newton José. Introdução aos Fundamentos da Computação: Linguagens e Máquinas. 1a ed.: Rio de Janeiro: Thomson, 2006.