UNIVERSIDADE DO VALE DO ITAJAÍ PAULO ROBERTO LIMA



Documentos relacionados
AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

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

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

Linguagem Formais e Autômatos

Outras Máquinas de Turing

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

1. NÍVEL CONVENCIONAL DE MÁQUINA

1.1. Organização de um Sistema Computacional

Autómatos Finitos Determinísticos

FUNÇÕES POLINOMIAIS DO SEGUNDO GRAU MEDIADOS PELO SOFTWARE GEOGEBRA NA PERSPECTIVA DOS REGISTROS DE REPRESENTAÇÃO SEMIÓTICA

Orientação a Objetos

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Pesquisa com Professores de Escolas e com Alunos da Graduação em Matemática

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

Resolução de problemas e desenvolvimento de algoritmos

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Registro e Acompanhamento de Chamados

ALUNOS DO 7º ANO CONSTRUINDO GRÁFICOS E TABELAS

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Dadas a base e a altura de um triangulo, determinar sua área.

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Sistemas de Numerações.

3. Tipos de Dados, Constantes e Variáveis.

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

UNIVERSIDADE DE SÃO PAULO E S C O L A D E A R T E S, C I Ê N C I A S E H U M A N I D A D E

Pró-Reitoria de Ensino de Graduação P L A N O D E E N S I N O

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

EXPLORANDO ALGUMAS IDEIAS CENTRAIS DO PARÂMETROS CURRICULARES NACIONAIS ENSINO MÉDIO. Giovani Cammarota

11 de maio de Análise do uso dos Resultados _ Proposta Técnica

COMPILADORES E INTERPRETADORES

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Microsoft Office PowerPoint 2007

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

GereComSaber. Disciplina de Desenvolvimento de Sistemas de Software. Sistema de Gestão de Serviços em Condomínios

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE

Linguagens Formais e Autômatos

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Um software para auxílio a aprendizagem de Linguagens Regulares

Introdução ao Aplicativo de Programação LEGO MINDSTORMS Education EV3

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

Aula 8 Circuitos Integrados

Exercícios Teóricos Resolvidos

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

FUNÇÃO REAL DE UMA VARIÁVEL REAL

CURSO: LICENCIATURA DA MATEMÁTICA DISCIPLINA: PRÁTICA DE ENSINO 4

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

O PAPEL DA CONTAÇÃO DE HISTÓRIA NA EDUCAÇÃO INFANTIL

AVALIAÇÃO DE INTERFACES UTILIZANDO O MÉTODO DE AVALIAÇÃO HEURÍSTICA E SUA IMPORTÂNCIA PARA AUDITORIA DE SISTEMAS DE INFORMAÇÕES

EMISSÃO DE CERTIFICADOS ELETRÔNICOS NOS EVENTOS DO INSTITUTO FEDERAL CATARINENSE CÂMPUS VIDEIRA

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Programação para Computação

PROGRAMAÇÃO EM LINGUAGEM LADDER LINGUAGEM DE RELÉS

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Implementação de um analisador léxico: a primeira etapa na construção do compilador Marvel

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

SERVIÇO PÚBLICO FEDERAL UNIVERSIDADE FEDERAL DA FRONTEIRA SUL COMISSÃO PERMANENTE DO PROCESSO SELETIVO DÚVIDAS FREQUENTES

Introdução às Linguagens de Programação

MODELO DE APRESENTAÇÃO DE PROJETO DE PESQUISA

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

PERGUNTAS MAIS FREQÜENTES FEITAS PELO ALUNO. 1. O que são as Atividades Complementares de Ensino do NED-ED?

UNIVERSIDADE DE PASSO FUNDO FACULDADE DE ENGENHARIA E ARQUITETURA CURSO DE ENGENHARIA DE ALIMENTOS REGULAMENTO DO PROJETO DE CONCLUSÃO DE CURSO

2 Diagrama de Caso de Uso

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Casos de teste semânticos. Casos de teste valorados. Determinar resultados esperados. Gerar script de teste automatizado.

Geração de código intermediário. Novembro 2006

Especificação do 3º Trabalho

Um espaço colaborativo de formação continuada de professores de Matemática: Reflexões acerca de atividades com o GeoGebra

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

Geração e Otimização de Código

A inserção de jogos e tecnologias no ensino da matemática

EMISSÃO DE CERTIFICADOS ELETRÔNICOS NOS EVENTOS DO INSTITUTO FEDERAL CATARINENSE CÂMPUS VIDEIRA

Introdução à Computação

Organização e Arquitetura de Computadores I. de Computadores

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

DESENVOLVIMENTO DE UM SOFTWARE NA LINGUAGEM R PARA CÁLCULO DE TAMANHOS DE AMOSTRAS NA ÁREA DE SAÚDE

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

29/06/ :30 Leite Júnior QUESTÕES CESPE BACKUP

MICROSOFT ACCESS MICROSOFT ACCESS. Professor Rafael Vieira Professor Rafael Vieira

as citações devem ser apresentadas conforme a norma NBR 10520/2002; citação: é a menção de uma informação extraída de alguma fonte.

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

UNIÃO EDUCACIONAL DO NORTE UNINORTE AUTOR (ES) AUTOR (ES) TÍTULO DO PROJETO

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Aula 10 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

A Educação Bilíngüe. » Objetivo do modelo bilíngüe, segundo Skliar:

Sumário. Uma visão mais clara da UML

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Transcrição:

UNIVERSIDADE DO VALE DO ITAJAÍ PAULO ROBERTO LIMA UM SOFTWARE EDUCACIONAL PARA CONSTRUÇÃO E VALIDAÇÃO DE FORMALISMOS UTILIZADOS NA GERAÇÃO E RECONHECIMENTO DE SENTENÇAS DE UMA LINGUAGEM REGULAR São José 2006

2 PAULO ROBERTO LIMA UM SOFTWARE EDUCACIONAL PARA CONSTRUÇÃO E VALIDAÇÃO DE FORMALISMOS UTILIZADOS NA GERAÇÃO E RECONHECIMENTO DE SENTENÇAS DE UMA LINGUAGEM REGULAR Trabalho elaborado para obtenção de conceito na disciplina Trabalho de Conclusão de Curso, do curso de Bacharelado em Ciência da Computação da UNIVALI São José. PROF. M.ENG. ALESSANDRO MUELLER São José 2006

3 PAULO ROBERTO LIMA UM SOFTWARE EDUCACIONAL PARA CONSTRUÇÃO E VALIDAÇÃO DE FORMALISMOS UTILIZADOS NA GERAÇÃO E RECONHECIMENTO DE SENTENÇAS DE UMA LINGUAGEM REGULAR Este Trabalho de Conclusão de Curso foi julgado adequado para obtenção do título de Bacharel em Ciência da Computação e aprovado pelo Curso de Ciência da Computação, da Universidade do Vale do Itajaí (SC), Centro de Educação São José. São José, 14 de dezembro de 2006. Apresentada à Banca Examinadora formada pelos professores: Prof. M.Eng. Alessandro Mueller Orientador Prof. Msc. Paulo Roberto Riccioni Gonçalves, membro da banca examinadora. Prof. Esp. Marlise There Dias, membro da banca examinadora.

