Teoria da Computação. 2006/2007 Trabalho prático nº 1. Trabalho realizado por: Pedro Oliveira ( ) Rui Costa ( ) Turma: TP1

Documentos relacionados
Teoria da Computação. 2006/2007 Trabalho prático nº 2. Trabalho realizado por: Pedro Oliveira ( ) Rui Costa ( ) Turma: TP1

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07

Aula de 26/08/2013. Processadores Simbólicos Aspectos de Arquitetura e Implementação

SCC-ICMC-USP. Trabalho em Grupo 1 SCC-0205

Curso: Ciência da Computação Turma: 6ª Série. Teoria da Computação. Aula 5. Aplicação Prática de Autômatos Finitos

Universidade Lusófona de Humanidades e Tecnologias Fundamentos de Programação 2014/2015 primeira época v.1.0.0

EXPRESSÃO REGULAR PARA UMA FUNÇÃO EQUIVALENTE EM PASCAL, UTILIZANDO DOIS ALGORITMOS BASEADOS NO TEOREMA DE KLEENE RONALD GLATZ

Prova 1 de INF1626 Linguagens Formais e Autômatos

INE5317 Linguagens Formais e Compiladores AULA 5: Autômatos Finitos

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

a n Sistemas de Estados Finitos AF Determinísticos

Como construir um compilador utilizando ferramentas Java

Linguagens Regulares. Prof. Daniel Oliveira

Teoria de Linguagens 2 o semestre de 2017 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 19/9/2017 Valor: 10 pontos

Informática para Ciências e Engenharias (C) Trabalho Prático /18

Linguagens e Programação Automátos Finitos. Paulo Proença

Autómatos Finitos Determinísticos (AFD)

BCC242. Auômato Finito Determinístico

Universidade Federal de Alfenas

Linguagens Formais e Autômatos

Linguagens recursivamente enumeráveis

Exercicios. 7.2 Quais das seguintes afirmações são verdadeiras? Justifica. (d) abcd L((a(cd) b) )

Lista de exercícios 1

Draft-v0.1. Máquinas de Turing Máquinas de Turing

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos

INCLUSÃO DO ALGORITMO DE TRANSFORMAÇÃO DE UM AUTÔMATO FINITO EM EXPRESSÃO REGULAR NO AMBIENTE EDITOR DE AUTÔMATOS FINITOS

Melhor caminho entre duas estações de metro

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios

Fundamentos da Teoria da Computação

SCC 205 Teoria da Computação e Linguagens Formais

Expressões e Gramáticas Regulares e Autómatos Finitos

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

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Linguaguens recursivamente enumeráveis e recursivas

Linguagens Formais e Autómatos

APROG. Civil. Programas Básicos. ISEP DEI, Angelo Martins 2006 ISEP DEI, António Silva Programas Básicos

Encriptação de Mensagens

Linguagens Formais e Autômatos. Autômatos Finitos Determinísticos (AFD)

1. Uma linguagem de uma máquina de Turing

Manual do Utilizador

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9.

Proposta de trabalho

Fundamentos da Programação

Linguagens Formais e Autômatos P. Blauth Menezes

Propriedades de Fecho de Linguagens Regulares.

DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR

1 ō Trabalho Prático de Programação Imperativa 2001/2002 Propostas de trabalho

Autômatos finitos não-determinísticos

Variáveis e constantes; Operadores e Tipos de Dados

Modelos Universais de Computação

1 Autómatos Finitos Deterministas

Linguagens Livres de Contexto

Histórico e motivação

Linguaguens recursivamente enumeráveis

UNIVERSIDADE DA BEIRA INTERIOR

LFA Aula 07. Equivalência entre AFD e AFND. Equivalência entre ER s e AF s Equivalência entre GR s e AF s. Linguagens Formais e Autômatos

Folha 3 - Análise léxica

Folha 2 Autómatos e respectivas linguagens

AF Não-determinísticos Equivalência entre AFND e AFD AFs e GRs Implementação de AFs

Compilador de LP3 para C3E e P3

Estruturas de Dados I Enunciado do Trabalho Prático

Universidade Federal de Alfenas

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

Editor de Autômatos Finitos. Acadêmica: Josiane Patrícia Morastoni Orientadora: Joyce Martins

COMPUTAÇÃO E PROGRAMAÇÃO 1º Semestre 2010/2011 MEMec, LEAN

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

imax Concepção Centrada no Utilizador 2007/2008 Manual do Utilizador

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Objectivos. Programação I (2010/2011) 2 o Trabalho de Programação

Construção de Compiladores

LFA Aula 05. AFND: com e sem movimentos 05/12/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Algoritmos e Tipos Abstractos de Informação

