Exemplo de Java2D - Simulador de Autômatos

30 respostas
D

Olá pessoal.

Essa semana estava sem internet em minha casa e para passar o tempo fui programar alguma coisa :wink:
Tive uma disciplina do mestrado (no início do ano passado) que tratava da linguagens formais. Já tinha visto um simulador bem completo, mas decidi fazer o meu, só para passar o tempo :smiley:

Enfim, deem uma olhada, estou disponibilizando os fontes (projeto do NetBeans) e o .jar

Este simulador só trata autômatos finitos determinísticos. Se for adicionada alguma transição que o torne indeterminístico ele simplesmente não vai reconhecer a string fornecida. Tem várias coisas que não tratei na interface, como algumas confirmações e tal, mas está usável.

Pode ser útil para quem estiver estudando isso na faculdade e para quem quiser aprender algo sobre Java2D :wink:

Já aviso que o código não está lá aquelas coisas hehehe
CHEIO DE GAMBIARRAS :slight_smile: :slight_smile: :slight_smile:

[]´s

30 Respostas

R

É cara, ficou simples mas legalzinho.
Aliás, é parecido com o TCC que estou planejando fazer pra esse ano.
Pro TCC pretendo deixar o usuário desenhar um grafo qualquer e escolher um algoritmo para executar sobre o grafo.
Pra isso pretendo usar a JGraph (www.jgraph.com) em conjunto com as classes Drag and Drop do java…só por curiosidade, vc já mexeu com JGraph?

T

Cara, esse grafo ta muito bonitinho!!!
Assim que eu puder posto meu simulador aqui, que fiz pruma iniciação científica.
É bem simples, são alguns algoritmos de contenção de falhas em cascata sobre redes complexas (tema do meu TCC e futuro mestrado pré encaminhado =P).
Tive que fazer de última hora e ficou faltando muita coisa na interface, as configurações tem que ser mudadas direto no código (sério, tive uma madrugada pra implementar tudo, foi f* e o prazo curto não foi culpa minha, não dessa vez uhahuahuahuauhauha).
É bem simples, em apenas 2 dimensões representada em uma matriz dinâmica. O próximo será com grafos bem mais complexos com algoritmos mais elaborados de contenção e espalhamento de falhas.
Pra ter uma noção, a visualização do espalhamento das falhas lembra aquelas imagens de colônias de bactérias se proliferando (inclusive várias pessoas que o viram rodando perguntaram: que legal!! é um câncer? >_>).

D

rod.attack:
É cara, ficou simples mas legalzinho.
Aliás, é parecido com o TCC que estou planejando fazer pra esse ano.
Pro TCC pretendo deixar o usuário desenhar um grafo qualquer e escolher um algoritmo para executar sobre o grafo.
Pra isso pretendo usar a JGraph (www.jgraph.com) em conjunto com as classes Drag and Drop do java…só por curiosidade, vc já mexeu com JGraph?

Eu ia utilizar a API JGraph em um projeto, mas acabei não precisando usar.
Realmente está bem simples e com vários bugs, mas o propósito era só como passa tempo mesmo.

R

Tenho uma pergunta que pode parecer meio boba (de fato é bem simples mesmo):

É sobre as bordas dos panels que vc utilizou…analisando o código, vi que o setBorder de cada panel está dentro do initComponents que é criado pelo netbeans…
Como vc fez pra adicionar as bordas aos panels graficamente no netbeans?

R

Putz, acabei de achar a opção no properties do objeto. Valeu :).

F

Parabens pelo programa…
Vo dar uma estudada nele…

R

Fiz LFA (Linguagens Formais e Autômatos) no semestre passado.
Ficou bem legal seu programa!

Obrigado por compartilhar.

M

What’s Linguagem Formal de Autômatos?? :lol: !!
Sorry about my lack of acknowledgement!!
Looking for it!!

D

mrsmylle:
What’s Linguagem Formal de Autômatos?? :lol: !!
Sorry about my lack of acknowledgement!!
Looking for it!!

Primeiramente, vamos usar o português? Afinal, somos brasileiros concorda?

Basicamente, na computação a área das linguagens formais trata de dispositivos matemáticos que têm poder computacional, ou seja, conseguem representar linguagens, reconhecendo sentenças (strings). Como exemplos de dispositivos estudados por essa área, podem-se citar os autômatos finitos, expressões regulares e gramáticas regulares (que tem poder para representar as linguagens regulares), os autômatos à pilha e gramáticas livres de contexto (que conseguem representar as linguagens livres de contexto), máquinas de turing (representam as linguagens recursivas e as linguagens recursivamente enumeráveis), etc.

Os autômatos também são conhecidos como máquinas de estado. Você já deve ter ouvido falar nelas.

Existem inúmeras aplicações para esses dispositivos, sendo que a mais utilizada talvez seja seu emprego nos analizadores léxicos das linguagens.