4 AGRADECIMENTOS Agradeço a Deus pelo dom da vida e por estar sempre presente ao longo deste caminho e de minha vida. Aos meus pais, Paulo e Gislaine, por todo amor e carinho, pelas palavras de conforto nas horas de dificuldade e pelo incentivo sempre dado, por tudo o que abriram mão na vida para hoje eu estar aqui. Amo vocês. A minha amada Ana Paula, por estar sempre ao meu lado apoiando ou criticando, por ter mudado tanto minha vida quando nela entrou, por ser uma grande companheira. Hoje posso dizer que sou uma pessoa bem melhor e devo isto a você. Te amo muito. Sempre. A minhas irmãs Michele e Monique, por estarem sempre tentando ajudar de alguma maneira, e agora longe continuam tentando. Saudades. À minha grande amiga Josiane, a quem devo muito esse trabalho. Não sei como te agradecer. Por fim a todos os amigos que de alguma forma contribuíram para conclusão deste trabalho.

5 Nosso medo mais profundo não é sermos incapazes. Nosso medo mais profundo é termos poder demais. É nossa luz, não nossa escuridão que mais nos assusta. Jogar pouco não agrada ao mundo. Não há nada de luminoso em se diminuir para que outras pessoas não se sintam inseguras à sua volta. Fomos todos feitos para brilhar como as crianças. Não está só em alguns de nós, está em todos. E ao deixarmos nossa própria luz brilhar inconscientemente permitimos que outros façam o mesmo. Já que nos livramos de nosso próprio medo nossa presença automaticamente liberta outros. (Autor Desconhecido)

6 RESUMO A Teoria de Linguagens Formais disponibiliza um conjunto de formalismos que podem ser utilizados para especificação e reconhecimento de sentenças de uma linguagem de programação. Os Autômatos Finitos são formalismos usualmente empregados na implementação da etapa inicial de construção de um compilador a análise léxica, responsável pela identificação e classificação das unidades léxicas e o tratamento de erros léxicos. Os Autômatos Finitos podem ser classificados em Autômatos Finitos Determinísticos, em Autômatos Finitos Não- Determinísticos e em Autômatos Finitos Não-Determinísticos com Movimento Vazio. Uma expressão Regular é um dispositivo formal denotacional de uma Linguagem Regular. Neste trabalho foi desenvolvido um software educacional para construção e validação de formalismos utilizados na geração e reconhecimento de sentenças de uma Linguagem Regular, permitindo a construção de Autômatos Finitos e a conversão de Autômatos Finitos Não-Determinísticos com Movimento Vazio para Autômatos Finitos Não-Determinísticos, de Autômatos Finitos Não- Determinísticos para Autômatos Finitos Determinísticos e de Autômatos Finitos Determinísticos para Autômatos Finitos Determinísticos Mínimos, assim como o reconhecimento de sentenças. Foi utilizada a linguagem de programação Object Pascal no ambiente de programação do Borland Delphi 7, além de fontes documentais e fontes bibliográficas. O software desenvolvido será utilizado como apoio no aprendizado de formalismos de uma Linguagem Regular na disciplina de Linguagens Formais e Compiladores dos cursos de Ciência da Computação e Engenharia da Computação da Universidade do Vale do Itajaí UNIVALI, campus São José. Palavras Chaves: Linguagem Regular, Autômato Finito, Expressão Regular.

7 ABSTRACT The Theory of Formal Languages makes available a group of formalisms that they can be used for specification and recognition of sentences of a programming language. The Finite Automatons are formalisms usually employed in the implementation of the initial stage of a compiler's construction. The lexical analysis, responsible for the identification and classification of the lexical units and the treatment of lexical mistakes. The Finite Automatons can be classified in Finite Automatons Deterministics, in Finite Automatons Non Deterministics and in Finite Automatons Non Deterministics with Empty Movement. A Regular expression is a device formal denote of a Regular Language. In this work a education software was developed for construction and validation of formalisms used in the generation and recognition of sentences of a Regular Language, allowing the construction of Finite Automatons and the conversion of Finite Automatons Non Deterministics with Empty Movement for Finite Automatons Non Deterministics, of Finite Automatons Non Deterministics for Finite Automatons Deterministics and of Finite Automatons Deterministics for Finite Automatons Deterministics Minimum, as well as the recognition of sentences. The programming language Object Pascal was used in the atmosphere of programming of Borland Delphi 7, besides documental sources and bibliographical sources. The developed tool will be used as support in the learning of formalisms of a Regular Language in the discipline of Formal Languages and Compilers of the courses of Science of the Computation and Engineering of the Computation of the University of the valley of Itajaí. UNIVALI, campus São José. Key Words: Regular Language, Finite Automatons, Regular Expression.

8 FIGURAS Figura 1: Hierarquia de Chomsky...17 Figura 2: Autômato Finito como uma máquina com controle finito...20 Figura 3: exemplo de uma máquina de estados...20 Figura 4: tabela de transição para o exemplo da Figura 3...22 Figura 5: diagrama de transição de um Autômato Finito Determinístico...24 Figura 6: tabela de transição de um Autômato Finito Determinístico...24 Figura 7: diagrama de transição de um Autômato Finito Não-Determinístico...26 Figura 8: tabela de transição de um Autômato Finito Não-Determinístico...26 Figura 9: diagrama de transição de um Autômato Finito Não-Determinístico com Movimento Vazio...28 Figura 10: tabela de transição de um Autômato Finito Não-Determinístico com Movimento Vazio...28 Figura 11: Autômato Finito Não-Determinístico com Movimento Vazio...30 Figura 12: Autômato Finito Não-Determinístico equivalente...30 Figura 13: Autômato Finito Determinístico equivalente...33 Figura 14: Diagrama de transição do Autômato Finito Determinístico...35 Figura 15: Tabela de transição do Autômato Finito Determinístico com identificação dos estados acessíveis..35 Figura 16: Tabela de transição do Autômato Finito Determinístico sem os estados inacessíveis...36 Figura 17: Tabela de transição do Autômato Finito Determinístico sem transições indefinidas...36 Figura 18: Tabela de equivalência de estados finais e não finais do Autômato Finito Determinístico...37 Figura 19: Tabela de conjuntos de equivalência (1 iteração)...38 Figura 20: Tabela de conjuntos de equivalência (2 iteração)...38 Figura 21: Tabela de transição do Autômato Finito Determinístico com identificação dos estados não mortos...39 Figura 22: Tabela de transição do Autômato Finito Determinístico sem estados mortos...39 Figura 23: Tabela de transição do Autômato Finito Determinístico Mínimo...40 Figura 24: Diagrama de transição do Autômato Finito Determinístico Mínimo...40 Figura 25: Leis algébricas das Expressões Regulares...42 Figura 26: Autômato Finito Não-Determinístico com Movimento Vazio com transição ε...45 Figura 27: Autômato Finito Não-Determinístico com Movimento Vazio com transição...45 Figura 28: Autômato Finito Não-Determinístico com Movimento Vazio resultante da união...46 Figura 30: Autômato Finito Não-Determinístico com Movimento Vazio resultante do fechamento...47 Figura 31: Autômato Finito para reconhecer a...47 Figura 32: Autômato Finito para reconhecer b...48 Figura 33: Autômato Finito Não-Determinístico com Movimento Vazio para reconhecer a b...48 Figura 34: Autômato Finito Não-Determinístico com Movimento Vazio para reconhecer (a b) *...49 Figura 35: Autômato Finito Não-Determinístico com Movimento Vazio para reconhecer (a b) * a...49 Figura 36: Caso de Uso Desenhar Autômato...54

