Вот что я go до сих пор, так что в DFA у вас есть состояния, и у вас есть переходы между этими состояниями, к go от 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
. Проблема, с которой я сталкиваюсь, заключается в том, что в словаре не может быть повторяющихся ключей (в этом case state), и 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, этого не происходит, потому что словари не могут иметь дубликаты ключей, так что тут делать?