Example usage for org.antlr.v4.runtime ParserRuleContext toStringTree

List of usage examples for org.antlr.v4.runtime ParserRuleContext toStringTree

Introduction

In this page you can find the example usage for org.antlr.v4.runtime ParserRuleContext toStringTree.

Prototype

@Override
    public String toStringTree() 

Source Link

Usage

From source file:com.blazebit.persistence.impl.expression.AbstractExpressionFactory.java

License:Apache License

private Expression createExpression(RuleInvoker ruleInvoker, String expression, boolean allowCaseWhen) {
    if (expression == null) {
        throw new NullPointerException("expression");
    }/*from   w  w  w.  j av  a2s . c  om*/
    if (expression.isEmpty()) {
        throw new IllegalArgumentException("expression");
    }
    JPQLSelectExpressionLexer l = new JPQLSelectExpressionLexer(new ANTLRInputStream(expression));
    configureLexer(l);
    CommonTokenStream tokens = new CommonTokenStream(l);
    JPQLSelectExpressionParser p = new JPQLSelectExpressionParser(tokens, allowCaseWhen);
    configureParser(p);
    ParserRuleContext ctx = ruleInvoker.invokeRule(p);

    if (LOG.isLoggable(Level.FINEST)) {
        LOG.finest(ctx.toStringTree());
    }

    JPQLSelectExpressionVisitorImpl visitor = new JPQLSelectExpressionVisitorImpl(tokens);
    return visitor.visit(ctx);
}

From source file:com.blazebit.persistence.parser.expression.AbstractExpressionFactory.java

License:Apache License

