Создать Python словарь из текстового файла для детерминированных c конечных автоматов - PullRequest
1 голос
/ 28 января 2020

Я хочу создать программу на python, которая делает то, что показывает автомат. Автомат работает, как показано.

enter image description here

Я хочу, чтобы программа работала для каждого автомата, который я хочу. Итак, у меня есть dfa.txt, который описывает данный автомат.

dfa.txt

3       //Number of states of the DFA
0 1     //Accepted characters
0       //initial state
0 1     //final state
0 1 1   //If the automaton is in state q0 and reads 1 it goes to state q1 
0 0 0   //If the automaton is in state q0 and reads 0 it goes to state q0
1 1 2   //If the automaton is in state q1 and reads 1 it goes to state q2
1 0 0   //If the automaton is in state q1 and reads 0 it goes to state q0
2 1 2   //If the automaton is in state q2 and reads 1 it goes to state q2
2 0 2   //If the automaton is in state q2 and reads 0 it goes to state q2

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу превратить его в правильный словарь, который работает как показывает автомат. Я знаю, что могу создать словарь в виде файла dfa.py, но программа должна работать с текстовыми файлами. Как я должен быть преобразован в словарь и заставить его работать в моем коде?

Это то, что я имею до сих пор.

n = 'y'
def readFile(): #function that is intended to create a dictionary from the text file
    dictionary = {}
    with open('dfa.txt', 'r') as dict:
            for line in dict:
                    a,b,c = line.split()    #line split
                    dictionary[a] = int(b)  #matching the first column of the text file with the wanted transisions 
                    dictionary[a] = int(c)  #matching the first column of the text file with the wanted transisions 
            return dictionary
while n != 'n':                 #loop  for multiple checks
    s = input('\n' + 'Enter the string: ')

    def accepts(transitions,initial,accept,accepting,s):    #(transisions from dictionary,initial state, final state, final state, string) 
            state = initial
            for c in s:                                 #checking all the possible transisions for the inputed string from the dictionary
                    state = transitions[state][c]
            if(state in accept or state in accepting):  #if the transisions end in a accepted from the dictionary final state prints True
                    print (True)
            else:
                    print (False)
#accepts(dictionary,0,{4},{5},s)            #Excecution

    n = input('\n' + 'Do you want to enter a new string?(y/n): ')   #Option for new input
...