El proyecto Simple-Automaton-Simulator es una implementación de un simulador de autómatas finitos deterministas (DFA) y no deterministas (NFA). La arquitectura del proyecto sigue el patrón de diseño Modelo-Vista-Controlador (MVC) para una mejor organización y mantenimiento del código.
Para una comprensión más detallada de su funcionamiento, consulte el SAS-Reference.pdf .
- AbstractAutomata.java: Clase abstracta que define las estructuras y métodos básicos para manejar los estados y transiciones de un autómata.
 - AutomataDeterminista.java: Implementación específica para autómatas deterministas.
 - AutomataNoDeterminista.java: Implementación específica para autómatas no deterministas.
 - Transaction.java: Clase que representa una transición entre estados.
 
- ControlPane.java: Panel de control que incluye un campo de texto para entrada y botones para manipular la visualización del autómata.
 
- ControladorTextInput.java: Gestiona la entrada de texto y su visualización durante el modo "paso a paso".
 - ControladorAutomata.java: Controlador principal que maneja las acciones y la lógica del autómata.
 
Se incluyen varios ejemplos para ilustrar el funcionamiento del simulador tanto en modo directo como en modo paso a paso:
- Ejemplo 1
 - Ejemplo 2
 - Ejemplo 3
 - Ejemplo 4
 - EjemploPropuesto1
 - EjemploPropuesto2
 - EjemploPropuesto3 (contador)
 - EjemploPropuesto4 (regexp HTML)
 
Los autómatas se pueden importar desde archivos .txt ubicados en la carpeta dataset.
- Modo directo: Muestra la solución del autómata inmediatamente.
 - Modo paso a paso: Muestra la transición entre estados de forma interactiva.
 
- Uso de botones en el 
ControlPanepara manipular la vista del autómata. - Flechas del teclado para navegar en el modo paso a paso.
 
Este proyecto utiliza la librería GraphStream para la representación gráfica de los autómatas. Asegúrese de tenerla instalada y configurada correctamente.
- Visualización de Transiciones: Las transiciones y los iconos pueden no mostrarse correctamente en algunos casos debido a limitaciones de la librería GraphStream. Usar el botón de zoomOut como solución temporal.
 - ControladorTextInput: Puede presentar errores al intentar retroceder, pero el resto de las funciones operan correctamente.
 
- La programación de los algoritmos gráficos requirió un esfuerzo significativo, no tanto por su complejidad, sino por la falta de experiencia previa.
 - La documentación del código está mayormente en inglés, pero algunos comentarios pueden estar en español.
 
- Modelo: Clases encargadas de la lógica de los autómatas.
 - Vista: Componentes visuales para la interacción con el usuario.
 - Controlador: Gestión de la lógica y coordinación entre el modelo y la vista.
 

