UNPKG

fauton

Version:

A library to test any finite automaton with arbitrary alphabets

35 lines (34 loc) 1.45 kB
"use strict"; 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;