Automação Ramos de Automação e Energia

Autômatos Finitos Não Determinís5cos (AFN)

Departamento de Matemática da Universidade de Coimbra 2011/2012 Programação Orientada para os Objectos Projecto 2

Uma Hierarquia de Classes para Construção de Autômatos Finitos. An Hierarchy of Classes for Development of Finite Automata

Manual Técnico. Sudoku. Disciplina de. Programação Lógica e Funcional. Rui Madeira. Gustavo Graça Patrício Nº Turma A - Diurno

Computação e Programação Exame Época de recurso

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

AF Não-determinísticos Equivalência entre AFND e AFD

aplicação arquivo Condições Gerais de Utilização

Fundamentos da Teoria da Computação

Curso: Ciência da Computação Turma: 6ª Série. Teoria da Computação. Aula 4. Autômatos Finitos

MAC-4722 Linguagens, Autômatos e Computabilidade Lista L3

Expressões Regulares e Gramáticas Regulares

Autómatos de Pilha e Linguagens Livres de Contexto

Construção de Compiladores Aula 16 - Análise Sintática

Expressões Regulares. Tiago Alves de Oliveira

INE5317 Linguagens Formais e Compiladores AULA 6: Propriedades das Linguagens Regulares

Computação efectiva. Que linguagens podem ser reconhecidas por algum tipo de autómato?

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Compiladores. Análise Léxica

Informações sobre voos da TAP em Linguagem Natural

Familiarização com a ferramenta JavaCC

Introdução à Computação. Programas Básicos. ISEP DEI, Angelo Martins 2006 Programas Básicos - 1

Linguagens Livres de Contexto

DOSSIER DA DISCIPLINA

Fundamentos da Teoria da Computação

Sistemas de Estados Finitos AF Determinísticos. (H&U, 1979) e (H;M;U, 2001)

Transcrição:

2006/2007 Trabalho prático nº 1 Trabalho realizado por: Pedro Oliveira (501062444) Rui Costa (501062452) Turma: TP1

1 - Introdução O objectivo deste trabalho era implementar um simulador de Autómatos Finitos Determinísticos. Dentro deste objectivo havia várias etapas que eram pedidas e foram implementadas, sendo elas: - Ser possível ao utilizador introduzir um autómato; - Ler e gravar um autómato de e para um ficheiro; - Rejeitar autómatos inválidos (p.e. autómato que não sejam deterministas); - Determinar se um autómato aceita uma cadeia de caracteres; - Simular passo a passo o autómato para diversas cadeias de caracteres; O trabalho foi começado por ser implementado em duas linguagens de programação distintas: Java e Python. Tendo sido escolhida a implementação em Python por se ter revelado mais aliciante para nós que desconhecíamos a linguagem e porque se veio a revelar uma linguagem extremamente eficaz para este trabalho em específico.

2 Manual do utilizador Neste manual de utilizador será explicada a forma como o utilizador deve proceder de forma a interagir correctamente com o programa. O menu contém diversas opções que são explicadas de seguida. 1 - Introduzir Autómato Opção que permite introduzir um autómato, as opções Simular Autómato e Guardar Autómato em ficheiro têm como pré-requisito a correcta execução desta opção (ou a opção Ler Autómato de Ficheiro ). Transições(δ) Estado inicial(q 0 ) Estados finais(f) O que é Input notas Estados(Q), q1 Os estados devem estar separados por caracteres que não de (A-Z) e (0-9). Alfabeto( ) {a,b} Não é relevante a forma como é inserido desde que não estejam separados por caracteres de (A-Z) e (0-9). :a- >q1; q1:a- >q1; Devem obedecer à representação descrita no exemplo (uma transição por linha). A inserção de transições termina quando introduzida uma linha em branco. E é após esta que é avaliado o determinismo do autómato. É constituído por apenas um estado. q1, Os estados devem estar separados por caracteres que não de (A-Z) e (0-9). 2 Ler Autómato de ficheiro Opção que permite carregar um autómato previamente guardado num ficheiro. O que é Input notas Nome do ficheiro t1.txt O conteúdo do ficheiro deve ser igual ao que é mostrado no tópico introduzir autómato e o ficheiro deve terminar com um \n. 3 Guardar Autómato em ficheiro Permite guardar um autómato finito determinístico gerado em um ficheiro. O que é Input notas Nome do ficheiro t1.txt -

4 Simular Autómato Permite simular uma cadeia de símbolos de forma a verificar se a mesma é ou não aceite pelo autómato inserido. Esta simulação pode ser feita passo a passo (i.e. um caracter de cada vez) sendo apenas necessário pressionar o enter para que se avance para o próximo passo. A outra forma de proceder à avaliação transita automaticamente para o final, sabendo o utilizador se a cadeia é ou não aceite. O que é Input notas Cadeia aa - Tipo de simulação 1 ou 2 Automática ou passo a passo.