Mais informações você pode encontrar no livro “Introdução à Teoria dos Autômatos, Linguagens e Computação” do Hopcroft (http://www.submarino.com.br/produto/1/182106/introducao+a+teoria+de+automatos,+linguagens+e+computacao)

[] s

M

:roll: !!
Desculpa, assunto até então desconhecido pra mim!!
Vou dar uma boa olhada sobre isso!!

J

Olá, agora eu vi q cada bolinha é um Jpanel vi o codigo tb do drag and drop mas teria como voce comentar
essa parte do codigo

private void formMousePressed(java.awt.event.MouseEvent evt) {                                  
    
    estadoSelecionado = null;
    JFramePrincipal f = ( JFramePrincipal ) getParent().getParent().getParent().getParent().getParent(); 
    f.selecionaEstado( estadoSelecionado );
    
    repaint();
    
}
D

Oi Jonathan, desculpa a demora para responder.

Isso ai chama gambiarra :smiley:
O certo seria passar uma referência do frame para o painel de desenho, mas como fui fazendo o programa por fazer, teve muita coisa que ficou MUITO feia :slight_smile:

O que eu faço com esse monte de getParent encadeado, é chegar ao JFramePrincipal.

[]´s

G

Maravilha! Estava procurando um algoritmo que tratasse Linguagens formais ! :stuck_out_tongue:

Parabéns e, meu sincero agradecimento!

L

Isso ai é legal. To baixando agora pra dar uma olhada,
Tem como postar uma imagem pra gente que entrar ver uma prévia?

L

davidbuzatto:
Oi Jonathan, desculpa a demora para responder.

Isso ai chama gambiarra :smiley:
O certo seria passar uma referência do frame para o painel de desenho, mas como fui fazendo o programa por fazer, teve muita coisa que ficou MUITO feia :slight_smile:

O que eu faço com esse monte de getParent encadeado, é chegar ao JFramePrincipal.

[]´s

Relaxa. Eu também já fiz muito isso. Não conheço nenhum programador que não tenha utilizado POG alguma vez.
Não teria como pegar esse objeto no construtor, em uma variavel privada?

W

Parabens pelo programa cara, ficou bem bolado :wink:
vou aproveitar e estudar o código

L

Estou com um problema para resolver preciso de ajuda em analizador lexico bem simples

autômato finito determinístico, com a movimentação do ponto, que reconheça os
tokens: números, nomes de variáveis e strings literais. Todos os estados devem ser descritos
através da movimentação do ponto

Alguma dica para um iniciante? hehehe

E

Não deveria estar continuando esta thread, mas de qualquer forma, você já desenhou a máquina de estados?

Se não conseguiu desenhar, é relativamente fácil achar um desenho de uma máquina de estados que reconheça essa gramática que você estipulou.

L

Na verdade estou bem perdido, fui seguindo os conselhos do forum e baixando os simuladores para testar,
estou sem ideia de por onde comecar e oque fazer. Minha primeira vez programando algo deste tipo.

E

Em vez de baixar o simulador para testar, você precisa desenhar a máquina de estados primeiro, e depois é que vai usar o tal do simulador :slight_smile:

L

Estou procurando como criar uma maquina de estado.
Ta ai outra coisa que nunca fiz hehehe

E

A propósito, se seu professor está ensinando as coisas direito e se você comprou (ou pelo menos copiou os PDFs) dos livros do seu curso, deve haver um exemplo de como criar uma máquina de estados para uso em um autômato finito.

Talvez haja até desenhada uma máquina de estados para o reconhecimento desses tokens que ficaram como lição de casa :slight_smile:

L

É materia assistida, não tenho aula, teoricamente ele deveria por material online para eu ler e estudar, porem estou tendo que me virar com a internet, 0 conteudo para ajudar no site da faculdade, apenas os trabalhos para fazer e a data, mesmo a materia eu nunca vi!
Gambiarras da faculdade! Anhembi Morumbi cada vez pior!

Achei alguns modelos na internet acho que consigo montar uma, seria tipo como nesse link?

http://wiki.icmc.usp.br/images/6/60/Aula_3_-_StateMachine-SSC0110_2010.pdf

E

A ideia das máquinas de estado é essa mesma.

Entretanto, para análise léxica, as máquinas de estado são mais especializadas - vou ver se acho um exemplo.


http://www.cs.duke.edu/~raw/cps206/CharactersAndLex.htm

Deve haver coisas em português . O segredo é procurar, no Google:

máquina estados análise léxica

L

Ingles não é um problema leio e escrevo bem
Dificil está entender a logica toda hehehe

C

Ola vc teria um codigo deste de Automatos em que alem de criar o automato o cara pode determinar se é destiguivel ou deterministico fazendo assim sua minimizaçao??? achei muito interessante seu codigo ta de Parabéns

W

Bem interessante o programa. Mais tarde tentarei ver o código.

Parabéns.

L

Boa tarde @davidbuzatto tudo bem?
Primeiramente quero agradecer por disponibilizar este projeto.
Sei que este tópico é antigo, mas o seu exemplo de código fonte é funcional e ainda é utilizado por muitos acadêmicos, e eu sou um deles hehehehe.
Estou desenvolvendo uma ferramenta parecida com a sua, para a disciplina de LFA, porém percebi que o desenho não fica legal quando ocorre a situação em que: O estado A possui uma aresta para B e B possui uma aresta para A.
Neste caso, os símbolos terminais da arestas ficam sobrepostos, criando uma aresta em cima da outra, estou na luta para que, quando ocorra este caso, o autômato desenhe duas arestas, sem sobrepor a existente. Teria como me ajudar nisso?

L

Como faz pra ver o código? Não consigo ver.

L

@LEO_xavier Segue o link https://github.com/davidbuzatto/SimuladorAutomatos

Criado 21 de fevereiro de 2009
Ultima resposta 3 de jun. de 2017
Respostas 30
Participantes 16