Распознавание окончаний в словах: построение и анализ автоматов

возникла проблема с тем, что программа не считывает верные окончания при применении НКА. Нужно было реализовать процедуру/метод работы детерминированного конечного автомата по входной цепочке символов алфавита НКА. (Решить задачу об окончаниях -ое, -ая, -ие). При вводе слово:красная (false), хотя должно быть (true). Не знаете в чем может быть проблема? Программный код:

class DeterministicFiniteAutomaton:
    def __init__(self, alphabet):
        # Инициализируем ДКА с заданным алфавитом
        self.alphabet = alphabet
        self.states = set()  # Множество состояний
        self.init_state = None  # Начальное состояние
        self.end_states = set()  # Множество конечных состояний
        self.transitions = {}  # Словарь для хранения переходов

    def add_state(self, state):
        # Добавляем состояние в множество состояний
        self.states.add(state)

    def set_init_state(self, state):
        # Устанавливаем начальное состояние
        self.init_state = state

    def add_end_state(self, state):
        # Добавляем состояние в множество конечных состояний
        self.end_states.add(state)

    def add_transition(self, from_state, to_state, symbol):
        # Добавляем переход в словарь переходов
        if (from_state, symbol) in self.transitions:
            return False
        self.transitions[(from_state, symbol)] = to_state
        return True

    def run(self, input_str):
        # Запускаем ДКА на входной строке
        current_state = self.init_state

        for char in input_str:
            # Проверяем, существует ли переход для текущего символа и состояния
            if (current_state, char) not in self.transitions:
                return False
            # Переходим в следующее состояние
            current_state = self.transitions[(current_state, char)]

        # Возвращаем True, если текущее состояние является конечным
        return current_state in self.end_states


# Создаем ДКА для задачи об окончаниях -ое, -ая, -ие
dfa = DeterministicFiniteAutomaton(['а', 'б', 'в', 'г', 'д', 'е', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'р', 'т', 'у', 'ы'])
dfa.add_state('q0')
dfa.add_state('q1')
dfa.add_state('q2')
dfa.add_state('q3')

dfa.set_init_state('q0')
dfa.add_end_state('q1')
dfa.add_end_state('q2')
dfa.add_end_state('q3')

# Добавляем переходы
dfa.add_transition('q0', 'q1', 'о')
dfa.add_transition('q1', 'q2', 'е')
dfa.add_transition('q2', 'q3', 'й')
dfa.add_transition('q0', 'q2', 'а')
dfa.add_transition('q2', 'q3', 'я')
dfa.add_transition('q0', 'q2', 'и')
dfa.add_transition('q2', 'q3', 'е')

# Пример использования
input_str = input("Введите строку: ")
result = dfa.run(input_str)
print(f'Строка "{input_str}" соответствует окончаниям -ое, -ая, -ие: {result}')
      

Ответы (0 шт):