private AST parseSimpleExpr() throws ParserException {
        Token token = lookForward();
        if (token == null) {
            return null;
        }
        if (token.getType() == ExpressionLexer.INTEGER) {
            nextToken();
            return new NumberAST(token.getVal(), DataTypes.LONG);
        }
        if (token.getType() == ExpressionLexer.DOUBLE) {
            nextToken();
            return new NumberAST(token.getVal(), DataTypes.DOUBLE);
        }
        if (token.getType() == ExpressionLexer.STRING) {
            nextToken();
            return new LiteralAST(token.getVal());
        }
        if (token.getType() == ExpressionLexer.VARIABLE) {
            nextToken();
            return new VariableAST(token.getVal());
        }
        if (token.getType() == ExpressionLexer.IDENTIFIER) {
            if(constants.contains(token.getVal())){
                nextToken();
                return new ConstantAST(token.getVal());
            }
            return parseFuncCall();
        }
        if ("(".equals(token.getVal())) {
            nextToken();
            AST expr = parseExpression();
            expect(")");
            return expr;
        }
        return null;
    }