9 Figura 37: Caso de Uso Imprimir...54 Figura 38: Caso de Uso Reconhecer Direto...55 Figura 39: Caso de Uso Reconhecer Passo a Passo...56 Figura 40: Caso de Uso Tipo de Autômato...57 Figura 41: Caso de Uso Converte AFNE para AFN...58 Figura 42: Caso de Uso Converte AFN para AFD...59 Figura 43: Caso de Uso Converte AFD para AFDM...60 Figura 44: Diagrama de Seqüência Imprimir...61 Figura 45: Diagrama de Seqüência Converter Autômato...61 Figura 46: Diagrama de Seqüência Reconhecer...62 Figura 47: Diagrama de Seqüência Tipo Autômato...62 Figura 48: Diagrama de Classe do Sistema...64 Figura 49: Reconhecimento de um Autômato Finito Não Determinístico com Movimento Vazio...68 Figura 50: Reconhecimento de um Autômato Finito Não Determinístico...69 Figura 51: Reconhecimento de um Autômato Finito Determinístico...69 Figura 52: Reconhecimento de uma sentença aceita de forma direta...70 Figura 53: Reconhecimento de uma sentença não aceita de forma direta...71 Figura 54: Reconhecimento de uma sentença aceita passo a passo...72 Figura 55: Reconhecimento de uma sentença não aceita passo a passo...73 Figura 56: Conversão de um AFN-ε em um AFN...74 Figura 57: Conversão de um AFN-ε em um AFN com Autômato de entrada errado...75 Figura 58: Conversão de um AFN em um AFD...76 Figura 59: Conversão de um AFN em um AFD com Autômato de entrada errado...76 Figura 60: Conversão de um AFD em um AFDm...77 Figura 61: Conversão de um AFD em um AFDm com Autômato de entrada errado...78

10 SUMÁRIO 1 INTRODUÇÃO...12 1.1 CONTEXTUALIZAÇÃO...12 1.2 PROBLEMA...13 1.3 OBJETIVOS...14 1.3.1 Objetivo geral...14 1.3.2 Objetivos específicos...14 1.3.3 Escopo e delimitação do trabalho...14 1.4 RESULTADOS ESPERADOS...15 1.5 JUSTIFICATIVA...15 1.6 ASPECTOS METODOLÓGICOS...16 1.6.1 Metodologia...16 2 FUNDAMENTAÇÃO TEÓRICA...17 2.1 LINGUAGENS FORMAIS E SUAS REPRESENTAÇÕES...17 2.2 AUTÔMATO FINITO...18 2.2.1 Autômatos Finitos Determinísticos...23 2.2.2 Autômatos Finitos Não-Determinísticos...24 2.2.3 Autômatos Finitos Não-Determinísticos com Movimento Vazio...27 2.2.4 Autômatos Finitos Determinísticos Mínimos...28 2.2.5 Equivalência dos autômatos finitos...28 2.2.5.1 Equivalência entre um Autômato Finito Não-Determinístico e um Autômato Finito Não-Determinístico com Movimento Vazio...29 2.2.5.2 Equivalência entre um Autômato Finito Não-Determinístico e um Autômato Finito Determinístico...30 2.3 EXPRESSÃO REGULAR...40 2.3.1 Propriedades das Expressões Regulares...42 2.3.2 Simplificação de Expressões Regulares...42 2.3.3 Definição Regular...43 2.4 AUTÔMATO FINITO X EXPRESSÃO REGULAR...44 2.4.1 Conversão de Expressões Regulares em Autômatos Finitos...44 2.4.2 Conversão de Autômatos Finitos em Expressões Regulares...50 2.4.3 Aplicações de Autômatos Finitos e Expressões Regulares...50 3 DESENVOLVIMENTO DO SOFTWARE...52 3.1 MODELAGEM...52 3.1.1 Casos de Uso...52 3.1.2 Diagramas de Seqüência...60

11 3.1.3 Diagrama de Classe...63 3.2 IMPLEMENTAÇÃO...65 3.2.1 Ambiente...67 4 CONSIDERAÇÕES FINAIS...79 5 REFERÊNCIAS BIBLIOGRAFICAS...81 APÊNDICE...83

12 1 INTRODUÇÃO 1.1 CONTEXTUALIZAÇÃO A Teoria de Linguagens Formais disponibiliza um conjunto de formalismos que podem ser utilizados na especificação e reconhecimento de sentenças de uma linguagem. De acordo com o lingüista Noam Chomsky, as linguagens podem ser hierarquizadas em Linguagens Regulares, Linguagens Livres de Contexto, Linguagens Sensíveis ao Contexto e Linguagens Enumeráveis Recursivamente ou Irrestritas, em ordem crescente de abrangência e complexidade. (MENEZES, 2002). Um reconhecedor é um sistema que a partir de um conjunto de símbolos que constituem a sentença, aceita ou rejeita a sentença como sendo ou não uma sentença válida para uma determinada linguagem. Os Autômatos Finitos são dispositivos formais utilizados no reconhecimento de sentenças de uma Linguagem Regular. (AHO; SETHI; ULLMAN, 1995). Os Autômatos Finitos podem ser classificados em Autômatos Finitos Determinísticos, em Autômatos Finitos Não-Determinísticos e em Autômatos Finitos Não-Determinísticos com Movimento Vazio, existindo uma equivalência de poder de reconhecimento entre os grupos de Autômatos Finitos. (AHO; SETHI; ULLMAN, 1995). Ainda, para qualquer Autômato Finito Não-Determinístico existe sempre outro Autômato Finito Determinístico que reconhece a mesma linguagem. (HOPCROFT; ULLMAN; MOTWANI, 2002). Toda Linguagem Regular pode ser descrita por uma expressão simples, denominada Expressão Regular. (AHO; SETHI; ULLMAN, 1995; HOPCROFT; ULLMAN; MOTWANI, 2002; MENEZES, 2002; PRICE; TOSCANI, 2001). As Expressões Regulares são formalismos denotacionais que estabelecem um modo declarativo descrição algébrica de representar sentenças de uma linguagem, sendo também consideradas dispositivos geradores, pois a partir de uma Expressão Regular é possível inferir como gerar sentenças de uma determinada linguagem. Uma Linguagem Regular pode ser denotada por uma ou mais Expressões Regulares. Apesar da abordagem de Expressão Regular para denotar linguagens ser fundamentalmente distinta da abordagem de Autômatos Finitos, estes dispositivos representam o mesmo conjunto de linguagens, as Linguagens Regulares. (HOPCROFT; ULLMAN; MOTWANI, 2002).

13 Dentro deste contexto, este trabalho procura fazer uma contribuição na geração e reconhecimento de sentenças de uma Linguagem Regular a partir dos formalismos de Expressão Regular e Autômato Finito. 1.2 PROBLEMA As Expressões Regulares e os Autômatos Finitos são formalismos usualmente empregados na implementação da etapa inicial de construção de um compilador a análise léxica, responsável pela identificação e classificação das unidades léxicas e o tratamento de erros léxicos. (AHO; SETHI; ULLMAN, 1995; JOSÉ NETO, 1987). Na análise léxica, os Autômatos Finitos são construídos a partir das especificações feitas com o uso das Expressões Regulares. Existe uma correspondência natural entre estes dispositivos, visto que toda linguagem aceita por um Autômato Finito é definida por uma Expressão Regular e toda linguagem denotada por uma Expressão Regular também é reconhecida por um Autômato Finito. (HOPCROFT; ULLMAN; MOTWANI, 2002). Os Autômatos Finitos Não-Determinísticos e os Autômatos Finitos Não-Determinísticos com Movimento Vazio são mais abrangentes e menos restritivos que os Autômatos Finitos Determinísticos. No entanto, exigem técnicas de backtracking quando de sua implementação, o que implica em um tempo maior para efetuar a análise da sentença. Os Autômatos Finitos Determinísticos em geral são mais difíceis de serem especificados, mas mais eficientes no reconhecimento de sentenças. (AHO; SETHI; ULLMAN, 1995; HOPCROFT; ULLMAN; MOTWANI, 2002). Todo Autômato Finito Não-Determinístico com Movimento Vazio pode ser convertido em um Autômato Finito Não-Determinístico e todo Autômato Finito Não-Determinístico pode ser convertido em um Autômato Finito Determinístico. Entretanto, o Autômato Finito Determinístico resultante dessa conversão pode apresentar um número consideravelmente maior de estados que o Autômato Finito Não-Determinístico equivalente, exigindo, portanto, mais espaço para sua representação. Contudo, também é possível, sempre, encontrar um Autômato Finito Determinístico Mínimo equivalente a qualquer Autômato Finito Determinístico, apresentando um número reduzido de estados e ainda assim reconhecendo as mesmas sentenças aceitas pelo Autômato Finito Determinístico.

