Изменения

Перейти к: навигация, поиск

Автоматы в современном мире

132 байта добавлено, 11:51, 11 марта 2018
Нет описания правки
};
Каждый '''<tex>\mathrm{state''' }</tex> представляет один из фрагментов НКА, зависящий от символа c.Данная реализация будет поддерживать постфиксную нотацию регулярного выражения. Допустим у нас есть функция <tex>\mathrm{re2post}</tex>, которая переписывает инфиксную форму регулярного выражения "a(bb)+a" в эквивалентную постфиксную вида "abb.+.a." (. используется в качестве разделителя). По мере сканирования постфиксного выражения, будем поддерживать стек вычисленных НКА фрагментов. Символы добавляют новый НКА фрагмент в стек, а операторы вынимают фрагменты и добавляют новые. Каждый фрагмент определяется стартовым состояние и исходящей стрелкой:
'''struct''' frag
{
'''ptrList''' *out;
};
'''<tex>\mathrm{start''' }</tex> указывает на стартовое состояние фрагмента, а '''<tex>\mathrm{out''' }</tex> - лист указателей на '''<tex>\mathrm{state*''' }</tex> указатели, которые ещё не соединены.
Некоторые полезные функции для управления списком указателей:
'''ptrList''' *list1('''state''' **outp);
'''ptrList''' *append('''ptrList''' *l1, '''ptrList''' *l2);
'''void''' patch('''ptrList''' *l, '''state''' *s);
'''<tex>\mathrm{list1''' }</tex> создает новый список указателей состоящий из одного указателя '''<tex>\mathrm{outp'''}</tex>. '''<tex>\mathrm{append''' }</tex> конкатенирует два списка указателей, возвращая результат. '''<tex>\mathrm{patch''' }</tex> связывает повисшую стрелку в списке '''l''' с состоянием '''s'''.
Используя данные примитивы и стек фрагментов можно реализовать построение НКА.
'''state*''' post2nfa('''char''' *postfix)
442
правки

Навигация