private bool ParseRemaining() { int start = _parsePoint; if (CharacterUtilities.IsNumberStart(_expression[_parsePoint])) // numeric { if (!ParseNumeric(start)) { return(false); } } else if (CharacterUtilities.IsSimpleStringStart(_expression[_parsePoint])) // simple string (handle 'and' and 'or') { if (!ParseSimpleStringOrFunction(start)) { return(false); } } else { // Something that wasn't a number or a letter, like a newline (%0a) _errorState = true; _errorPosition = start + 1; _errorResource = "UnexpectedCharacterInCondition"; _unexpectedlyFound = Convert.ToString(_expression[_parsePoint], CultureInfo.InvariantCulture); return(false); } return(true); }
private bool ParseNumeric(int start) { if ((_expression.Length - _parsePoint) > 2 && _expression[_parsePoint] == '0' && (_expression[_parsePoint + 1] == 'x' || _expression[_parsePoint + 1] == 'X')) { // Hex number _parsePoint += 2; SkipHexDigits(); _lookahead = new Token(Token.TokenType.Numeric, _expression.Substring(start, _parsePoint - start)); } else if (CharacterUtilities.IsNumberStart(_expression[_parsePoint])) { // Decimal number if (_expression[_parsePoint] == '+') { _parsePoint++; } else if (_expression[_parsePoint] == '-') { _parsePoint++; } do { SkipDigits(); if (_parsePoint < _expression.Length && _expression[_parsePoint] == '.') { _parsePoint++; } if (_parsePoint < _expression.Length) { SkipDigits(); } } while (_parsePoint < _expression.Length && _expression[_parsePoint] == '.'); // Do we need to error on malformed input like 0.00.00)? or will the conversion handle it? // For now, let the conversion generate the error. _lookahead = new Token(Token.TokenType.Numeric, _expression.Substring(start, _parsePoint - start)); } else { // Unreachable _errorState = true; _errorPosition = start + 1; return(false); } return(true); }