Я пытаюсь создать следующие определения в прологе для реализации преобразования дерева выражений в 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.Любая помощь будет принята с благодарностью: