1.3 KiB
rextra
At the moment, rextra can display DFAs and NFAs using Graphviz, convert between NFAs and DFAs, and minimize DFAs.
The representation of DFAs and NFAs assumes an infinite alphabet:
-
DFA states always contain a default transition (marked with
*in the visualisations), which is taken if the current token doesn't appear in any of the other transitions. -
NFA transitions either apply to a set of tokens, or to all tokens except a specified set. In the visualisation, the character
Σdenotes the alphabet of tokens.
Example
This example minimizes the DFA shown on the wikipedia article about DFA minimization.
Transitions for the token 1 are specified explicitly (where
necessary), while transitions for the token 0 are represented by the
default transition marked with *.
This ghci session shows the minimization of the DFA mentioned above.
>>> Just a = dfa [ ("a",[('1',"c")],"b"), ("b",[('1',"d")],"a"), ("c",[('1',"f")],"e"), ("d",[('1',"f")],"e"), ("e",[('1',"f")],"e"), ("f",[],"f") ] "a" ["c","d","e"]
>>> saveDotAsPng "dfa.png" $ dfaToDot a
>>> saveDotAsPng "dfa_minimized.png" $ dfaToDot $ minimizeDfa a

