예제 #1
0
 public Transition(ParserState state, ParserEvent pEvent, ParserState nextState, Action action)
 {
     this.state     = state;
     this.pEvent    = pEvent;
     this.nextState = nextState;
     this.action    = action;
 }
예제 #2
0
        public async Task <IActionResult> CreateFault(string deviceId, string filename)
        {
            FileStream   fileStream = new FileStream(filename, FileMode.Open);
            StreamReader reader     = new StreamReader(fileStream);

            var objClass = new ParserEvent();

            objClass.ParseEvents(deviceId, reader);
            return(RedirectToAction(nameof(Index)));
        }
예제 #3
0
        private void HandleEvent(ParserEvent pEvent)
        {
            foreach (var transition in transitions)
            {
                if (transition.state.Equals(currentState) && transition.pEvent.Equals(pEvent))
                {
                    transition.action?.Invoke();
                    Logger.DebugLogLine($"[Parser] Change state from: {currentState} to: {transition.nextState} from event: {pEvent}");
                    currentState = transition.nextState;
                    return;
                }
            }

            if (pEvent != ParserEvent.WHITE_SPACE)
            {
                throw new Exception($"[Parser] Received invalid event {pEvent} when in state {currentState}, this is an edge case, please contact the developer");
            }
        }
예제 #4
0
파일: Parser.cs 프로젝트: marcelstuder/smc
 public Transition(ParserState currentState, ParserEvent evt, ParserState newState, Action<IBuilder> action)
 {
     CurrentState = currentState;
     Event = evt;
     NewState = newState;
     Action = action;
 }
예제 #5
0
파일: Parser.cs 프로젝트: marcelstuder/smc
        private void HandleEventError(ParserEvent parserEvent, int line, int pos)
        {
            switch (_state)
            {
                case ParserState.Header:
                case ParserState.HeaderValue:
                    _builder.HeaderError(_state, parserEvent, line, pos);
                    break;

                case ParserState.StateSpec:
                case ParserState.SuperStateName:
                case ParserState.SuperStateClose:
                case ParserState.StateModifier:
                case ParserState.ExitAction:
                case ParserState.EntryAction:
                case ParserState.StateBase:
                    _builder.StateSpecError(_state, parserEvent, line, pos);
                    break;

                case ParserState.SingleEvent:
                case ParserState.SingleNextState:
                case ParserState.SingleActionGroup:
                case ParserState.SingleActionGroupName:
                    _builder.TransitionError(_state, parserEvent, line, pos);
                    break;

                case ParserState.SubTransitionGroup:
                case ParserState.GroupEvent:
                case ParserState.GroupNextState:
                case ParserState.GroupActionGroup:
                case ParserState.GroupActionGroupName:
                    _builder.TransitionGroupError(_state, parserEvent, line, pos);
                    break;

                case ParserState.End:
                    _builder.EndError(_state, parserEvent, line, pos);
                    break;

                default:
                    throw new ApplicationException($"Unhandled parser state: '{_state}'.");
            }
        }
예제 #6
0
파일: Parser.cs 프로젝트: marcelstuder/smc
        private void HandleEvent(ParserEvent parserEvent, int line, int pos)
        {
            var transition = _transitions.SingleOrDefault(t => t.CurrentState == _state && t.Event == parserEvent);

            if (null != transition)
            {
                _state = transition.NewState;
                transition.Action?.Invoke(_builder);
            }
            else
                HandleEventError(parserEvent, line, pos);
        }
예제 #7
0
 public YamlParser(TextReader reader, ParserEvent @event)
 {
     this._reader = new ParserReader(reader);
     this._event  = @event;
     this._props  = new Dictionary <string, string>();
 }