in odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/Tokenizer.java [74:162]
public TokenList tokenize() throws TokenizerException, ExpressionParserException {
curPosition = 0;
int oldPosition;
char curCharacter;
String token = "";
while (curPosition < expressionLength) {
oldPosition = curPosition;
curCharacter = expression.charAt(curPosition);
switch (curCharacter) {
case ' ':
// count whitespace and move pointer to next non-whitespace char
eatWhiteSpaces(curPosition, curCharacter);
break;
case '(':
tokens.appendToken(curPosition, TokenKind.OPENPAREN, curCharacter);
curPosition = curPosition + 1;
break;
case ')':
tokens.appendToken(curPosition, TokenKind.CLOSEPAREN, curCharacter);
curPosition = curPosition + 1;
break;
case '\'':
token = "";
readLiteral(curCharacter);
break;
case ',':
tokens.appendToken(oldPosition, TokenKind.COMMA, curCharacter);
curPosition = curPosition + 1;
break;
case '=':
case '/':
case '?':
case '.':
case '*':
curPosition = curPosition + 1;
tokens.appendToken(oldPosition, TokenKind.SYMBOL, curCharacter);
break;
default:
String rem_expr = expression.substring(curPosition); // remaining expression
boolean isBinary = checkForBinary(oldPosition, rem_expr);
if (isBinary) {
break;
}
// check for prefixes like X, binary, guid, datetime
boolean isPrefix = checkForPrefix(rem_expr);
if (isPrefix) {
break;
}
// check for math
boolean isMath = checkForMath(oldPosition, rem_expr);
if (isMath) {
break;
}
// check for function
boolean isFunction = checkForMethod(oldPosition, rem_expr);
if (isFunction) {
break;
}
boolean isBoolean = checkForBoolean(oldPosition, rem_expr);
if (isBoolean) {
break;
}
boolean isLiteral = checkForLiteral(oldPosition, curCharacter, rem_expr);
if (isLiteral) {
break;
}
token = new Character(curCharacter).toString();
throw TokenizerException.createUNKNOWN_CHARACTER(oldPosition, token, expression);
}
}
return tokens;
}