public bool Forward() { if (_curToken != null) { if (_m.IsError) { return(false); } if (_curToken == Token.EndOfInput) { return(true); } if (!_m.IsEnd && !_m.MatchWhiteSpaces(0)) { _m.Forward(1); } } if (_m.IsEnd) { _curToken = Token.EndOfInput; return(true); } switch (_m.Head) { case '\'': _m.UncheckedMove(1); return(ParseQuotedString()); case ',': _curToken = Token.Comma; return(_m.UncheckedMove(1)); case '(': _curToken = Token.LeftParenthesis; return(_m.UncheckedMove(1)); case ')': _curToken = Token.RightParenthesis; return(_m.UncheckedMove(1)); case '$': return(ParseProperty()); case '!': _m.UncheckedMove(1); if (_m.TryMatchChar('=')) { _curToken = Token.NotEqualTo; return(true); } _curToken = Token.Not; return(true); case '%': return(_m.SetError("BuiltIn or Custom %(metadata) are not supported.", "Tokenizer")); case '@': return(_m.SetError("Item @(lists) are not supported.", "Tokenizer")); case '>': _m.UncheckedMove(1); if (_m.TryMatchChar('=')) { _curToken = Token.GreaterThanOrEqualTo; return(true); } _curToken = Token.GreaterThan; return(true); case '<': _m.UncheckedMove(1); if (_m.TryMatchChar('=')) { _curToken = Token.LessThanOrEqualTo; return(true); } _curToken = Token.LessThan; return(true); case '=': _m.UncheckedMove(1); if (!_m.MatchChar('=')) { return(false); } _curToken = Token.EqualTo; return(true); default: if (!TryParseNumeric() && !TryParseIdentifierOrLogicalConnector()) { return(_m.SetError("Unrecognized token.", "Tokenizer")); } break; } return(true); }