DFA-lib
A JavaScript library for working with DFAs and NFAs. Used in 2015 for tools for an introductory computer science class (CS103) at Stanford.
Features
-
Parsing.
-
Various manipulations: converting NFAs to DFAs, finding minimal DFAs, taking intersections, Kleene stars, etc.
-
Equivalence counterexamples: given two automata, find strings accepted by one and not the other, if they are not equivalent.
Example
var oddb = new DFA(
['a', 'b'],
{
0: {'a': '0', 'b': '1'},
1: {'a': '0', 'b': '0'},
},
'0',
['1']
);
var evena = new DFA(
['a', 'b'],
{
0: {'a': '1', 'b': '0'},
1: {'a': '2', 'b': '1'},
2: {'a': '3', 'b': '2'},
3: {'a': '2', 'b': '3'},
},
'0',
['2']
);
console.log(oddb.intersect(evena).find_passing());
var zoz = new NFA(
['0', '1'],
{
0: {0: ['0', '1'], 1: ['0']},
1: {'': ['0'], 1: ['2']},
2: {0: ['3']},
3: {0: ['3'], 1: ['3']},
},
['0'],
['3']
);
console.log(JSON.stringify(JSON.parse(zoz.minimized().serialized()), null, ' '));
License
Licensed under the MIT license. If you're making public or commercial use of this library, I encourage (but do not require) you to tell me about it!