/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 'use strict'; /** * A generic FA State class (base for NFA and DFA). * * Maintains the transition map, and the flag whether * the state is accepting. */ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var State = function () { function State() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$accepting = _ref.accepting, accepting = _ref$accepting === undefined ? false : _ref$accepting; _classCallCheck(this, State); /** * Outgoing transitions to other states. */ this._transitions = new Map(); /** * Whether the state is accepting. */ this.accepting = accepting; } /** * Returns transitions for this state. */ _createClass(State, [{ key: 'getTransitions', value: function getTransitions() { return this._transitions; } /** * Creates a transition on symbol. */ }, { key: 'addTransition', value: function addTransition(symbol, toState) { this.getTransitionsOnSymbol(symbol).add(toState); return this; } /** * Returns transitions set on symbol. */ }, { key: 'getTransitionsOnSymbol', value: function getTransitionsOnSymbol(symbol) { var transitions = this._transitions.get(symbol); if (!transitions) { transitions = new Set(); this._transitions.set(symbol, transitions); } return transitions; } }]); return State; }(); module.exports = State;