3 Manual do programador Na elaboração deste projecto, escolhemos usar a linguagem Python. Foi um desafio em duas vertentes: o desenvolvimento do projecto em si e a aprendizagem de uma nova linguagem. No final do desenvolvimento da aplicação, chegámos à conclusão que a escolha do Python mostrou-se muito lucrativa, visto que esta linguagem possui características que mostraram ser muito vantajosas para este tipo de projectos. A potência das suas listas e dicionários, aliados á possibilidade de criação de tuplos de variáveis permitiramnos reduzir em muito a complexidade da aplicação em comparação com outras linguagens como C e Java. Como a interface não era valorizada, a interacção com o utilizador é efectuada num sistema simples de consola. 3.1 Gramática Utilizada A gramática utilizada foi baseada na referida no enunciado com pequenas modificações que, para nós, melhoram a interacção com o utilizador. Exemplo de Automato:, q1 {a,b,c} :a->q1, b->q1; q1:a->, b->;, q1 A inserção de estados, alfabeto, estado inicial e estados finais é igual à referida no enunciado. Apenas as transições são diferentes. Decidimos que era mais fácil para o utilizador inserir as transições de cada estado numa linha só, para uma melhor ordenação e distribuição do input. O input de transições acaba com uma linha em branco.

Todos os caracteres especiais que estejam fora do nosso abecedário (a-z) ou da nossa numeração (0-9) são ignorados do input, logo não é, por exemplo, obrigatório separar a inserção de estados por uma vírgula. Pode-se pura e simplesmente inserir um espaço ou outro carácter qualquer que esteja fora dos alfabetos referidos. 3.2 Estruturas de dados Para representar o autómato recorremos a estruturas de dados características do Python. O autómato em si é um objecto (AFD) que contem essas estruturas de dados. Classe AFD estados = [] alfabeto = [] transicoes = {} estado_inicial = "" estados_finais = [] loaded = 0 Traduzindo para a definição de autómato finito (Q, Σ, δ, S, F): Q = estados[] Σ = alfabeto[] δ = transicoes{} S = estado_inicial F = estados_finais[] Os estados, alfabeto e estados finais são representados numa lista. O estado inicial é uma simples string. As transições são representadas por um dicionário, cuja chave é um tuplo (estado,letra) e conteúdo é o estado de destino. A variável loaded serve apenas para confirmar se o autómato é correcto e/ou determinístico.

3.3 Testes Foram elaborados vários testes para avaliar a eficácia e qualidade da aplicação. Depois de efectuados esses testes não detecta-mos nenhuma anomalia, por isso a avaliação feita por nós à aplicação foi muito satisfatória. Como exemplo, seguem alguns dos testes efectuados. Teste1, q1 {a} :a->q1; q1:a->q1;, q1 Input Resultado Esperado Resultado Obtido -> Aceite -> Aceite aaaaaa q1 -> Aceite q1 -> Aceite

Teste2, q1, q2 {0,1} :0->, 1->q1; q1:0->q1, 1->q2; q2:0->q1, 1->q1; q1 Input Resultado Esperado Resultado Obtido -> Rejeitada -> Rejeitada 0 -> Rejeitada -> Rejeitada 00000110 q1 -> Aceite q1 -> Aceite 1111111100001010 q1 -> Aceite q1 -> Aceite 111111111111111111 q2 -> Rejeitada q2 -> Rejeitada

Teste3, q1, q2, q3, q4, q5, q6 {a,b} :a->q1, b->; q1:a->q1, b->q5; q2:a->q4, b->q3; q3:a->q1, b->q3; q4:a->q4, b->q3; q5:a->q2, b->q6; q6:a->q6, b->q6; q1 Input Resultado Resultado Obtido Esperado -> Rejeitada -> Rejeitada ababa q1 -> Aceite q1 -> Aceite bbaaababbbbbaaaa q6 -> Rejeitada q6 -> Rejeitada ababaaaabaaaaabbbbaaaaa q1 -> Aceite q1 -> Aceite baabbaabababaaababababababababaaaaab q6 -> Rejeitada q6 -> Rejeitada

Teste 4, q1 {a,b} :a->, b->; q1:a->, b->q1; Input Resultado Resultado Obtido Esperado -> Rejeitada -> Rejeitada ababa -> Rejeitada -> Rejeitada Teste 5 Input Resultado Esperado Resultado Obtido -> Aceite -> Aceite