System.Linq.Dynamic.ExpressionParser.NextToken C# (CSharp) Method

NextToken() protected method

protected NextToken ( ) : void
return void
		protected void NextToken()
		{
			while (char.IsWhiteSpace(_ch)) { NextChar(); }
			TokenId t;
			int tokenPos = _textPos;
			switch (_ch)
			{
				case '!':
					NextChar();
					if (_ch == '=')
					{
						NextChar();
						t = TokenId.ExclamationEqual;
					}
					else
					{
						t = TokenId.Exclamation;
					}
					break;
				case '%':
					NextChar();
					t = TokenId.Percent;
					break;
				case '&':
					NextChar();
					if (_ch == '&')
					{
						NextChar();
						t = TokenId.DoubleAmphersand;
					}
					else
					{
						t = TokenId.Amphersand;
					}
					break;
				case '(':
					NextChar();
					t = TokenId.OpenParen;
					break;
				case ')':
					NextChar();
					t = TokenId.CloseParen;
					break;
				case '*':
					NextChar();
					t = TokenId.Asterisk;
					break;
				case '+':
					NextChar();
					t = TokenId.Plus;
					break;
				case ',':
					NextChar();
					t = TokenId.Comma;
					break;
				case '-':
					NextChar();
					t = TokenId.Minus;
					break;
				case '.':
					NextChar();
					t = TokenId.Dot;
					break;
				case '/':
					NextChar();
					t = TokenId.Slash;
					break;
				case ':':
					NextChar();
					t = TokenId.Colon;
					break;
				case '<':
					NextChar();
					if (_ch == '=')
					{
						NextChar();
						t = TokenId.LessThanEqual;
					}
					else if (_ch == '>')
					{
						NextChar();
						t = TokenId.LessGreater;
					}
					else
					{
						t = TokenId.LessThan;
					}
					break;
				case '=':
					NextChar();
					if (_ch == '=')
					{
						NextChar();
						t = TokenId.DoubleEqual;
					}
					else
					{
						t = TokenId.Equal;
					}
					break;
				case '>':
					NextChar();
					if (_ch == '=')
					{
						NextChar();
						t = TokenId.GreaterThanEqual;
					}
					else
					{
						t = TokenId.GreaterThan;
					}
					break;
				case '{':
					NextChar();
					t = TokenId.OpenCurly;
					break;
				case '}':
					NextChar();
					t = TokenId.CloseCurly;
					break;
				case '?':
					NextChar();
					t = TokenId.Question;
					break;
				case '[':
					NextChar();
					t = TokenId.OpenBracket;
					break;
				case ']':
					NextChar();
					t = TokenId.CloseBracket;
					break;
				case '|':
					NextChar();
					if (_ch == '|')
					{
						NextChar();
						t = TokenId.DoubleBar;
					}
					else
					{
						t = TokenId.Bar;
					}
					break;
				case '"':
					const char slashSymbol = '\\';

					Action first = () =>
					{
						if (_ch == slashSymbol)
						{
							NextChar();
							NextChar();
						}
					};

					Action second = () =>
					{
						if (_ch == slashSymbol)
						{
							NextChar();
						}
					};

					t = GetLiteralToken(first, second);
					break;
				case '\'':
					t = GetLiteralToken(() => { }, () => { });
					break;
				default:
					if (char.IsLetter(_ch) || _ch == '@' || _ch == '_')
					{
						do
						{
							NextChar();
						} while (char.IsLetterOrDigit(_ch) || _ch == '_');
						t = TokenId.Identifier;
						break;
					}
					if (char.IsDigit(_ch))
					{
						t = TokenId.IntegerLiteral;
						do
						{
							NextChar();
						} while (char.IsDigit(_ch));
						if (_ch == '.')
						{
							t = TokenId.RealLiteral;
							NextChar();
							ValidateDigit();
							do
							{
								NextChar();
							} while (char.IsDigit(_ch));
						}
						if (_ch == 'E' || _ch == 'e')
						{
							t = TokenId.RealLiteral;
							NextChar();
							if (_ch == '+' || _ch == '-') NextChar();
							ValidateDigit();
							do
							{
								NextChar();
							} while (char.IsDigit(_ch));
						}
						if (_ch == 'F' || _ch == 'f') NextChar();
						break;
					}
					if (_textPos == _textLen)
					{
						t = TokenId.End;
						break;
					}
					throw ParseError(_textPos, Res.InvalidCharacter(_ch));
			}
			_token.ID = t;
			_token.Text = _text.Substring(tokenPos, _textPos - tokenPos);
			_token.Position = tokenPos;
		}
ExpressionParser