Регулярное выражение, которое генерирует DFA с мертвыми или лишними состояниями

Я хочу реализовать минимизатор DFA в своем лексере, но не могу создать DFA, который не выглядит так, будто он уже является минимальным DFA для выражения.

Я строю DFA из NFA, построенного с помощью конструкции Томсона из постфиксного регулярного выражения. Это практически то же самое, что описано в книге по драконам. Для создания лексера несколько НФА объединяются с помощью эпсилон-переходов из начального состояния. Именно к этому объединенному НФА применяется алгоритм DFA.

Итак, существует ли какое-нибудь "известное" регулярное выражение, генерирующее DFA, которое станет хорошим испытательным стендом для устранения мертвых состояний и минимизации состояний?

Я, конечно, могу просто создать странный DFA и применить к нему алгоритмы, но это будет не совсем подходящим испытательным стендом, не так ли? Если дело в том, что метод, которым я строю DFA, не склонен к мертвым состояниям, то эта информация будет не менее ценной, поскольку тогда я смогу вообще пропустить реализацию функции устранения состояний.

Edit: Если вам нужны детали реализации для точного ответа, код доступен на github, в частности классы NFA.cs и DFA.cs. Кроме того, я написал серию постов в блоге об алгоритме построения, который я использую, если это поможет.

8
задан Dervall 20 February 2012 в 13:51
поделиться