fauton
Version:
A library to test any finite automaton with arbitrary alphabets
35 lines (34 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateEquivalenceStates = void 0;
const generateStateGroupsRecord_1 = require("./generateStateGroupsRecord");
function generateEquivalenceStates(automaton, stateGroups) {
const stateGroupsRecord = (0, generateStateGroupsRecord_1.generateStateGroupsRecord)(automaton.states, stateGroups);
const stateGroupsSymbolsRecord = {};
const singleStateGroups = [];
const compositeStateGroups = [];
stateGroups.forEach((stateGroup) => {
if (stateGroup.length > 1) {
compositeStateGroups.push(stateGroup);
}
else {
singleStateGroups.push(stateGroup);
}
});
compositeStateGroups.forEach((compositeStateGroup) => {
compositeStateGroup.forEach((state) => {
let stateGroup = '';
automaton.alphabets.forEach((symbol) => {
stateGroup += stateGroupsRecord[automaton.transitions[state][symbol].toString()];
});
if (!stateGroupsSymbolsRecord[stateGroup]) {
stateGroupsSymbolsRecord[stateGroup] = [state];
}
else {
stateGroupsSymbolsRecord[stateGroup].push(state);
}
});
});
return Object.values(stateGroupsSymbolsRecord).concat(singleStateGroups);
}
exports.generateEquivalenceStates = generateEquivalenceStates;