private Expression createExpression(RuleInvoker ruleInvoker, String expression, boolean allowCaseWhen,
        boolean allowQuantifiedPredicates, boolean allowTreatJoinExtension,
        MacroConfiguration macroConfiguration, Set<String> usedMacros) {
    if (expression == null) {
        throw new NullPointerException("expression");
    }/*from www.  j ava  2  s .  co m*/
    if (expression.isEmpty()) {
        throw new IllegalArgumentException("expression");
    }
    JPQLSelectExpressionLexer l = new JPQLSelectExpressionLexer(new ANTLRInputStream(expression));
    configureLexer(l);
    CommonTokenStream tokens = new CommonTokenStream(l);
    JPQLSelectExpressionParser p = new JPQLSelectExpressionParser(tokens, allowCaseWhen,
            allowQuantifiedPredicates, allowTreatJoinExtension);
    configureParser(p);
    ParserRuleContext ctx;
    try {
        ctx = ruleInvoker.invokeRule(p);
    } catch (SyntaxErrorException ex) {
        throw new SyntaxErrorException("Could not parse expression '" + expression + "', " + ex.getMessage(),
                ex);
    }

    if (LOG.isLoggable(Level.FINEST)) {
        LOG.finest(ctx.toStringTree());
    }

    JPQLSelectExpressionVisitorImpl visitor = new JPQLSelectExpressionVisitorImpl(aggregateFunctions, enumTypes,
            entityTypes, minEnumSegmentCount, minEntitySegmentCount,
            macroConfiguration == null ? Collections.EMPTY_MAP : macroConfiguration.macros, usedMacros);
    Expression parsedExpression = visitor.visit(ctx);
    if (optimize) {
        parsedExpression = parsedExpression.accept(optimizer);
    }
    return parsedExpression;
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create predicate for comparison of ship types (as numbers or named in strings).
 * @param filterPredicateFactoryClass//  ww w  . j  a v  a2  s  .  c o  m
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForComparisonOfShipType(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasCompareTo(ctx) && hasString(ctx)) {
        ExpressionFilterParser.StringContext rhsCtx = invokeString(ctx);
        if (rhsCtx.STRING() != null) {
            Set<Integer> shipTypes = getShipTypes(extractString(rhsCtx));
            String fieldName = ctx.getStart().getText();
            String operator = invokeCompareTo(ctx).getText();
            if (!"=".equals(operator)) {
                throw new IllegalArgumentException(
                        "Sorry, only '=' operator supported for comparison on named ship type.");
            }
            Predicate<T> filter = createFilterPredicateForList(filterPredicateFactoryClass,
                    filterPredicateFactory, fieldName, shipTypes.toArray(new Integer[shipTypes.size()]));
            return filter;
        } else {
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory, ctx);
        }
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create a predicate for comparing navigational statuses (as numbers or named in strings).
 * @param filterPredicateFactoryClass/*from w w w.j  a  v  a 2  s  . c om*/
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForComparisonOfNavigationalStatus(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasCompareTo(ctx) && hasString(ctx)) {
        ExpressionFilterParser.StringContext rhsCtx = invokeString(ctx);
        if (rhsCtx.STRING() != null) {
            Set<Integer> navstats = getNavigationalStatuses(new String[] { extractString(rhsCtx) });
            String fieldName = ctx.getStart().getText();
            String operator = invokeCompareTo(ctx).getText();
            if (!operator.equals("=")) {
                throw new IllegalArgumentException(
                        "Sorry, only '=' operator supported for comparison on named navigational status.");
            }
            return createFilterPredicateForList(filterPredicateFactoryClass, filterPredicateFactory, fieldName,
                    navstats.toArray(new Integer[navstats.size()]));
        } else {
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory, ctx);
        }
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create predicate for testing against lists of countries.
 * @param filterPredicateFactoryClass//from ww w  .j av a2 s.  c o  m
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForListOfCountry(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasStringList(ctx)) {
        Country[] countries = getCountries(extractStrings(invokeStringList(ctx).string()));
        String fieldName = ctx.getStart().getText();
        return checkNegate(ctx, createFilterPredicateForList(filterPredicateFactoryClass,
                filterPredicateFactory, fieldName, countries));
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create predicate for testing against lists of source types.
 * @param filterPredicateFactoryClass/*from   w w  w .  j  a  va 2 s.  c o  m*/
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForListOfSourceType(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasStringList(ctx)) {
        SourceType[] sourceTypes = getSourceTypes(extractStrings(invokeStringList(ctx).string()));
        String fieldName = ctx.getStart().getText();
        return checkNegate(ctx, createFilterPredicateForList(filterPredicateFactoryClass,
                filterPredicateFactory, fieldName, sourceTypes));
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create predicate for comparing months (as numbers or named in strings).
 * @param filterPredicateFactoryClass// w w  w.j av a  2 s. co m
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForComparisonOfMonth(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasCompareTo(ctx)) {
        if (hasString(ctx)) {
            int month = mapStringToCalendarMonth(extractString(invokeString(ctx)));
            String fieldName = ctx.getStart().getText();
            String operator = invokeCompareTo(ctx).getText();
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory,
                    fieldName, operator, month);
        } else {
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory, ctx);
        }
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:dk.dma.ais.packet.ExpressionFilterParserBase.java

License:Apache License

/**
 * Create predicate for comparing weekdays (as numbers (monday = 1) or named in strings (in English)).
 * @param filterPredicateFactoryClass//from w w w  .j  ava2  s .co m
 * @param filterPredicateFactory
 * @param ctx
 * @param <T>
 * @return
 */
protected static <T> Predicate<T> createFilterPredicateForComparisonOfWeekday(
        Class<? extends FilterPredicateFactory> filterPredicateFactoryClass,
        FilterPredicateFactory filterPredicateFactory, ParserRuleContext ctx) {
    if (hasCompareTo(ctx)) {
        if (hasString(ctx)) {
            int dow = mapStringToCalendarDayOfWeek(extractString(invokeString(ctx)));
            String fieldName = ctx.getStart().getText();
            String operator = invokeCompareTo(ctx).getText();
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory,
                    fieldName, operator, dow);
        } else {
            return createFilterPredicateForComparison(filterPredicateFactoryClass, filterPredicateFactory, ctx);
        }
    } else {
        throw new IllegalArgumentException(ctx.toStringTree());
    }
}

From source file:org.elasticsearch.xpack.sql.parser.SqlParser.java

License:Open Source License

private <T> T invokeParser(String sql, List<SqlTypedParamValue> params,
        Function<SqlBaseParser, ParserRuleContext> parseFunction,
        BiFunction<AstBuilder, ParserRuleContext, T> visitor) {
    SqlBaseLexer lexer = new SqlBaseLexer(new CaseInsensitiveStream(sql));

    lexer.removeErrorListeners();//from  www  .  ja  v  a  2 s  . com
    lexer.addErrorListener(ERROR_LISTENER);

    Map<Token, SqlTypedParamValue> paramTokens = new HashMap<>();
    TokenSource tokenSource = new ParametrizedTokenSource(lexer, paramTokens, params);

    CommonTokenStream tokenStream = new CommonTokenStream(tokenSource);
    SqlBaseParser parser = new SqlBaseParser(tokenStream);

    parser.addParseListener(new PostProcessor(Arrays.asList(parser.getRuleNames())));

    parser.removeErrorListeners();
    parser.addErrorListener(ERROR_LISTENER);

    parser.getInterpreter().setPredictionMode(PredictionMode.SLL);

    if (DEBUG) {
        debug(parser);
        tokenStream.fill();

        for (Token t : tokenStream.getTokens()) {
            String symbolicName = SqlBaseLexer.VOCABULARY.getSymbolicName(t.getType());
            String literalName = SqlBaseLexer.VOCABULARY.getLiteralName(t.getType());
            log.info(format(Locale.ROOT, "  %-15s '%s'", symbolicName == null ? literalName : symbolicName,
                    t.getText()));
        }
        ;
    }

    ParserRuleContext tree = parseFunction.apply(parser);

    if (DEBUG) {
        log.info("Parse tree {} " + tree.toStringTree());
    }

    return visitor.apply(new AstBuilder(paramTokens), tree);
}