14 1.3 OBJETIVOS 1.3.1 Objetivo geral Desenvolver um software educacional para construção e validação de formalismos utilizados na geração e reconhecimento de sentenças de uma Linguagem Regular. 1.3.2 Objetivos específicos realizar um estudo sobre Autômatos Finitos e Expressão Regular, bem como as suas equivalências, conversões e algoritmos; realizar a modelagem do software; implementar e testar o software; estimular o aprendizado autônomo através de um aplicativo que possibilite a autoaprendizagem; assistir e servir de apoio aos alunos da disciplina de Linguagens Formais e Compiladores dos cursos de Ciência da Computação e Engenharia de Computação da Universidade do Vale do Itajaí UNIVALI, campus São José, na construção e validação dos formalismos utilizados para reconhecer e gerar sentenças de uma Linguagem Regular, complementando discussões e exercícios resolvidos em sala de aula. 1.3.3 Escopo e delimitação do trabalho Assim como os Autômatos Finitos e as Expressões Regulares, as Gramáticas Regulares são sistemas formais de uma Linguagem Regular. Através de uma Gramática Regular é possível obter um conjunto de sentenças de uma linguagem particular, sendo, portanto, um dispositivo gerador de sentenças. Este trabalho estabelece a elaboração de um software educacional que permita a construção de Autômatos Finitos e a conversão de Autômatos Finitos Não-Determinísticos com Movimento Vazio para Autômatos Finitos Não-Determinísticos, de Autômatos Finitos Não-Determinísticos para Autômatos Finitos Determinísticos e de Autômatos Finitos Determinísticos para Autômatos Finitos Determinísticos Mínimos. Através do software também será possível encontrar o

15 Autômato Finito equivalente a uma Expressão Regular qualquer, assim como reconhecer sentenças de uma Linguagem Regular. Não pertence ao escopo deste trabalho abordar o formalismo de Gramática Regular. 1.4 RESULTADOS ESPERADOS O desenvolvimento do trabalho possibilitará a especificação de uma Linguagem Regular através de Autômatos Finitos e Expressões Regulares com o uso de um software educacional. A expectativa com o uso sistematizado do software é que a aprendizagem da Teoria de Linguagens Formais, em particular dos formalismos de Linguagens Regulares, seja facilitada aos alunos e que o aplicativo possa ser uma complementação às discussões promovidas em sala de aula. Este trabalho apresenta ainda uma contribuição para a aplicação de uma prática pedagógica inovadora. 1.5 JUSTIFICATIVA Os formalismos de Expressão Regular e Autômatos Finitos são amplamente utilizados na construção de compiladores, em particular, na implementação do analisador léxico. Apesar de serem considerados dispositivos formais simples, o forte caráter matemático que os sustenta impõe resistência para o seu uso e se observa dificuldade para se fazer a sua validação. Em geral, não é fácil verificar se uma Expressão Regular tem um determinado Autômato Finito como correspondente ou se dado um Autômato Finito qualquer uma Expressão Regular o representa ou ainda se um Autômato Finito Determinístico é mínimo e equivalente a um Autômato Finito Não-Determinístico ou a um Autômato Finito Não-Determinístico com Movimento Vazio. Também para muitas situações é complexo diagnosticar se uma sentença pertence ou não à linguagem definida por uma Expressão Regular ou por um Autômato Finito. O desenvolvimento deste trabalho permitirá construir Autômatos Finitos e Expressões Regulares e validar os diferentes tipos de Autômatos Finitos (Autômatos Finitos Determinísticos, Autômatos Finitos Não-Determinísticos e Autômatos Finitos Não-Determinísticos com Movimento Vazio), possibilitando verificar se para uma dada Expressão Regular o correspondente Autômato Finito foi construído. As sentenças serão reconhecidas a partir de um Autômato Finito que representa uma Linguagem Regular particular.

16 Assim, com este trabalho será possível realizar a validação das especificações de uma linguagem de programação feitas através de Expressões Regulares e a subseqüente construção dos correspondentes Autômatos Finitos e a implementação de analisadores léxicos dos compiladores da disciplina de Linguagens Formais e Compiladores dos cursos de Ciência da Computação e Engenharia de Computação da Universidade do Vale do Itajaí UNIVALI, campus São José. 1.6 ASPECTOS METODOLÓGICOS 1.6.1 Metodologia Cervo e Bervian (1996) estabelecem que em um trabalho de natureza aplicada o pesquisador busca uma solução mais imediata para o problema proposto. De acordo com Jung (2005), uma pesquisa que utiliza conhecimentos básicos, tecnologias existentes, conhecimentos tecnológicos e que tenha como objeto um novo produto ou processo é caracterizado como tecnológica. Tendo em vista que o trabalho proposto visa o desenvolvimento de um software educacional, o mesmo se adequa em um trabalho de natureza aplicada ou tecnológica. Ainda, Silva e Menezes (2000) afirmam que do ponto de vista do problema, o trabalho pode ser classificado como qualitativo, pois não serão utilizados métodos estatísticos como amostragem probabilística, amostragem não-probabilística entre outras. Considerando os objetivos definidos no trabalho, a pesquisa exploratória foi a que se mostrou mais adequada para o seu desenvolvimento. Como definem Cervo e Bervian (1996), a pesquisa exploratória não elabora hipóteses e sim se limita à definição de objetivos e a busca de informações sobre um determinado assunto, a qual se realiza através de fontes documentais e fontes bibliográficas.

17 2 FUNDAMENTAÇÃO TEÓRICA 2.1 LINGUAGENS FORMAIS E SUAS REPRESENTAÇÕES Entende-se por Teoria das Linguagens Formais e dos Autômatos o estudo de modelos matemáticos que possibilitam a especificação e o reconhecimento de linguagens 1 (no sentido amplo da palavra), suas classificações, estruturas, propriedades, características e inter-relacionamentos. (FURTADO, p.6). As Linguagens Formais são dispositivos com sustentação matemática baseadas na Teoria da Computação, usadas na especificação e representação de linguagens. A teoria das Linguagens Formais foi desenvolvida a partir dos anos 50 para possibilitar estudos relacionados com as linguagens naturais. No entanto, foi verificado que essa teoria tinha aplicação no estudo das linguagens artificiais, como em linguagens de programação. O lingüista Noam Chomsky apud (MENEZES, 2002) definiu uma classificação para as linguagens, conhecida como hierarquia de Chomsky conforme Figura 1. LINGUAGEM ENUMERÁVEL RECURSIVAMENTE LINGUAGEM SENSÍVEL AO CONTEXTO LINGUAGEM LIVRE DE CONTEXTO LINGUAGEM REGULAR Figura 1: Hierarquia de Chomsky Fonte: (MENEZES, 2002) 1 Uma linguagem é um conjunto de elementos (símbolos) e métodos (regras) para combinar estes elementos na formação de sentenças, usado e entendido por uma comunidade. As linguagens podem ser finitas ou infinitas. Uma linguagem finita pode ser definida pela enumeração das sentenças constituintes ou através de uma descrição algébrica. Uma linguagem infinita é definida com uma representação finita. Reconhecedores e geradores são representações finitas para linguagens. (WIKIPEDIA, 2005).

