Я пытался нарисовать этот недетерминированный конечный автомат:
NFA с количеством состояний не более 3 для языка {ab, abc}*, и я пришел к решению на картинке ниже:
Проблема, похоже, заключается в логике кода, поскольку мой код всегда печатает отклонено. Буду признателен, если кто-нибудь подскажет, как кодировать этот алгоритм.
print("Insert below the string: ")
string = str(input())
def state_q0(string):
if len(string) == 0:
print("string not accepted")
else:
if string[0] == "a":
state_q1(string[1:])
elif string[0] == "b":
print("rejected")
def state_q1(string):
if len(string) == 0:
print("string not accepted")
else:
if string[1] == "b":
state_q2(string[2:])
else:
print("rejected")
def state_q2(string):
if len(string) == 0:
print("string not accepted")
else:
if string[2] == "c":
print("accepted -> q0")
elif string[2] == "b":
print("rejected")
state_q0(string)