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