Exemplo n.º 1
0
        /// <summary>
        /// Emits directed actions conditioned by indexing strings.
        /// </summary>
        /// <param name="actions">Actions to emit.</param>
        internal void Emit_ActionSwitch(Dictionary<string, AutomatonBuilderDirector> actions, AutomatonBuilderDirector defaultConditionAction = null)
        {
            AutomatonState currentState;
            AutomatonState targetState;
            prepareNewState(out currentState, out targetState);

            AutomatonState defaultConditionState = null;
            if (defaultConditionAction != null)
            {
                defaultConditionState = _context.CreateNewState();
                defaultConditionState.SetAction(defaultConditionAction, targetState);
            }

            setConditionedActions(currentState, targetState, actions, defaultConditionState);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Emits action conditioned by given byte in current target state.
 /// </summary>
 /// <param name="condition">The condition byte.</param>
 /// <param name="action">The action.</param>
 internal void Emit_TargetAction(byte condition, AutomatonBuilderDirector action)
 {
     _lastTargetState.SetByteAction(condition, action);
 }
Exemplo n.º 3
0
        /// <summary>
        /// Sets action for given byte input.
        /// </summary>
        /// <param name="b">Condition byte.</param>
        /// <param name="action">The action.</param>
        internal void SetByteAction(byte b, AutomatonBuilderDirector action)
        {
            if (_director != null)
                throw new NotImplementedException("cannot set byte target when state action is present");

            _byteActions.Add(b, action);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Emits directed actions conditioned by indexing strings repeating until empty line.
        /// </summary>
        /// <param name="actions">Actions to emit.</param>
        internal void Emit_RepeatedActionSwitch(Dictionary<string, AutomatonBuilderDirector> actions, AutomatonBuilderDirector defaultConditionAction = null)
        {
            //set repeating of target state
            _repeatedTargetState = _lastTargetState;

            AutomatonState currentState;
            AutomatonState targetState;
            prepareNewState(out currentState, out targetState);

            AutomatonState defaultConditionState = null;
            if (defaultConditionAction != null)
            {
                defaultConditionState = _context.CreateNewState();
                defaultConditionState.SetAction(defaultConditionAction, targetState);
            }

            //setting current state as output state will cause repeating of the state.
            setConditionedActions(currentState, currentState, actions, defaultConditionState);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sets action for current state, ending at target state.
        /// </summary>
        /// <param name="stateActionDirector">Director for building the action.</param>
        /// <param name="targetState">Target which will be active after the action is processed.</param>
        internal void SetAction(AutomatonBuilderDirector stateActionDirector, AutomatonState targetState)
        {
            if (_byteTargets.Count > 0 || _byteActions.Count > 0)
                throw new NotSupportedException("Cannot set state action when byte target is available");

            if (stateActionDirector == null)
                throw new ArgumentNullException("stateActionDirector");

            _director = stateActionDirector;
            _targetState = targetState;
        }