一.不确定有穷自动机转换成确定的有穷自动机(NFA转DFA)
1.代码实现
__author__='PythonStriker'
global NFA_StautsMatrix,DFA_StautsMatrix,StartWorld,EndWorld,\
StatusNumber,EnterNumber,EnterWorld,NFA_StatusWorld,DFA_StatusWrold
EnterWorld = [] #输入状态
NFA_StatusWorld = [] #NFA有穷状态集
DFA_StatusWrold = [] #DFA有穷状态集
def main():
EndList = []
global NFA_StautsMatrix, DFA_StautsMatrix, StartWorld, EndWorld, \
StatusNumber, EnterNumber, EnterWorld, NFA_StatusWorld,DFA_StatusWrold
StartWorld = input("输入开始状态:")
EndWorld = input("输入结束状态:")
StatusNumber = int(input("输入状态个数:"))
EnterNumber = int(input("状态机输入个数:"))
print("输入不确定有穷状态机转换表:")
NFA_StautsMatrix = [[] for _ in range(0,StatusNumber + 1)] #NFA状态转换表
for row in range(0,StatusNumber + 1): #存入状态转换表
line = input().split(' ')
for column in range(len(line)):
NFA_StautsMatrix[row].append(line[column])
for enter in NFA_StautsMatrix[0]: #存入输入状态
if enter!='\\' and enter!='&':
EnterWorld.append(enter)
for row in range(1,StatusNumber+1): #NFA有穷状态集
NFA_StatusWorld.append(NFA_StautsMatrix[row][0])
DFA_Start = Empty_Closure(StartWorld) #DFA开始状态
for status in DFA_StatusWrold:
for enter in EnterWorld:
Empty_Closure(Enter_Closure(status,enter))
DFA_StautsMatrix = [[] for _ in range(0, len(DFA_StatusWrold) + 1)]
for row in range(0, len(DFA_StatusWrold) + 1):
if row == 0:
line = "\ a b c"
line = line.split(' ')
for column in range(len(line)):
DFA_StautsMatrix[row].append(line[column])
else: