Linguagens Formais e Autômatos (LFA)



Documentos relacionados
Linguagens Livres de Contexto e Autômatos a Pilha (Push- Down) Um Modelo de Computação de Força Intermediária. Gramática Livre de Contexto

Automatocom Pilha Pushdown Automaton

Roteiro da Aula 3. Sintaxe. 2 Exemplos. 4 Propriedades de Fechamento. Teoria da Aula 3. Roteiro

Introdução às Máquinas de Turing (TM)

Autómatos finitos não determinísticos (AFND)

Informática PUC-Rio. Aula de 14/08/2013. Linguagens e Autômatos Exercícios. cios com JFLAP e Ruby. Clarisse S. de Souza, 2013

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador

Autômato com pilha. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz

7.1. Autómatos de pilha não-determinísticos (NPDA) 7.3. Autómatos de pilha determinísticos e linguagens livres de contexto determinísticas.

Autômatos a pilha. UFRN/DIMAp/DIM0330 Linguagens formais. David Déharbe. david/enseignement/2003.

Lógica Computacional

O que queremos. Processamento Estatístico da Linguagem Natural. Parsing Morfológico. Regras Simples. Adicionando palavras. Regras Derivacionais

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber

COMPILADORES E INTERPRETADORES

Lista n 0 1 de Exercícios de Teoria da Computação

Autômatos com Pilha: Reconhecedores de LLCs

a n Autômatos com Pilha: Definição Informal e Definição Formal Linguagem Aceita por um ACP ACPDet X ACPND Notação gráfica para ACP

Máquinas de Turing 1

Prova 1 de INF1626 Linguagens Formais e Autômatos

Usando um Simulador da Máquina de Turing Claudio Kirner 2010

Faculdade de Computação

Compiladores - Autômatos

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes

Resumo. Sistemas e Sinais Máquinas de Estados Finitos. Máquina de Estados Finitos. Esta Aula

Autómatos Finitos Determinísticos

CAPÍTULO 7 AUTÓMATOS DE PILHA

TRABALHO DE RECUPERAÇÃO Menção máxima = MM

Tutorial Ruby versão 0.3 SOBRE O TUTORIAL

Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Ciências de Computação

Programação Aplicada de Computadores 2015/2

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima

PCS-2302 / PCS-2024 Lab. de Fundamentos de Eng. de Computação

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

Ruby e Ruby on Rails

Outras Máquinas de Turing

Linguagens Formais e Autômatos (LFA)

ALP Algoritmos e Programação. . Linguagens para Computadores

Aulas de PHP Criptografia com Cifra de César. Paulo Marcos Trentin

Autômatos de Pilha (AP)

Dispositivos de Entrada e Saída

$XWyPDWRV)LQLWRV'HWHUPLQLVWDV$)' A= (Q, È, G,q 0,F)

Apostila 03 Linguagens Livres de Contexto

Programação de Computadores

Autômatos com Pilha. Douglas O. Cardoso docardoso.github.io

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Linguagens Formais e Autômatos 02/2016. LFA Aula 04 16/11/2016. Celso Olivete Júnior.

Máquinas de Turing - Computabilidade

2 Formalidades referentes ao trabalho

DAS5102 Fundamentos da Estrutura da Informação

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Alfabeto e palavras. Alfabeto conjunto finito de símbolos (Σ).

PYTHON LISTAS. Introdução à Programação SI2

Teoria da Computação Linguagens Formais e Autômatos

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

Autómatos de Pilha e Linguagens Livres de Contexto

Templates e Pilhas. 1. Introdução

Autómatos de Pilha. Cada transição é caracterizada pelo estado, símbolo que está ser lido e o elemento no topo da pilha. dados de entrada.

Aula 7: Autômatos com Pilha

INF 1005 Programação I

Folha 2 Autómatos e respectivas linguagens

Modelagem de uma Vending Machine utilizando um Autômato Finito com Saída

Listas Duplamente Encadeadas

Aluísio Eustáquio da Silva

ESTRUTURA DE DADOS PILHA

Pilhas. Profa Morganna Diniz


Software Básico (INF1018)

Arquitetura de Computadores - Princípio de Funcionamento da CPU. Por Helcio Wagner da Silva

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

Programação 1. Rafael Vargas Mesquita. ftp://ftp.ci.ifes.edu.br/informatica/mesquita/

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso:

Linguagens Livres de Contexto

ARQUITETURA DE COMPUTADORES INTRODUÇÃO

UFRPE Prof. Gustavo Callou

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

Linguagens Formais e Autômatos

1 Autómatos finitos deterministas

Linguagens Formais e Autômatos (LFA)

QUITETURA AVANÇADA DE SISTEMAS

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA. Ghabriel Calsa Nunes SIMULADOR DE AUTÔMATOS E MÁQUINAS DE TURING