18 As Linguagens Regulares compreendem o conjunto de linguagens mais simples, sendo possível desenvolver algoritmos de reconhecimento ou geração de pouca complexidade, grande eficiência e de fácil implementação. (MENEZES, 2002, p.32). Essas linguagens podem ser denotadas por Expressões Regulares, reconhecidas por Autômatos Finitos e geradas através de Gramáticas Regulares. De acordo com HOPCROFT; ULLMAN; MOTWANI (2002), muitos problemas podem ser desenvolvidos mais facilmente a partir da especificação feita em termos de Expressões Regulares e a subseqüente transformação para o Autômato Finito correspondente. O desenvolvimento de analisadores léxicos, editores de texto, sistemas de pesquisa, linguagens de comunicação homem-máquina são algumas das possibilidades de aplicação dos formalismos das Linguagens Regulares. As Linguagens Livre de Contexto permitem a adequada especificação das estruturas sintáticas de linguagens de programação, visto que a maioria das linguagens de programação são classificadas como Linguagens Livre de Contexto e podem, portanto, ser geradas e reconhecidas através dos formalismos de Gramática Livre de Contexto e Autômato de Pilha, respectivamente. Assim, dentre as possíveis aplicações das Linguagens Livre de Contexto estão a especificação de linguagens de programação e a implementação de analisadores sintáticos e de tradutores de linguagens. As Linguagens Sensíveis ao Contexto e Enumeráveis Recursivamente permitem explorar os limites da capacidade de desenvolvimento de reconhecedores ou geradores de linguagens. Máquina de Turing com fita limitada e Gramática Sensível ao Contexto são os formalismos reconhecedores e geradores das Linguagens Sensíveis ao Contexto. As Linguagens Enumeráveis Recursivamente são geradas através de Gramáticas Enumeráveis Recursivamente e reconhecidas por Máquina de Turing. 2.2 AUTÔMATO FINITO Os Autômatos Finitos são dispositivos reconhecedores de grande importância na computação. Usualmente os Autômatos Finitos são utilizados na identificação, classificação das unidades léxicas ou tokens 2 e tratamento dos erros léxicos de uma linguagem e na implementação da parte 2 Um token é uma seqüência de caracteres com um significado coletivo (AHO; SETHI; ULLMAN, 1995). As palavras reservadas, os identificadores, as constantes numéricas e literais, os símbolos especiais e comentários são exemplos de unidades léxicas ou tokens.

19 inicial de um compilador a análise léxica. O analisador léxico é o componente responsável por obter as unidades mínimas significativas do programa-fonte (lexemas 3 ) que está sendo analisado e classificá-las apropriadamente. Nesta fase da análise, o programa é lido caractere a caractere e por isso, o desempenho de um analisador léxico tem impacto direto sobre o desempenho do compilador. (AHO; SETHI; ULLMAN, 1995; JOSÉ NETO, 1987). Segundo MENEZES (2002) um Autômato Finito pode ser visto como uma máquina de estados composta essencialmente de três partes (Figura 2): fita: dispositivo de entrada que contém a sentença 4 a ser analisada. A fita é finita à esquerda e à direita e divide-se em células onde cada célula armazena um símbolo 5, o qual pertence a um alfabeto 6 de entrada. A fita não permite gravação e nem possui memória auxiliar. Inicialmente a fita encontra-se totalmente ocupada pela palavra a ser processada (informação de entrada da máquina); unidade de controle: reflete o estado corrente da máquina e realiza seus movimentos. A leitura é realizada através da cabeça da fita, a qual acessa uma unidade da fita de cada vez, movimentando-se apenas para a direita. A posição inicial da cabeça de leitura é o mais a esquerda possível da fita. A unidade de controle possui um número finito e predefinido de estados 7 ; função de transição: função que comanda a leitura dos símbolos da fita e define o estado da máquina. Dependendo do estado corrente e do símbolo lido, um novo estado é determinado para o autômato. Como os autômatos não têm memória de trabalho para armazenar informações para o próximo processamento é necessário trabalhar com o conceito de estados. 3 Lexema é um conjunto de caracteres no programa fonte que é reconhecido pelo padrão de algum token (AHO; SETHI; ULLMAN, 1995). 4 Sentença é uma seqüência finita de símbolos retirados do mesmo alfabeto (AHO; SETHI; ULLMAN, 1995). 5 Um símbolo é uma entidade abstrata elementar que não possui uma definição formal. Um símbolo pode ser qualquer caractere uma letra, um dígito, um caractere de pontuação, acentuação, um caractere especial etc. 6 Alfabeto é qualquer conjunto finito de símbolos (AHO; SETHI; ULLMAN, 1995). 7 Um estado corresponde a uma situação particular no processo de reconhecimento.

20 Figura 2: Autômato Finito como uma máquina com controle finito Fonte: (MENEZES, 2002) Para uma melhor compreensão da definição de máquina de estado finito ou Autômato Finito pode-se admitir a existência de uma máquina imaginária que possa assumir os estados de repouso, atividade e manutenção. A representação através de um Autômato Finito pode ser observada na Figura 3. OK manutenção PANE início repouso OFF ON atividade Figura 3: exemplo de uma máquina de estados Fonte: (ZILLER, 1997) Inicialmente a máquina está em repouso. A máquina entra em atividade quando é acionado o evento ON e volta para o repouso quando seu evento OFF é acionado automaticamente após a produção. Assim o correto funcionamento da máquina é caracterizado por uma seqüência de eventos ON e OFF. No entanto, pode ser que durante o período de atividade da máquina ocorra um problema e neste caso, o evento PANE será acionado, mudando o estado da máquina para manutenção. Após a resolução do problema a máquina volta para o estado repouso com o evento OK. Os Autômatos Finitos têm a capacidade de reconhecer uma sentença e retornar se esta pertence ou não a uma determinada Linguagem Regular. Assim, pode-se dizer que o Autômato Finito é o

