fauton
Version:
A library to test any finite automaton with arbitrary alphabets
25 lines (24 loc) • 1.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.moveAndEpsilonClosureStateSet = void 0;
const epsilonClosureOfState_1 = require("./epsilonClosureOfState");
function moveAndEpsilonClosureStateSet(transitions, epsilonTransitions, states, symbol) {
const transitionRecordExtractedStates = new Set();
states.forEach((state) => {
const statesForSymbol = transitions[state]?.[symbol];
if (statesForSymbol) {
statesForSymbol.forEach((stateForSymbol) => transitionRecordExtractedStates.add(stateForSymbol));
}
});
const finalStates = new Set(transitionRecordExtractedStates);
if (epsilonTransitions) {
transitionRecordExtractedStates.forEach((transitionRecordExtractedState) => {
const epsilonClosuredStates = (0, epsilonClosureOfState_1.epsilonClosureOfState)(epsilonTransitions, transitionRecordExtractedState);
epsilonClosuredStates.forEach((epsilonClosuredState) => {
finalStates.add(epsilonClosuredState);
});
});
}
return Array.from(finalStates);
}
exports.moveAndEpsilonClosureStateSet = moveAndEpsilonClosureStateSet;