Вот что я до сих пор делаю, так что в DFA у вас есть состояния и у вас есть переходы между этими состояниями, чтобы перейти от state A
к state B
, вы потребляете symbol ex: 'a'
. Теперь я пытаюсь написать DFA transition function
, который принимает current state (int) and a transition symbol (char) and returns the next state (int)
. Теперь, чтобы сделать это, у вас должен быть доступ к таблице переходов, теперь, как лучше всего представить эту таблицу переходов. Вот что я получил до сих пор:
Dictionary<int, Dictionary<char, int>> transitionMap = new Dictionary<int, Dictionary<char, int>>();
это моя карта переходов, это словарь, в котором первые int key is current state
и nested dictionary consists of symbol consumed and the other int is the next state that I have to return
. Проблема, с которой я сталкиваюсь, заключается в том, что словарь не может иметь повторяющиеся ключи (в данном случае состояние), а DFA могут иметь несколько переходов для одного и того же состояния. Например, если я попытаюсь сделать это:
Dictionary<char, int> dict = new Dictionary<char, int>();
dict.Add('a', 1); // 'a' here is the symbol consumed to go to state 1 from state 0
transitionMap.Add(0, dict); // 0 is the current state
Теперь, когда я добавляю это, это работает, но когда я пытаюсь добавить еще один переход для состояния 0, это не так, потому что в словарях не может быть дубликатов ключей. Так что же здесь делать?