コード例 #1
0
        public Lexeme GetNextLexemeFromBuffer(LexemeType specifiedLexeme = LexemeType.Unspecified)
        {
            if (_bufferReader.EndOfStream)
            {
                return(EofLexeme);
            }

            var lexeme = new List <char>();

            var currentState = _stateContainer[specifiedLexeme.ToString()];

            if (currentState is TerminalState)
            {
                _bufferReader.AdvanceBuffer();
            }

            while (!(currentState is TerminalState))
            {
                currentState = currentState.TransitionToNextState(_bufferReader.Buffer, lexeme);
            }

            var terminalStateLexeme = new Lexeme(((TerminalState)currentState).Type, new string(lexeme.ToArray()));

            return(terminalStateLexeme);
        }
コード例 #2
0
        public DfaLexemeReader(IStateContainer stateContainer, IBufferReader bufferReader)
        {
            _stateContainer = stateContainer ?? throw new ArgumentNullException(nameof(bufferReader));
            _bufferReader   = bufferReader ?? throw new ArgumentNullException(nameof(bufferReader));

            _bufferReader.AdvanceBuffer(); //Preload the buffer
        }