Изменения

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

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

122 байта добавлено, 12:44, 14 марта 2018
Построение НКА
stackp = stack;
'''for''' (p = postfix; *p; p++)
'''switch'''(*p) '''defaul'''t: <span style="color:#008000">// символ</span> s = state(*p, NULL, NULL) push(frag(s, list1(&s->out)) '''break''' '''case''' '.': <span style="color:#008000">// конкатенация</span> e2 = pop() e1 = pop() patch(e1.out, e2.start) push(frag(e1.start, e2.out)) '''break''' '''case''' '|': <span style="color:#008000">// альтернатива</span> e2 = pop() e1 = pop() s = state(Split, e1.start, e2.start) push(frag(s, append(e1.out, e2.out))) '''break''' '''case''' '?': <span style="color:#008000">// ноль или один</span> e = pop() s = state(Split, e.start, NULL) push(frag(s, append(e.out, list1(&s->out1)))) '''break''' '''case''' '*': <span style="color:#008000">// ноль или больше</span> e = pop() s = state(Split, e.start, NULL) patch(e.out, s) push(frag(s, list1(&s->out1))) '''break''' '''case''' '+': <span style="color:#008000">// один или больше</span> e = pop() s = state(Split, e.start, NULL) patch(e.out, s) push(frag(e.start, list1(&s->out1))) '''break'''
e = pop()
patch(e.out, matchState)
Анонимный участник

Навигация