Кто-нибудь знает о какой-либо хорошей реализации NFA и DFA на С#, возможно, реализующей также преобразования между ними? Я хотел бы иметь возможность построить NFA, а затем автоматически преобразовать его в DFA, но без необходимости писать собственный код, который занял бы очень много времени. Существует этот код Python, который, возможно, я мог бы использовать и интегрировать с C# с помощью IronPython, но Python работает медленно.
Реализация NFA/DFA на C#
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
Я хотел бы использовать ваш код, но в нем нет лицензии. Если вы не против, чтобы люди его использовали, стали бы вы распространять версию с явной лицензией?
- person Ethan Reesor; 04.08.2015
@FireLizzard, вы можете использовать его так, как хотите. В своем блоге я разместил значок Creative Commons прямо под своим профилем G+. :) Не стесняйтесь использовать код.
- person Leniel Maccaferri; 04.08.2015