private SQLExpression parseExpression(final SQLStatement sqlStatement) {
        String literals = lexerEngine.getCurrentToken().getLiterals();
        final int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - literals.length();
        final SQLExpression expression = getExpression(literals, sqlStatement);
        lexerEngine.nextToken();
        if (lexerEngine.skipIfEqual(Symbol.DOT)) {
            String property = lexerEngine.getCurrentToken().getLiterals();
            lexerEngine.nextToken();
            return skipIfCompositeExpression(sqlStatement)
                    ? new SQLIgnoreExpression(lexerEngine.getInput().substring(beginPosition, lexerEngine.getCurrentToken().getEndPosition()))
                    : new SQLPropertyExpression(new SQLIdentifierExpression(literals), property);
        }
        if (lexerEngine.equalAny(Symbol.LEFT_PAREN)) {
            lexerEngine.skipParentheses(sqlStatement);
            skipRestCompositeExpression(sqlStatement);
            return new SQLIgnoreExpression(lexerEngine.getInput().substring(beginPosition,
                    lexerEngine.getCurrentToken().getEndPosition() - lexerEngine.getCurrentToken().getLiterals().length()).trim());
        }
        return skipIfCompositeExpression(sqlStatement)
                ? new SQLIgnoreExpression(lexerEngine.getInput().substring(beginPosition, lexerEngine.getCurrentToken().getEndPosition())) : expression;
    }
private SQLExpression parseExpression ( final SQLStatement sqlStatement ) { String literals = lexerEngine . getCurrentToken ( ) . getLiterals ( ) ; final int beginPosition = lexerEngine . getCurrentToken ( ) . getEndPosition ( ) - literals . length ( ) ; final SQLExpression expression = getExpression ( literals , sqlStatement ) ; lexerEngine . nextToken ( ) ; if ( lexerEngine . skipIfEqual ( Symbol . DOT ) ) { String property = lexerEngine . getCurrentToken ( ) . getLiterals ( ) ; lexerEngine . nextToken ( ) ; return skipIfCompositeExpression ( sqlStatement ) ? new SQLIgnoreExpression ( lexerEngine . getInput ( ) . substring ( beginPosition , lexerEngine . getCurrentToken ( ) . getEndPosition ( ) ) ) : new SQLPropertyExpression ( new SQLIdentifierExpression ( literals ) , property ) ; } if ( lexerEngine . equalAny ( Symbol . LEFT_PAREN ) ) { lexerEngine . skipParentheses ( sqlStatement ) ; skipRestCompositeExpression ( sqlStatement ) ; return new SQLIgnoreExpression ( lexerEngine . getInput ( ) . substring ( beginPosition , lexerEngine . getCurrentToken ( ) . getEndPosition ( ) - lexerEngine . getCurrentToken ( ) . getLiterals ( ) . length ( ) ) . trim ( ) ) ; } return skipIfCompositeExpression ( sqlStatement ) ? new SQLIgnoreExpression ( lexerEngine . getInput ( ) . substring ( beginPosition , lexerEngine . getCurrentToken ( ) . getEndPosition ( ) ) ) : expression ; }
TODO complete more expression parse