Преобразование дерева в NFA в прологе - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь создать следующие определения в прологе для реализации преобразования дерева выражений в NFA в прологе:

regular_expression_to_nfa(RegularExpression, NFA)
epsilon_closure(State, NFA, Closure)
accepting(NFA, State)

Для принятого определения у меня есть

accepting(NFA, State) :-
   final(State).

Также должны соблюдаться следующие ограничения, nfa имеет форму:

nfa(start(State),Y,transitions(Transitions))

, а переходы - это список, так что вы можете делать следующее:

member(next(State, NextState, H), Transitions)
member(next(State, NextState, epsilon), Transitions)

и закрытие из epsilon closure создает список, который поддерживает следующую функцию:

member(NextState, Closure)

Основная цель - создать определения для выражения в NFA, чтобы мы могли преобразовать выражения в NFA, который работает сдругие определения.Выражения будут иметь форму «буква конкат буква звезда», которая будет эквивалентна «(.L (| e (+ L)))».Exp to nfa должен уметь работать со следующими операторами: concat, star или, plus и необязательными, которые представляют типичные операции для NFA.Любая помощь будет принята с благодарностью:

...