https://joeylemon.github.io/nfa-to-dfa/
This tool is used to convert non-deterministic finite automata (NFA) to deterministic finite automata (DFA) through an interactive and visual interface. More specifically, you can:
- Create an NFA interactively or from a saved JSON file
- Export an NFA to a JSON file
- View the description of both the NFA and the DFA, including a full delta transition table
- Convert the NFA to an equivalent DFA in three possible ways:
- Step-by-step: the DFA is constructed in controlled increments
- All at once: completely convert the NFA to the DFA in one leap
- Animated: watch the conversion process take place automatically
Originally created by Alex Klibisz and Connor Minton, COSC 312, Spring 2015, University of Tennessee, Knoxville.
Rewritten and enhanced by Joey Lemon and Camille Williford, COSC 493, Fall 2021, University of Tennessee, Knoxville.
You must have Node.js v12.19.0+ and npm installed to run the application locally. Node versions below v12.19.0 are unable to run the unit tests.
To set up the application locally, first clone this repository:
> git clone https://github.com/joeylemon/nfa-to-dfa.git
Then, install the dependencies:
> cd nfa-to-dfa
> npm install
Then, simply run the start script to create a local webserver:
> npm start
Running this script should give an output similar to below:
> nfa-to-dfa@0.0.2 start ~/Desktop/nfa-to-dfa
> browser-sync start -s -f . --no-notify --host localhost --port 8000
[Browsersync] Access URLs:
--------------------------------------
Local: http://localhost:8000
External: http://192.168.1.127:8000
--------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
--------------------------------------
[Browsersync] Serving files from: ./
[Browsersync] Watching files...
You can now navigate to http://localhost:8000
in the browser to view the application. The website will automatically reload upon changes to the code.
Prior to adding changes to the repository, you should run the linter on the code to ensure there are no syntax errors and to maintain a uniform coding style:
> npm run lint
To automatically lint files before committing them, you should add a pre-commit hook. Copy the pre-commit.sample
file to .git/hooks/pre-commit
:
> cp pre-commit.sample .git/hooks/pre-commit
Now, git will automatically lint all changed files before committing them to the repository.
You should also test your changes before committing them to the repository:
> npm test
This will run all unit tests in the src/js/test
directory and report any errors.