public DataMachineState GetNext(Token token)
        {
            DataMachineState    nextState  = this.CurrentState;
            DataStateTransition transition = new DataStateTransition(CurrentState, token.Type);

            if (!transitions.TryGetValue(transition, out nextState))
            {
                throw new Exception("DATA: Invalid transition: " + CurrentState + " -> " + nextState + "\n" + token.Text + " " + token.Type);
            }

            if ((this.CurrentState == DataMachineState.DATA || this.CurrentState == DataMachineState.COMMA) && token.Type == TokenType.INT)
            {
                this.command.ConsumeToken(token);
            }

            Console.WriteLine("DATA: " + this.CurrentState + " -> " + nextState + ": " + token.Text);

            return(nextState);
        }
        public DataStateMachine(VariableTable variables, FileManager fileManager)
        {
            CurrentState = DataMachineState.START;
            transitions  = new Dictionary <DataStateTransition, DataMachineState>
            {
                { new DataStateTransition(DataMachineState.START, TokenType.DATA), DataMachineState.DATA },

                { new DataStateTransition(DataMachineState.DATA, TokenType.INT), DataMachineState.DATA_ELEMENT },

                { new DataStateTransition(DataMachineState.DATA_ELEMENT, TokenType.COMMA), DataMachineState.COMMA },
                { new DataStateTransition(DataMachineState.DATA_ELEMENT, TokenType.END), DataMachineState.START },

                { new DataStateTransition(DataMachineState.COMMA, TokenType.INT), DataMachineState.DATA_ELEMENT },
                { new DataStateTransition(DataMachineState.COMMA, TokenType.END), DataMachineState.DATA_ELEMENT }
            };

            this.variables = variables;
            this.command   = new DataCommand(variables, fileManager);
        }
 public DataStateTransition(DataMachineState currentState, TokenType token)
 {
     this.CurrentState = currentState;
     this.Token        = token;
 }
        public void MoveToNextState(Token token)
        {
            DataMachineState nextState = GetNext(token);

            this.CurrentState = nextState;
        }