GoDFA es un programa escrito en go para convertir un automata finito no determinista(NFA) a un automata finito determinista(DFA) equivalente.
El programa recibe un archivo de texto plano con la descripcion del NFA, la sintaxis del archivo es la siguiente.
- Todas las lineas en blanco y lineas que comiencen con el simbolo '#' seran ignoradas.
- La primera linea debera contener los estados del automata separados por ','.
- La segunda linea debera contener los simbolos en el alfabeto del automata separados por ','.
- La tercera linea debera de contener el estado inicia del automata y este debera de ser alguno de los estados contenidos en la primera linea.
- La cuarta linea debera de contener los estados finales del automata separados por ','. Todos estos estados deben de aparecer tambien en la primera linea del archivo.
- Para las lineas siguientes cada una de estas representara una fila de la tabla de transiciónes del automata y tendran el siguiente formato.
- El estado del automata seguido de una coma. seguido de una lista separada por ',' indicando a donde va la transición con cada uno de los simbolos del alfabeto en elorden en el que se encuentran en la segunda linea.
- Si la transición de un estado con un simbolo va a mas de un estado estos deben de estar separados por espacios en blanco.
- Si la transición de un estado con un simbolo es vacia esta se puede indicar con el simbolo '_' o simplemente con espacios en blanco.
El programa fue escrito usando la version 13.3 de Go, para compilar el programa se requiere un compilador de este lenguaje compatible con esta version y ejecutar el siguiente comando dentro de la raiz del proyecto, esto producira un ejecutable llamado godfa.
$go buildPara ejecutar el programa se requiere indicar el archivo de entrada y salida para el programa usando los atributos -i y -o, por ejemplo.
$godfa -i example.nfa -o salida.dfaLa salida del programa sera un archivo de texto plano con la descripcion del DFA equivalente al NFA de entrada siguiendo la misma sintaxis que el archivo de entrada.
El proyecto esta separado en diferentes archivos y cada uno tiene la siguiente funcion.
bitset.gocontiene la implementacion de la estrutura de datos bitset.dfa.gocontiene la descripcion de la estrutura dfa , el codigo para convertir el nfa de entrada y el codigo para generar la salida del programa.example.nfaes un ejemplo de archivo de entrada para el programa.hashsetcontiene la implementacion de la estructura hashset.main.gocontiene funcion main del programa y lo necesario para leer los atributos de la ejecucion del programanfa.gocontiene la implementacion de la estructura nfa, el codigo para leer el archivo de entrada y crear una representacion del nfa.