Python Finite State Machine Issues (Skipping the Proccessing?)
Question: I'm creating a python program for finite state machine without it being object
oriented. However, my processing phase is off. It doesn't even seem to be
running through the triple for loop I created, I checked by attempting to
print the CurrentState. Any help would be appreciated.

    
    
    import sys
    
    try: 
        Sfile = open("states.txt","r")
    except IOError:
        print "Could not open file", states.txt
        os.kill()
    States = []
    
    ReadLine = Sfile.readline()
    while ReadLine != "":
        SN, SS, AS = ReadLine.split(",")
        States.append((SN, bool(int(SS)), bool(int(AS))))
        ReadLine = Sfile.readline()
    
    print States, "\n"
    Sfile.close()
    
    
    try:
        Tfile = open("transistions.txt","r")
    except IOError:
        print "Could not open file", transitions.txt
        os.kill()
    Transitions = []
    
    
    ReadLine = Tfile.readline()
    while ReadLine != "":
        ReadLine = ReadLine.rstrip()
        CS, IN, NS = ReadLine.split(",")
        Transitions.append((CS, IN, NS))
        ReadLine = Tfile.readline()
    
    print Transitions
    Tfile.close()
    
    try:
        Strfile = open("strings2.txt","r")
    except IOError:
        print "Could not open file", strings2.txt
        os.kill()
    Strings = []
    
    ReadLine = Strfile.readline()
    while ReadLine != "":
        Readline = ReadLine.rstrip()
        Strings.append(Readline)
        ReadLine = Strfile.readline()
    
    print Strings, '\n'
    Strfile.close()
    
    CurrentState = ''
    Start = ''
    RejectState= ''
    AcceptState= ''
    
    for S in Strings:
        if S != '':
                for C in S:
                    for (CS, IN, NS) in Transitions:                
                        if CS == CurrentState and IN == C:
                                CurrentState =NS
                                break
                    for  (SN, SS, AS) in States:
                        if SN == CurrentState and SS ==C:
                            CurrentState = NS
    
    
        if NS == AS:
                NS = AcceptState
                print "String", AcceptState, "is accepted"
                break
        else:
                NS = RejectState
                print "String", RejectState, "is rejected"
                break
    

Here are my different text files: strings2.txt

    
    
    01010
    1001
    010
    

transitions.txt

    
    
    Start,0,State1
    State1,1,State2
    State2,0,State3
    

states.txt

    
    
    State1,1,0
    State2,0,1
    State3,1,0
    


Answer: I copied your code and data, and was able to get this code (slightly modified
from yours) working using python2.7:

    
    
    import sys
    import os
    
    try:
        Sfile = open("states.txt","r")
    except IOError:
        print "Could not open file", "states.txt"
        sys.exit()
    States = []
    
    ReadLine = Sfile.readline()
    while ReadLine != "":
        SN, SS, AS = ReadLine.split(",")
        States.append((SN, bool(int(SS)), bool(int(AS))))
        ReadLine = Sfile.readline()
    
    print "States:\n", States, "\n"
    Sfile.close()
    
    
    try:
        Tfile = open("transitions.txt","r")
    except IOError:
        print "Could not open file", "transitions.txt"
        sys.exit()
    Transitions = []
    
    
    ReadLine = Tfile.readline()
    while ReadLine != "":
        ReadLine = ReadLine.rstrip()
        CS, IN, NS = ReadLine.split(",")
        Transitions.append((CS, IN, NS))
        ReadLine = Tfile.readline()
    
    print "Transitions:\n", Transitions, "\n"
    Tfile.close()
    
    try:
        Strfile = open("strings2.txt","r")
    except IOError:
        print "Could not open file", strings2.txt
        sys.exit()
    Strings = []
    
    ReadLine = Strfile.readline()
    while ReadLine != "":
        Readline = ReadLine.rstrip()
        Strings.append(Readline)
        ReadLine = Strfile.readline()
    
    print "Strings:\n", '\n'.join(Strings), '\n'
    Strfile.close()
    
    CurrentState = ''
    Start = ''
    RejectState= ''
    AcceptState= ''
    
    for S in Strings:
        if S != '':
                print "String:", S
                for C in S:
                    print "Char:", C
                    for (CS, IN, NS) in Transitions:
                        if CS == CurrentState and IN == C:
                                CurrentState =NS
                                break
                    for  (SN, SS, AS) in States:
                        if SN == CurrentState and SS ==C:
                            CurrentState = NS
    
    
        if NS == AS:
                NS = AcceptState
                print "String", AcceptState, "is accepted"
        else:
                NS = RejectState
                print "String", RejectState, "is rejected"
    

Here is the output I got:

    
    
    $ python2.7 test.py
    States:
    [('State1', True, False), ('State2', False, True), ('State3', True, False)]
    
    Transitions:
    [('Start', '0', 'State1'), ('State1', '1', 'State2'), ('State2', '0', 'State3')]
    
    Strings:
    01010
    1001
    010
    
    String: 01010
    Char: 0
    Char: 1
    Char: 0
    Char: 1
    Char: 0
    String  is rejected
    String: 1001
    Char: 1
    Char: 0
    Char: 0
    Char: 1
    String  is rejected
    String: 010
    Char: 0
    Char: 1
    Char: 0
    String  is rejected
    