21 tipo mais simples de reconhecedor de linguagens. (MENEZES, 2002; PRICE; TOSCANI, 2001; HOPCROFT; ULLMAN; MOTWANI, 2002). Existem três notações ou formas de representação de Autômatos Finitos: representação formal, diagramas de transição e tabelas de transição. Representação Formal Formalmente um Autômato Finito é uma quíntupla M = (Q, Σ, δ, q 0, F), onde: Q - conjunto finito e não vazio de estados possíveis; Σ - alfabeto de símbolos de entrada; δ - função de transição 8 ; q 0 - estado inicial (q 0 Q); F - conjunto de estados finais (F Q). A máquina de estados da Figura 3 pode ser representada formalmente através do Autômato Finito M máquina = (Q, Σ, δ, q 0, F), onde: Q = {repouso, atividade, manutenção} Σ = {ON, OFF, PANE, OK} δ = {δ (repouso, ON) = atividade, δ (atividade, OFF) = repouso, δ (atividade, PANE) = manutenção, δ (manutenção, OK) = repouso} q 0 = repouso F = {repouso} Representação através de diagrama de transição Um diagrama de transição é um grafo direcionado onde os vértices (círculos) representam os estados e as arestas (linhas) representam as transições 9 (Figura 3). (HOPCROFT; ULLMAN; 8 A função de transição ou de mapeamento δ determina o estado q novo a partir do estado q atual e do símbolo de entrada x. Simbolicamente, δ (q atual, x) = q novo.

22 MOTWANI, 2002; MENEZES, 2002). O estado inicial é representado com uma seta na frente do respectivo estado e o (s) estado (s) final (is) é (são) representado por um círculo duplo. Entre dois estados q i, q j existirá uma aresta direcionada de q i para q j com rótulo x se x Σ e δ (q i, x) = q j. Na Figura 3 existe uma aresta rotulada com ON do estado repouso para o estado atividade porque δ (repouso, ON) = atividade. Representação através de tabela de transição A tabela de transição é uma tabela onde as linhas representam os estados (o estado inicial é indicado com uma seta em frente do estado referente a ele e o estado final é indicado por um asterisco em frente do estado referente a ele), as colunas representam os símbolos de entrada e o conteúdo da posição (q i, x) será igual à q j, se δ (q i, x) = q j ; caso contrário será indefinido. (HOPCROFT; ULLMAN; MOTWANI, 2002; MENEZES, 2002). A Figura 4 ilustra a tabela de transição do Autômato Finito correspondente à máquina hipotética da Figura 3. δ ON OFF PANE OK * repouso atividade - - - atividade - repouso manutenção - manutenção - - - repouso Figura 4: tabela de transição para o exemplo da Figura 3 Fonte: (ZILLER, 1997) Os Autômatos Finitos podem ser classificados em Autômatos Finitos Determinísticos, Autômatos Finitos Não-Determinísticos, e Autômatos Finitos Não-Determinísticos com Movimento Vazio. (PRICE; TOSCANI, 2001; HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). 9 Uma transição de estado é a mudança de um estado para outro (MENEZES, 2002).

23 2.2.1 Autômatos Finitos Determinísticos Um Autômato Finito Determinístico (AFD) é um caso especial do Autômato Finito Não- Determinístico, no qual nenhum estado possui ε-transições 10 e para todos os estados independentes do símbolo de entrada existe apenas uma transição possível para cada símbolo do alfabeto. (HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). Uma definição formal para Autômato Finito Determinístico é estabelecida através da quíntupla M = (Q,, δ, q 0, F). (PRICE; TOSCANI, 2001; MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002), onde: Q - conjunto finito e não vazio de estados possíveis; - alfabeto de símbolos de entrada; δ - função de transição δ : Q x Q, a qual é uma função parcial 11 ; q 0 - estado inicial (q 0 Q); F - conjunto de estados finais (F Q). A função de transição δ : Q x Q corresponde a δ (q i, x) = q j e a interpretação é reconhecer x se x for o próximo símbolo da entrada, o estado atual for q i e avançar para o estado q j. A representação de Autômatos Finitos Determinísticos através de diagramas de transição e através de tabelas de transição pode ser observada nas Figuras 5 e 6, respectivamente. O referido Autômato Finito Determinístico M = ({q 0, q 1, q 2, q 3 }, {a, b}, δ, q 0, {q 3 }) reconhece a linguagem dada por L = {w w 2 e w possui aa ou bb como subsentença}, ou seja, toda sentença w tomada sobre um alfabeto {a, b}, de tamanho maior ou igual a dois e que tem as seqüências aa ou bb como subsentenças. (MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002). 10 ε-transições são transições rotuladas por ε. A semântica dessas transições é de que o estado se altera, sem que seja consumido um símbolo da entrada. 11 Função parcial é uma relação onde cada elemento do domínio está relacionado com, no máximo, um elemento do contradomínio (MENEZES, 2002).

24 início a q 0 b q 1 b a q 2 a q 3 b a, b Figura 5: diagrama de transição de um Autômato Finito Determinístico Fonte: (MENEZES, 2002) δ a b q 0 q 1 q 2 q 1 q 3 q 2 q 2 q 1 q 3 * q 3 q 3 q 3 Figura 6: tabela de transição de um Autômato Finito Determinístico Fonte: (MENEZES, 2002) 2.2.2 Autômatos Finitos Não-Determinísticos Analogamente ao Autômato Finito Determinístico, o Autômato Finito Não-Determinístico (AFN) é um modelo matemático definido através de uma quíntupla que difere do Autômato Finito Determinístico apenas no tipo da função de transição. Para um Autômato Finito Não- Determinístico, como nos Autômatos Finitos Determinísticos, δ é uma função de transição que recebe um estado e um símbolo como argumentos, mas diferentemente do Autômato Finito

25 Determinístico retorna um conjunto de zero, uma ou mais transições de estados. (HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). A facilidade do não-determinismo nem sempre aumenta o poder de reconhecimento de linguagens, pois o Autômato Finito Não-Determinístico aceita apenas Linguagens Regulares, assim como o Autômato Finito Determinístico. A grande vantagem que o Autômato Finito Não- Determinístico tem sobre o Autômato Finito Determinístico é a facilidade de seu projeto, visto que são menos restritivos. (HOPCROFT; ULLMAN; MOTWANI, 2002; MENEZES, 2002). Um Autômato Finito Não-Determinístico é definido pela quíntupla M = (Q,, δ, q0, F). (PRICE; TOSCANI, 2001; MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002), onde: Q - conjunto finito e não vazio de estados possíveis; - alfabeto de símbolos de entrada; δ - função de transição δ : Q x 2 Q, a qual é uma função parcial; q 0 - estado inicial (q 0 Q); F - conjunto de estados finais (F Q). A função de transição δ : Q x 2 Q corresponde a δ (q i, x) = {q j1, q j2,..., q jn } e a interpretação é reconhecer x se x for o próximo símbolo de entrada, o estado atual for q i e avançar para o estado q j1 ou para o estado q j2 ou... ou para o estado q jn. Assim como os Autômatos Finitos Determinísticos, os Autômatos Finitos Não-Determinísticos podem ser representados através de diagramas de transição e de tabelas de transição. (MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). No diagrama de transição a representação se realiza de maneira análoga a dos Autômatos Finitos Determinísticos. A única diferença é que a partir de um determinado estado pode-se assumir mais de uma transição (mais de um caminho) para um mesmo símbolo do alfabeto (Figura 7). (AHO; SETHI; ULLMAN, 1995).

26 a início q 0 a q 1 b q 2 b q 3 b Figura 7: diagrama de transição de um Autômato Finito Não-Determinístico Fonte: (AHO; SETHI; ULLMAN, 1995) A linguagem reconhecida pelo Autômato Finito Não-Determinístico representado na Figura 7 corresponde ao conjunto de sentenças formadas pelos símbolos {a, b} e que terminam com a seqüência abb. O não-determinísmo é observado na transição do estado q 0 com o símbolo a. A tabela de transição do Autômato Finito Não-Determinístico é análoga a do Autômato Finito Determinístico. A diferença está no conteúdo de cada posição (q i, x) que poderá conter um conjunto de zero ou mais estados q j. (HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). A representação através de tabelas de transição oferece uma grande vantagem por dar acesso rápido às transições; entretanto, pode ocupar muito espaço quando o alfabeto for grande e as transições forem na maioria indefinidas. (HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). A tabela de transição correspondente ao Autômato Finito Não-Determinístico da Figura 7 é apresentada na Figura 8. δ a b q 0 {q 0, q 1 } q 0 q 1 - q 2 q 2 - q 3 * q 3 - - Figura 8: tabela de transição de um Autômato Finito Não-Determinístico Fonte: (AHO; SETHI; ULLMAN, 1995)

