List of usage examples for org.antlr.v4.runtime ParserRuleContext toStringTree
@Override
public String toStringTree()
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); }