Itens estruturais/caso de uso. Itens estruturais/classe ativa. Itens estruturais/componente. Itens estruturais/artefatos. Itens comportamentais

Marcos Castilho. DInf/UFPR. 5 de abril de 2018

Transcrição:

INF1626 Linguagens Formais e Autômatos (2013- Linguagens Formais e Autômatos (LFA) Aula de 30/10/2013 Autômatos de Pilha Modelo Conceitual; JFLAP Modelos de Implementação: Ruby Clarisse S. de Souza, 2013 1

INF1626 Linguagens Formais e Autômatos (2013- Definição e Modelo Conceitual No JFLAP autômatos de pilha não determinísticos (nondeterministic( pushdown automaton, ou NPDA) como a tupla (Q, Σ, Γ, δ, q s, Z, F) onde: Q é um conjunto finito de estados {q i i é um inteiro não negativo} Σ é um conjunto finito de símbolos s que constituem o alfabeto de entrada Γ é um conjunto finito de símbolos s que constituem o alfabeto da pilha δ é a função de transição ão, δ : Q Σ* Γ* subconjuntos finitos de Q Γ* q s (membro de Q) é o estado inicial Z é o símbolo inicial da pilha (sempre um Z, maiúsculo, no JFLAP) F (subconjunto de Q) é o conjunto de estados finais Esta definição dád conta de autômatos de pilha determinísticos (PDA), que nada mais são do que NPDA s s onde, para cada elemento de δ = Q Σ* Γ* subconjuntos finitos de Q Γ*, a cardinalidade de Q Γ* é 1 (só há um estado para o qual a transição leva). Clarisse S. de Souza, 2013 2

INF1626 Linguagens Formais e Autômatos (2013- Construindo um NPDA com o JFLAP No Tutorial do JFLAP pode-se ver como se construir NPDA s. Veja a ilustração no vídeo v que acompanha o material da aula. veja npda-video1.mp4 No exemplo, o NPDA é construído para a linguagem L = { {a n b n : n > 0}. A opção dos tutores é push um a para a pilha a cada vez que for lido um a na cadeia de entrada e, depois, pop um a para fora da pilha a cada vez que for lido um b na cadeia de entrada. Clarisse S. de Souza, 2013 3

INF1626 Linguagens Formais e Autômatos (2013- Converto um NPDA para CFG com o JFLAP veja npda-video2.mp4 Clarisse S. de Souza, 2013 4

INF1626 Linguagens Formais e Autômatos (2013- Converto LL(k) e LR(k) para PDA no JFLAP veja npda-video3.mp4 e npda-video4.mp4 Clarisse S. de Souza, 2013 5

INF1626 Linguagens Formais e Autômatos (2013- Implementação de Autômatos de Pilha em Ruby (livro-texto, p.411-430) Novas classes: AutomatoPilha AutomatoPilhaDeterministico AutomatoPilhaNaoDeterministico ConsultaAPD MovimentacaoAPD MovimentacaoAPND Pilha ReconhecedorAPD ReconhecedorAPND 6

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/reconhecedorapd.rb class ReconhecedorAPD < Reconhecedor def instanciarautomato( estadoinicial, estadosfinais ) @automato = AutomatoPilhaDeterministico.new( estadoinicial, estadosfinais ) def condicaodoautomato?(automato) return (automato.consulta.atingiueof?() && automato.consulta.pilhavazia?()) Obs: este método implementa a aceitação por pilha vazia. Se comentado, a aceitação é por estado final (implementada na classe base) 7

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/automatopilha.rb class AutomatoPilha < Automato attr_accessor :pilha def instanciarestruturaespecifica() @pilha = Pilha.new() def adicionartransicao( transicao ) @transicoes.update( transicao ) def instanciarentrada() @entrada = FitaLimitada.new() def instanciarconsulta() @consulta = ConsultaAPD.new( self ) 8

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/automatopilhadeterministico.rb class AutomatoPilhaDeterministico < AutomatoPilha def instanciarmovimentacao() @movimentacao = MovimentacaoAPD.new( self ) Exemplo de transição: { ['q0', 'b', 'Z0'] => ['q1', ['Z0']] } 9

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/pilha.rb class Pilha def initialize() Símbolo @conteudo = ["Z0"] inicial da pilha def pop() return @conteudo.pop def top() return @conteudo.last def push( lista ) @conteudo += lista def vazia?() return @conteudo == [] def configuracao?() return "(" + @conteudo.inspect() + ")" def clonar() return Clonagem.new().clonar( self ) 10

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/servico/movimentacaoapd.rb (1) class MovimentacaoAPD < MovimentacaoDeterministica def calcularondadeclones() ondadeclones = {} e = @automato.consulta.estadocorrente?() s = @automato.entrada.ler() z = @automato.pilha.top() @automato.transicoes.each do condicaoesperada, instrucao #tentativa de transicao com consumo de entrada if( condicaoesperada == [ e,s,z ] ) clone = @automato.clonar() ondadeclones[ clone ] = (instrucao << "A") #tentativa de transicao sem consumo de entrada elsif( condicaoesperada == [ e,"",z ] ) clone = @automato.clonar() ondadeclones[ clone ] = instrucao return ondadeclones Indica que deve avançar na fita de entrada 11

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/servico/movimentacaoapd.rb ( def mover( instrucao ) @automato.estadocorrente = instrucao[0] @automato.pilha.pop() @automato.pilha.push( instrucao[1] ) if( instrucao.size() > 2 ) @automato.entrada.avancar() puts @automato.consulta.configuracao?() Verifica se o A foi incluído no array (slide anterior) 12

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apd/casouso1.rb rpd = ReconhecedorAPD.new( 'q0', ['q1'] ) rpd.automato.adicionartransicao({ ['q0','a','z0'] => ['q0',['z0','c','c'] ]}) rpd.automato.adicionartransicao({ ['q0','a','c'] => ['q0',['c','c','c'] ]}) rpd.automato.adicionartransicao({ ['q0','b','z0'] => ['q1',['z0'] ]}) rpd.automato.adicionartransicao({ ['q0','b','c'] => ['q1',['c'] ]}) rpd.automato.adicionartransicao({ ['q1','c','c'] => ['q1',[] ]}) rpd.automato.adicionartransicao({ ['q1','','z0'] => ['q1',[] ]}) rpd.iniciar( 'aabccc' ) automatos = rpd.analisar() puts rpd.reconheceu?() 13

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/reconhecedorapnd.rb class ReconhecedorAPND < Reconhecedor def instanciarautomato( estadoinicial, estadosfinais ) @automato = AutomatoPilhaNaoDeterministico.new( estadoinicial, estadosfinais ) def condicaodoautomato?(automato) return (automato.consulta.atingiueof?() && automato.consulta.pilhavazia?()) Assim como no APD, define o critério de aceitação 14

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/automatopilhanaodeterministico.rb class AutomatoPilhaNaoDeterministico < AutomatoPilha def instanciarmovimentacao() @movimentacao = MovimentacaoAPND.new(self) Exemplo de transição: { ['q0','a','z0'] => [ ['q1', ['Z0', 'C', 'C']], ['q2', ['Z0', 'C']] ] } 15

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/servico/movimentacaoapnd.rb (1) class MovimentacaoAPND < MovimentacaoNaoDeterministica def calcularondadeclones() ondadeclones = {} e = @automato.consulta.estadocorrente?() s = @automato.entrada.ler() z = @automato.pilha.top() @automato.transicoes.each do condicaoesperada, instrucoes #tentativa de transicao com consumo de entrada if( condicaoesperada == [ e, s, z ] ) instrucoes.each do instrucao clone = @automato.clonar() ondadeclones[ clone ] = (instrucao << "A") #tentativa de transicao sem consumo de entrada elsif( condicaoesperada == [ e, "", z ] ) instrucoes.each do instrucao clone = @automato.clonar() ondadeclones[ clone ] = instrucao return ondadeclones Diferença em relação ao APD (não determinismo) 16

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/servico/movimentacaoapnd.rb ( def mover( instrucao ) @automato.estadocorrente = instrucao[0] @automato.pilha.pop() @automato.pilha.push( instrucao[1] ) if( instrucao.size() > 2 ) @automato.entrada.avancar() puts @automato.consulta.configuracao?() Igual a MovimentacaoAPD.mover 17

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/casouso1.rb 18

INF1626 Linguagens Formais e Autômatos (2013- Arquivo apnd/casouso1.rb rpnd = ReconhecedorAPND.new( 'q0', ['q4'] ) rpnd.automato.adicionartransicao({['q0','a','z0'] => [ ['q1', ['Z0','C','C']], ['q2',['z0','c']] ]}) rpnd.automato.adicionartransicao({['q1','a','c'] => [ ['q1', ['C','C','C']] ]}) rpnd.automato.adicionartransicao({['q1','c','c'] => [ ['q3',[]] ]}) rpnd.automato.adicionartransicao({['q2','a','c'] => [ ['q2',['c','c']] ]}) rpnd.automato.adicionartransicao({['q2','c','c'] => [ ['q3',[]] ]}) rpnd.automato.adicionartransicao({['q3','c','c'] => [ ['q3',[]] ]}) rpnd.automato.adicionartransicao({['q3','','z0'] => [ ['q4',['z0']] ]}) rpnd.iniciar( 'ac' ) automatos = rpnd.analisar() puts rpnd.reconheceu?() 19