Exemplo de Java2D - Simulador de Autômatos

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

É 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?

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? >_>).

[quote=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?[/quote]

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.

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?

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

Parabens pelo programa…
Vo dar uma estudada nele…

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

Obrigado por compartilhar.

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

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

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

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

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

[code]
private void formMousePressed(java.awt.event.MouseEvent evt) {

estadoSelecionado = null;
JFramePrincipal f = ( JFramePrincipal ) getParent().getParent().getParent().getParent().getParent(); 
f.selecionaEstado( estadoSelecionado );

repaint();

}[/code]

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

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

Parabéns e, meu sincero agradecimento!

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

[quote=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[/quote]

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?

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

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

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.

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.