27 2.2.3 Autômatos Finitos Não-Determinísticos com Movimento Vazio Um Autômato Finito Não-Determinístico pode ser generalizado incluindo transições com o movimento vazio ou ε, que segundo MENEZES (2002) podem ser vistas como um nãodeterminismo interno dos Autômatos. Como os Autômatos Finitos Não-Determinísticos, os Autômatos Finitos Não-Determinísticos com Movimento Vazio (AFN-ε) não aumentam o poder de reconhecimento de linguagens. Entretanto possuem a vantagem de serem mais fáceis de projetar e facilitar algumas construções e demonstrações relacionadas ao formalismo de Autômatos Finitos. (MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002). Um Autômato Finito Não-Determinístico com Movimento Vazio pode ser definido formalmente como uma quíntupla M = (Q,, δ, q 0, F). (PRICE; TOSCANI, 2001; MENEZES, 2002; HOPCROFT; ULLMAN; MOTWANI, 2002), onde: Q - conjunto finito e não vazio de estados possíveis; - alfabeto de símbolos de entrada; δ - função de transição δ : Q x ( U {ε}) 2 Q, a qual é uma função parcial; q 0 - estado inicial (q 0 Q); F - conjunto de estados finais (F Q). A função de transição do Autômato Finito Não-Determinístico com Movimento Vazio é equivalente à função de transição do Autômato Finito Não-Determinístico, diferenciando-se apenas em relação ao alfabeto de entrada que admite o símbolo ε. O diagrama de transição e a tabela de transição correspondentes ao Autômato Finito Não- Determinístico com Movimento Vazio que reconhece a linguagem L = {w w {a, b} e w é formado por qualquer quantidade de a s, seguida por qualquer quantidade de b s} são apresentados nas Figuras 9 e 10, respectivamente.

28 início q 0 ε q 1 a b Figura 9: diagrama de transição de um Autômato Finito Não-Determinístico com Movimento Vazio Fonte: (MENEZES, 2002) O Autômato Finito Não Determinístico com Movimento Vazio representado pelo diagrama de transição da Figura 9, reconhece a linguagem denotada por L = {w qualquer número de símbolos a seguidos de um ou mais símbolos b}. δ a b ε q 0 {q 0 } - {q 1 } * q 1 - q 1 - Figura 10: tabela de transição de um Autômato Finito Não-Determinístico com Movimento Vazio Fonte: (MENEZES, 2002) 2.2.4 Autômatos Finitos Determinísticos Mínimos A transformação de um Autômato Finito Determinístico para um Autômato Finito Determinístico Mínimo (AFDm) tem como objetivo gerar um Autômato Finito equivalente que possui um número reduzido de estados. Para cada linguagem existe um único Autômato Finito Determinístico Mínimo, ou seja, dois Autômatos Finitos Determinísticos diferentes, mas que aceitam a mesma linguagem, ao serem minimizados resultam no mesmo Autômato Finito Determinístico Mínimo, diferenciando-se apenas na identificação dos estados. (MENEZES, 2002). 2.2.5 Equivalência dos autômatos finitos A equivalência entre Autômatos Finitos é a forma de demonstrar que Autômatos Finitos Determinísticos podem reconhecer uma mesma Linguagem Regular que os Autômatos Finitos Não-Determinísticos.

29 2.2.5.1 Equivalência entre um Autômato Finito Não-Determinístico e um Autômato Finito Não-Determinístico com Movimento Vazio Segundo MENEZES (2002), a classe dos Autômatos Finitos Não-Determinísticos com Movimento Vazio é equivalente à classe dos Autômatos Finitos Não-Determinísticos. Ainda segundo MENEZES (2002), a prova para esta equivalência é mostrar que se pode obter um Autômato Finito Não-Determinístico que reconheça as mesmas sentenças que são reconhecidas por um Autômato Finito Não-Determinístico com Movimento Vazio. Algoritmo para transformação de um Autômato Finito Não-Determinístico com Movimento Vazio para um Autômato Finito Não-Determinístico O algoritmo consiste em construir uma função de transição sem movimentos vazios, onde o conjunto de estados destino de cada transição não vazia é aumentada com todos os estados possíveis de serem atingidos com transições vazias. (MENEZES, 2002). ENTRADA: um AFN-ε M = (Q,, δ, q 0, F). SAÍDA: um AFN M = (Q,, δ, q 0, F ), tal que M M. δ função de transição tal que δ : Q x Σ 2 Q, onde δ (q, x) = δ ({q}, x); F conjunto de todos os estados q Q tal que algum elemento de FECHO 12 -ε (q) pertence a F. Exemplo de transformação de um Autômato Finito Não-Determinístico com Movimento Vazio para um Autômato Finito Não-Determinístico Seja o Autômato Finito Não-Determinístico com Movimento Vazio M = (Q,, δ, q 0, F) representado pela Figura 11. 12 A função FECHO-ε (q) é dada por: i. FECHO-ε (q) = {q}, se δ (q, ε) é indefinida; ii. FECHO-ε (q) = {q} δ (q, ε) ( p em c FECHO-ε (p)), caso contrário.

30 início ε ε q 0 q 1 q 2 a b a Figura 11: Autômato Finito Não-Determinístico com Movimento Vazio Fonte: (MENEZES, 2002) O Autômato Finito Não-Determinístico M = (Q,, δ, q 0, F ) equivalente pode ser observado na Figura 12. a, b início q 0 a, b q 1 a, b q 2 a b a Figura 12: Autômato Finito Não-Determinístico equivalente Fonte: (MENEZES, 2002) 2.2.5.2 Equivalência entre um Autômato Finito Não-Determinístico e um Autômato Finito Determinístico Embora existam muitas linguagens para as quais os Autômatos Finitos Não-Determinísticos as representam mais adequadamente, sua construção e implementação é mais complexa e custosa, pois requer algoritmos de backtracking (recursivos). (HOPCROFT; ULLMAN; MOTWANI, 2002). Geralmente um Autômato Finito Determinístico possui um número de estados semelhante a um Autômato Finito Não-Determinístico, embora seu número de transições frequentemente seja maior. Considerando o pior caso, o menor Autômato Finito Determinístico possível pode ter 2 n estados, para um Autômato Finito Não-Determinístico de n estados. (HOPCROFT; ULLMAN; MOTWANI, 2002).

31 Para provar que os Autômatos Finitos Determinísticos são equivalentes aos Autômatos Finitos Não-Determinísticos basta provar que é possível a construção de um Autômato Finito Determinístico a partir de um Autômato Finito Não-Determinístico para uma mesma Linguagem Regular. (MENEZES, 2002). Algoritmo de transformação de um Autômato Finito Não-Determinístico para um Autômato Finito Determinístico A construção de Autômato Finito Determinístico a partir de um Autômato Finito Não- Determinístico que reconheça a mesma linguagem é feita pela aplicação de um algoritmo chamado construção de conjuntos o qual objetiva construir todos os subconjuntos do conjunto de estados do Autômato Finito Não-Determinístico. (HOPCROFT; ULLMAN; MOTWANI, 2002; AHO; SETHI; ULLMAN, 1995). ENTRADA: um AFN M = (Q,, δ, q 0, F). SAIDA: um AFD M = (Q,, δ, q 0, F ), tal que M M. A construção dos subconjuntos a partir do Autômato Finito Não-Determinístico M = (Q,, δ, q 0, F), produz o Autômato Finito Determinístico M = (Q,, δ, q 0, F ), onde M M e a linguagem reconhecida pelo Autômato M é também aceita pelo Autômato M, sendo: Q conjunto de subconjuntos de Q (conjunto potência de Q); se Q tem n estados, Q terá 2 n estados (usualmente nem todos esses estados serão acessíveis a partir do estado inicial de Q e poderão ser eliminados); Σ' alfabeto dos símbolos de entrada, tal que Σ' = Σ; δ função de transição para cada conjunto C Q e para cada símbolo de entrada x em Σ, δ (C, x) = p em c δ (p, x) (o mapeamento δ (C, x) é a união dos estados que M alcança a partir de p com a entrada x, para todos os estados p em C para os quais δ (p, x) ); q 0 estado inicial conjunto que contém q 0 ;

