vregex
RegEx engine based on ASTs and Automata
Details
My initial plan was to closely follow what we do with Thompson's construction. Get a RegEx, convert it to a ∈-NFA, convert it into a DFA using subset construction, and then finally minimise the DFA.
After starting the implementation, I had to add another step. I had to parse the RegEx into an AST. That also made me realise that implementations of RegEx aren't consistent. Different libraries have slight differences in their syntax. I made a decision here to not follow another implementation or a standard closely here. This gave me the freedom to focus on what I really wanted to understand from this project — graphs and automata.
There was also the fact that DFAs converted from NFAs grow exponentially in the number of nodes. Instead, having a set of possible states at every step traded off a higher time complexity for much better space complexity. And so I decided to use the constructed NFA as is, in the end.