como usar

Propaganda
JFLAP JAVA Formal Language and Automata Package
Autor: Ricardo Augusto Rabelo Oliveira
Resumo
Este relatório é um tutorial descrevendo o uso do JFLAP, uma ferramenta utilizada no
estudo de teoria de linguagens.
Introdução
O JFLAP (Java Formal Language and Automata Package) é uma ferramenta visual usada
para criar e simular diversos tipos de autômatos, e converter diferentes representações de
linguagens. O seu principal objetivo é facilitar o aprendizado de teoria de linguagens,
através de uma interface simples e intuitiva. Ele pode ser usado tanto como aparato de
auxílio às aulas, como ferramenta de estudo e pesquisa, facilitando tanto a criação de
autômatos, quanto a verificação se estão corretos.
O passo inicial para a utilização do JFLAP é a criação de autômatos. O usuário
utiliza a interface visual para criar um grafo representando os estados, o diagrama de
transições e os seus labels. Em seguida, pode definir a palavra de entrada e então
visualiza a execução de cada passo do autômato, verificando se o seu projeto é coerente.
Isso pode ser feito com três escolhas de execução, um modo rápido, que indica a
resposta imediata, um modo passo a passo, que mostra os estados percorridos, e o modo
múltiplo, que mostra o teste de diversas palavras, da mesma maneira que o modo rápido.
No modo de conversão do JFLAP, é possível converter a representação de uma
linguagem em outro tipo de representação. Dentro das linguagens regulares é possível
converter um AFN para um AFD, um AFD para um AFD mínimo, um AFD para uma
expressão regular, um AFN para uma gramática regular e uma gramática regular para um
AFN. As transformações suportadas para linguagens livres de contexto são a conversão
de um autômato a pilha não deterministico para uma gramática livre de contexto, e três
algoritmos para a conversão de uma gramática livre de contexto para um autômato a pilha
não deterministico. A Figura 1 mostra as possibilidades de conversão para as estruturas
nas linguagens regulares
Figura 1. Modos de conversão para as representações das linguagens
regulares.
Dessa maneira, o JFLAP pode ser organizado em três maneiras de trabalho:
-
-
-
Experimentação das estruturas das linguagens: simular palavras de entrada
em autômatos, construir parse tables e parse trees para gramáticas e desenhar
sucessivas expansões de L-systems. Os autômatos principais são o autômato
finito deterministico (AFD) e não deterministico (AFN), autômatos a pilha(PDA) e
maquinas de Turing multi-tape. Os algoritmos de parsing que ele implementa são
o brute-force parsing, LL(1) parsing e SLR(1)parsing.
Conversão entre estruturas equivalentes: ele tem capacidade de converter
expressões regulares para AFD, AFN para AFD, PDA para gramática, gramática
para PDA, minimização de AFD, gramática livre de contexto para a forma normal
de Chomsky.
Ferramentas de análise: O JFLAP oferece algumas ferramentas para mostrar as
características das estruturas de linguagens, como por exemplo, identificação de
estados não deterministicos, identificação de transições lambda e equivalência
entre dois autômatos finitos.
Como instalar o JFLAP
A ultima versão do JFLAP, a 4.0b10, requer a presença do Java 1.4 ou superior. O melhor
local de download é a página de Java da Sun.
Para a execução do JFLAP é necessária apenas a presença do arquivo JFLAP.jar. Para a
sua execução, as instruções gerais em diversas plataformas:
Mac OS X
Unix/Linux
Windows
Duplo clique no arquivo JFLAP.jar
No diretório com o arquivo JFLAP.jar, execute java -jar JFLAP.jar em
qualquer Shell
Duplo clique no arquivo JFLAP.jar
Se não funcionou,
1) Tenha certeza que instalou o Java 1.4
2) Se por acaso o arquivo salvo tem o nome JFLAP.zip, mude seu nome
para JFLAP.jar.
Modos de Trabalho.
O modo inicial de trabalho do JFLAP pode ser escolhido através do menu de entrada
Figura 2 – Menu principal
A escolha do modo de trabalho abre uma tela especifica para cada tipo de autômato ou
estrutura de linguagem.
Autômatos Finitos
A tela para os autômatos finitos é vista abaixo. As ferramentas abaixo mostram as
possibilidades de trabalho. A opção Input no menu mostra as opções para testar as
palavras reconhecidas pelo autômato. A opção Test compara a equivalência do autômato
finito com outro do mesmo tipo, e indica estados não deterministicos. A opção Convert
permite converter o autômato para AFD, minimizar, converter para gramática, converter
para RE e combinar o autômato com algum outro.
Figura 3- Tela para autômatos finitos
A primeira etapa é escolher a opção de criação de estados do autômato. À medida
que são posicionados, a nomenclatura dos estados é gerada automaticamente.
Figura 4 – Estados posicionados
Usando a ferramenta indicada por uma seta, é possível criar as transições dos
estados, indicando em seguida qual símbolo será reconhecido em cada transição.
Figura 5- Autômato finalizado.
A etapa seguinte consiste em identificar quais são os estados finais e o inicial.
Sem essa definição, o JFLAP indicará a impossibilidade de verificar o funcionamento do
autômato. A identificação é feita com um clique do botão direito do mouse em cima dos
estados desejados.
Figura 6- Definição dos estados inicial e final
Após o desenho do autômato, é possível utilizar as técnicas de verificação. No
menu, a opção Input mostra as maneiras de se testar uma palavra de entrada para o
autômato. Pode se fazer um teste de resposta imediata, para uma única palavra, onde é
mostrado passo a passo a derivação da palavra, para múltiplas palavras, onde é indicado
quais são aceitas e o modo passo a passo. Este último será mostrado a seguir. O primeiro
passo é a escolha da palavra de entrada.
Figura 7- Palavra de entrada
Figura 8- Interface de simulação e teste das palavras.
Durante a simulação e teste, a interface de simulação mostrada na figura 8 é
utilizada. Através dela é possível coordenar passo a passo o tratamento da palavra, onde
os estados correntes são ressaltados com a cor mais escurecida. Numa máquina não
deterministica, as diversas possibilidades de transição geradas pela máquina são
mostradas.
Figura 9- Simulação de um autômato não deterministico
A cada passo, as transições são verificadas até o momento que não sejam
possíveis de ocorrerem. Nesse instante, a transição em especifico é dada como invalida e
as seguintes continuam. Quando a transição chega ao estado final, simulador indica que o
automato reconhece a palavra. A rejeição é mostrada pela cor vermelha e o estado final
de aceitação é mostrado pela cor verde.
Figura 9- Indicação do reconhecimento da palavra
Conversão para expressões regulares.
Um outro ponto importante é a conversão do autômato finito para a respectiva
expressão regular. O processo pode ser feito de maneira automática, com o resultado
mostrado diretamente, ou interativamente, com o objetivo de se mostrar o algoritmo passo
a passo. Resumidamente, a partir do AFD inicial, o JFLAP indica a necessidade de
inclusão de transições lambda extras, para em seguida permitir que o usuário escolha
quais estados devem ser colapsados e substituídos por trechos de expressões regulares
até gerar a expressão regular final.
Figura 10- Conversão de AFD para ER
Figura 11 – Conversão de ER para AFN
No passo contrário, o JFLAP efetua a conversão, de maneira automática ou interativa, da
ER para um AFN. Em seguida este pode ser convertido para um AFD e ser minimizado.
Gramáticas
O modo de criação de uma gramática no JFLAP abrange todas as gramáticas previstas
(regulares, livres de contexto...). A entrada dos dados consiste em colocar as variáveis na
coluna da esquerda e na direita, as variáveis e os terminais.
Figura 12 – Entrada de dados de uma gramática
Figura 12- Parse table usada na gramática para remoção de ambigüidade
Para efetuar a contrução do parser SLR, são selecionados os conjuntos nas colunas First
e Follow, que são utilizados para a modelagem do AFD usado na definição da parse table.
Após isso, é possível efetuar o parsing de uma palavra reconhecida pela gramática, como
pode ser visto na figura 13.
Figura 13- Parsing para verificar se a gramática aceita a palavra de entrada.
A opção do parser para as gramáticas livres de contexto e as irrestritas é o brute force
parser. Na figura 14 é mostrado seu uso para efetuar a verificação de uma palavra da
linguagem anbncn
Figura 14 - Uso do brute parser para a gramática irrestrita
Bibliografia
[1] JFLAP www.jflap.org
Download