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; }