32 F conjunto de estados finais conjunto de subconjuntos C para os quais C F Ø (são todos os conjuntos de estados que incluem ao menos um estado final F de M). Exemplo de transformação de um Autômato Finito Não-Determinístico para um Autômato Finito Determinístico Seja M = ({q 0, q 1, q 2, q 3, q 4 }, {a, b}, δ, q 0, {q 2, q 4 }), onde: δ = {δ (q 0, a) = (q 0, q 3 ), δ (q 0, b) = (q 0, q 1 ), δ (q 1, b) = q 2, δ (q 2, a) = q 2, δ (q 2, b) = q 2, δ (q 3, a) = q 4, δ (q 4, a) = q 4, δ (q 4, b) = (q 4 )} O Autômato Finito Determinístico M equivalente é representado pela tabela de transição da Figura 13. δ a b q 0 {q 0, q 3 } {q 0, q 1 } {q 0, q 3 } {q 0, q 3, q 4 } {q 0, q 1 } {q 0, q 1 } {q 0, q 3 } {q 0, q 1, q 2 } * {q 0, q 3, q 4 } {q 0, q 3, q 4 } {q 0, q 1, q 4 } * {q 0, q 1, q 2 } {q 0, q 2, q 3 } {q 0, q 1, q 2 } * {q 0, q 1, q 4 } {q 0, q 3, q 4 } {q 0, q 1, q 2, q 4 } * {q 0, q 2, q 3 } {q 0, q 2, q 3, q 4 } {q 0, q 1, q 2 }

33 * {q 0, q 1, q 2, q 4 } {q 0, q 2, q 3, q 4 } {q 0, q 1, q 2, q 4 } * {q 0, q 2, q 3, q 4 } {q 0, q 2, q 3, q 4 } {q 0, q 1, q 2, q 4 } Figura 13: Autômato Finito Determinístico equivalente Para transformar um Autômato Finito Determinístico para um Autômato Finito Determinístico Mínimo equivalente o Autômato Finito não pode possuir estados inacessíveis (estados que nunca são alcançados a partir de um estado inicial), não pode possuir transições indefinidas (a partir de qualquer estado com qualquer símbolo do alfabeto de entrada não pode existir transições não previstas) e não pode possuir estados mortos (estados não finais a partir dos quais não se alcança algum estado final.). (AHO; SETHI; ULLMAN, 1995). O algoritmo subseqüente demonstra os passos que devem ser seguidos para transformar um Autômato Finito Determinístico para um Autômato Finito Determinístico Mínimo. Algoritmo de transformação de um Autômato Finito Determinístico para um Autômato Finito Determinístico Mínimo ENTRADA: um AFD M = (Q, Σ, δ, q 0, F); SAÍDA: um AFDm M = (Q, Σ, δ, q 0, F ), tal que M M passo 1. eliminação dos estados inacessíveis 1. assinalar inicialmente o estado inicial como estado acessível; 2. para cada estado q i assinalado, marcar os estados q j alcançáveis por uma transição x partir de q i ; 3. eliminar os estados que não foram assinalados. passo 2. eliminação das transições indefinidas 1. incluir um novo estado não-final Φ, onde são colocadas transições para ele mesmo com todos os símbolos do alfabeto; 2. com a inclusão do novo estado não-final Φ, as transições não previstas são trocadas por uma transição para este novo estado não-final. passo 3. determinação dos estados equivalentes

34 1. dividir Q em duas classes de equivalência, a primeira contendo os estados finais e a segunda contendo os demais estados de Q; 2. realizar sucessivas divisões nas classes obtidas até nenhuma nova classe seja obtida. É necessário considerar nesse passo que um conjunto de estados q 0, q 1,..., q n está na mesma classe de equivalência se todas as transições que partem destes estados levam o Autômato aos estados q i, q i+1,..., q n estando estes em uma mesma classe equivalente também. passo 4. eliminação dos estados mortos 1. assinalar inicialmente os estados finais como não mortos; 2. assinalar os estados q j que alcançam um estado assinalado q i ; 3. eliminar os estados que não foram assinalados, tornando indefinidas as transições que levam a um estado eliminado. passo 5. construção do Autômato Finito Determinístico Mínimo M = (Q, Σ, δ, e0, F ), onde: Q - conjunto finito de estados equivalentes; - alfabeto de símbolos de entrada, tal que Σ = Σ; δ' - função de transição: Q x Q, tal que δ' ({p}, x) = {q} δ(p i, x) = q i, sendo p i e q i são elementos de {p} e {q}, respectivamente, e {p} e {q} são conjuntos de estados equivalentes; q 0 - estado equivalente que contém o estado inicial q 0 ; F - conjunto de estados equivalentes (F Q ), tal que algum estado componente de F é um estado final de M. Exemplo de transformação de um Autômato Finito Determinístico para um Autômato Finito Determinístico Mínimo Considerando o Autômato Finito Determinístico da Figura 14

35 a q 4 b a, b início q 0 a q 1 a q 2 b c q 3 q 5 a, b a, b, c Figura 14: Diagrama de transição do Autômato Finito Determinístico e aplicando o algoritmo de minimização de Autômatos Finitos. passo 1. eliminação dos estados inacessíveis (Figura 15). δ a b c acessíveis q 0 q 1 - - X * q 1 q 2 q 3 q 5 X * q 2 q 2 q 2 - X * q 3 q 3 q 3 - X * q 4 q 4 q 1 - q 5 q 5 q 5 q 5 X Figura 15: Tabela de transição do Autômato Finito Determinístico com identificação dos estados acessíveis A tabela de transição do Autômato Finito Determinístico resultante da eliminação dos estados inacessíveis pode ser observada na Figura 16.

36 δ a b c q 0 q 1 - - * q 1 q 2 q 3 q 5 * q 2 q 2 q 2 - * q 3 q 3 q 3 - q 5 q 5 q 5 q 5 Figura 16: Tabela de transição do Autômato Finito Determinístico sem os estados inacessíveis passo 2. eliminação das transições indefinidas. As transições δ (q 0, b), δ (q 0, c), δ (q 2, c) e δ (q 3, c) são indefinidas; e portanto, eliminar tais transições implica em adicionar ao Autômato Finito Determinístico um novo estado não final Φ e substituir as transições indefinidas por transições para Φ e estabelecer transições de Φ para Φ com todos os símbolos do alfabeto. A Figura 17 demonstra a eliminação das transições indefinidas para o Autômato Finito Determinístico. δ a b c q 0 q 1 Φ Φ * q 1 q 2 q 3 q 5 * q 2 q 2 q 2 Φ * q 3 q 3 q 3 Φ q 5 q 5 q 5 q 5 Φ Φ Φ Φ Figura 17: Tabela de transição do Autômato Finito Determinístico sem transições indefinidas passo 3. determinação dos estados equivalentes. Para determinar os estados equivalentes é necessária a construção dos conjuntos de equivalência.