UNPKG

fauton

Version:

A library to test any finite automaton with arbitrary alphabets

32 lines (31 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertToRegularNfa = void 0; const epsilonClosureOfState_1 = require("./epsilonClosureOfState"); const moveAndEpsilonClosureStateSet_1 = require("./moveAndEpsilonClosureStateSet"); function convertToRegularNfa(automaton) { const { transitions, states, alphabets, epsilon_transitions: epsilonTransitions } = automaton; const epsilonClosureOfStateCache = {}; alphabets.forEach((symbol) => { states.forEach((state) => { if (epsilonTransitions && epsilonTransitions[state]) { const epsilonClosuredStates = !epsilonClosureOfStateCache[state] ? (0, epsilonClosureOfState_1.epsilonClosureOfState)(automaton.epsilon_transitions, state) : epsilonClosureOfStateCache[state]; if (!epsilonClosureOfStateCache[state]) { epsilonClosureOfStateCache[state] = epsilonClosuredStates; } const epsilonClosuredStatesForSymbol = (0, moveAndEpsilonClosureStateSet_1.moveAndEpsilonClosureStateSet)(transitions, epsilonTransitions, Array.from(epsilonClosuredStates), symbol); if (transitions[state]) { transitions[state][symbol] = epsilonClosuredStatesForSymbol; } else { transitions[state] = { [symbol]: epsilonClosuredStatesForSymbol, }; } } }); }); } exports.convertToRegularNfa = convertToRegularNfa;