Update Automaton.kt

parent 66f5359f
Pipeline #151659969 failed with stages
in 1 minute and 44 seconds
......@@ -456,10 +456,37 @@ sealed class FiniteAutomaton<AutomatonType : FiniteAutomaton<AutomatonType>>(
* НКА, принимающий реверсию всех слов языка текущего НКА
* Ограничение: единственное начальное состояние [Морозова Дарья А-13-17]
*/
override fun reversed(): NFA {
TODO("Not yet implemented")
override fun reversed(): NFA {
// Во-первых, необходимо перевернуть все ребра в таблице переходов (смежности)
val reversedTransitions = mutableListOf<MutableMap<Char, MutableSet<Int>>>()
for (i in 0 until stateCount) {
val reversedMap = mutableMapOf<Char, MutableSet<Int>>()
for (letter in alphabet)
reversedMap[letter] = mutableSetOf()
reversedTransitions.add(reversedMap)
}
transitionsTable.forEachIndexed {
i, transition -> transition.forEach {
(letter, state) -> for (j in state) reversedTransitions[j][letter]!!.add(i)
}
}
// Во-вторых, принимающее состояние для LR (обратного) автомата
// является начальным состоянием для основного автомата
val reversedTerminalStates = setOf(startIndex)
// В-третьих, необходимо создать новое начальное состояние для нового автомата
// с эпсилон-переходами, чтобы достичь принимающих состояний для главного автомата
val lambdaTransitions = mutableMapOf(LAMBDA to terminalStates.toMutableSet())
reversedTransitions.add(lambdaTransitions)
val reversedStartIndex = reversedTransitions.lastIndex
return NFA(stateCount+1, alphabet, reversedTransitions, reversedStartIndex, reversedTerminalStates);
}
/**
* Задача:
* звезда Клини
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment