Реализация NFA/DFA на C#

Кто-нибудь знает о какой-либо хорошей реализации NFA и DFA на С#, возможно, реализующей также преобразования между ними? Я хотел бы иметь возможность построить NFA, а затем автоматически преобразовать его в DFA, но без необходимости писать собственный код, который занял бы очень много времени. Существует этот код Python, который, возможно, я мог бы использовать и интегрировать с C# с помощью IronPython, но Python работает медленно.


person Miguel    schedule 23.10.2010    source источник
comment
Глядя на код Python, его должно быть относительно легко преобразовать в C#. Вы думали сделать это?   -  person Jeff Mercado    schedule 24.10.2010
comment
Вопрос в том, что я ничего не понимаю в Python...   -  person Miguel    schedule 24.10.2010
comment
Медленность относительно... в любом случае, алгоритм NFA->DFA довольно тривиален (с некоторыми общими оговорками в целом) и является темой многих курсов Junior CS Automata-Theory - мне пришлось это сделать :) Там много хорошего ссылки на преобразование NFA в DFA в Google. Посмотрите на те, которые относятся к курсам в частности. Это должно быть меньше дня кодирования; возможно, всего несколько часов или двух и, вероятно, менее болезненно, чем попытки играть в классики на разных языках.   -  person    schedule 24.10.2010
comment
Алгоритм преобразования NFA в DFA является экспоненциальным по количеству состояний NFA в худшем случае, поэтому... медленное не будет явлением из-за Python.   -  person Patrick87    schedule 17.08.2011
comment
Вы также можете взглянуть на проект Fare. stackoverflow.com/questions/5841454/convert-nfa- to-dfa/   -  person Nikos Baxevanis    schedule 23.11.2011


Ответы (1)


Взгляните на мою серию постов на эту тему:

Подсистема регулярных выражений в C# (история)

Подсистема регулярных выражений на C# — анализатор регулярных выражений

Подсистема регулярных выражений в C# — NFA

Подсистема регулярных выражений в C# — DFA

Подсистема регулярных выражений на C# — сопоставление строк

person Leniel Maccaferri    schedule 23.10.2010
comment
Я хотел бы использовать ваш код, но в нем нет лицензии. Если вы не против, чтобы люди его использовали, стали бы вы распространять версию с явной лицензией? - person Ethan Reesor; 04.08.2015
comment
@FireLizzard, вы можете использовать его так, как хотите. В своем блоге я разместил значок Creative Commons прямо под своим профилем G+. :) Не стесняйтесь использовать код. - person Leniel Maccaferri; 04.08.2015