Beispiel #1
0
        public Token GetNextToken()
        {
            while (_currentSymbol.Character.IsWhiteSpace())
            {
                _currentSymbol = _inputString.GetNextSymbol();
            }

            _commentState.ConsumeComments(ref _currentSymbol, _inputString);

            if (_currentSymbol.Character.IsEof())
            {
                return new Token {
                           Type = TokenType.Eof, Column = _currentSymbol.Column, Line = _currentSymbol.Line
                }
            }
            ;

            if (_currentSymbol.Character.Equals('@'))
            {
                return(_verbatinState.GetToken(ref _currentSymbol, _inputString));
            }

            if (_currentSymbol.Character.IsLetterOrUnderscore())
            {
                return(_idState.GetId(ref _currentSymbol, _inputString));
            }

            if (_currentSymbol.Character.IsLetterOrDigitOrUnderscore())
            {
                return(_digitState.GetDigit(ref _currentSymbol, _inputString));
            }

            if (_currentSymbol.Character.IsSingleQuotes())
            {
                return(_charState.GetChar(ref _currentSymbol, _inputString));
            }

            if (_currentSymbol.Character.IsDoubleQuotes())
            {
                return(_stringState.GetString(ref _currentSymbol, _inputString));
            }

            if (_symbolState.IsValid(_currentSymbol.Character.ToString()))
            {
                return(_symbolState.GetSymbol(ref _currentSymbol, _inputString));
            }

            throw new LexicalException("Cannot resolve symbol  " + _currentSymbol.Character + "  Line: " + _currentSymbol.Line + " Column: " + _currentSymbol.Column);
        }
    }