from logging import ERROR
import sys
import csv

from numpy import append

if len(sys.argv) == 1:
    print("Default arguments parsed\n")
    sys.argv.append("fsa_description.arg")
    sys.argv.append("test.in")
    sys.argv.append("test.exp")

with open(sys.argv[1], "r", newline="", encoding="utf8") as csvfile:
    filereader = csv.reader(csvfile, delimiter="\t", quotechar="|")
    fsa_description = list(filereader)
    accepting_state = int(fsa_description[-1][0])
    fsa_description = fsa_description[:-1]
    fsa_description_map = {}
    for item in fsa_description:
        tuple = (int(item[0]), item[2])
        fsa_description_map[tuple] = int(item[1])


with open(sys.argv[2], "r", newline="", encoding="utf8") as csvfile:
    filereader = csv.reader(csvfile, delimiter="\t", quotechar="|")
    test_in = list(filereader)

with open(sys.argv[3], "r", newline="", encoding="utf8") as csvfile:
    filereader = csv.reader(csvfile, delimiter="\t", quotechar="|")
    test_out = list(filereader)


for i, word in enumerate(test_in):
    current_state = 0
    if len(word) != 0:
        for letter in word[0]:
            current_state = fsa_description_map[(current_state, letter)]

    print(str(i + 1) + "\t", end="")
    if current_state == accepting_state:
        print("YES\t", end="")
        if "YES" != test_out[i][0]:
            print(" ERROR", end="")
    else:
        print("NO", end="")
        if "NO" != test_out[i][0]:
            print(" ERROR", end="")
    print()