List of usage examples for org.antlr.v4.runtime Token getText
String getText();
From source file:com.espertech.esper.epl.parse.EPLTreeWalkerListener.java
License:Open Source License
private void handleFAFNamedWindowStream(EsperEPL2GrammarParser.ClassIdentifierContext node, Token i) { String windowName = ASTUtil.unescapeClassIdent(node); String alias = i != null ? i.getText() : null; statementSpec.getStreamSpecs()/*from ww w.j av a 2 s . c o m*/ .add(new FilterStreamSpecRaw(new FilterSpecRaw(windowName, Collections.<ExprNode>emptyList(), null), ViewSpec.toArray(viewSpecs), alias, new StreamSpecOptions())); }
From source file:com.espertech.esper.epl.parse.ExceptionConvertor.java
License:Open Source License
/** * Converts from a syntax error to a nice exception. * @param e is the syntax error/*from www.j a v a2 s . co m*/ * @param expression is the expression text * @param parser the parser that parsed the expression * @param addPleaseCheck indicates to add "please check" paraphrases * @return syntax exception */ public static UniformPair<String> convert(RecognitionException e, String expression, boolean addPleaseCheck, EsperEPL2GrammarParser parser) { if (expression.trim().length() == 0) { String message = "Unexpected " + END_OF_INPUT_TEXT; return new UniformPair<String>(message, expression); } Token t; Token tBeforeBefore = null; Token tBefore = null; Token tAfter = null; int tIndex = e.getOffendingToken() != null ? e.getOffendingToken().getTokenIndex() : Integer.MAX_VALUE; if (tIndex < parser.getTokenStream().size()) { t = parser.getTokenStream().get(tIndex); if ((tIndex + 1) < parser.getTokenStream().size()) { tAfter = parser.getTokenStream().get(tIndex + 1); } if (tIndex - 1 >= 0) { tBefore = parser.getTokenStream().get(tIndex - 1); } if (tIndex - 2 >= 0) { tBeforeBefore = parser.getTokenStream().get(tIndex - 2); } } else { if (parser.getTokenStream().size() >= 1) { tBeforeBefore = parser.getTokenStream().get(parser.getTokenStream().size() - 1); } if (parser.getTokenStream().size() >= 2) { tBefore = parser.getTokenStream().get(parser.getTokenStream().size() - 2); } t = parser.getTokenStream().get(parser.getTokenStream().size() - 1); } Token tEnd = null; if (parser.getTokenStream().size() > 0) { tEnd = parser.getTokenStream().get(parser.getTokenStream().size() - 1); } String positionInfo = getPositionInfo(t); String token = t.getType() == EsperEPL2GrammarParser.EOF ? "end-of-input" : "'" + t.getText() + "'"; Stack stack = parser.getParaphrases(); String check = ""; boolean isSelect = stack.size() == 1 && stack.get(0).equals("select clause"); if ((stack.size() > 0) && addPleaseCheck) { String delimiter = ""; StringBuilder checkList = new StringBuilder(); checkList.append(", please check the "); while (stack.size() != 0) { checkList.append(delimiter); checkList.append(stack.pop()); delimiter = " within the "; } check = checkList.toString(); } // check if token is a reserved keyword Set<String> keywords = parser.getKeywords(); boolean reservedKeyword = false; if (keywords.contains(token.toLowerCase())) { token += " (a reserved keyword)"; reservedKeyword = true; } else if (tAfter != null && keywords.contains("'" + tAfter.getText().toLowerCase() + "'")) { token += " ('" + tAfter.getText() + "' is a reserved keyword)"; reservedKeyword = true; } else { if ((tBefore != null) && (tAfter != null) && (keywords.contains("'" + tBefore.getText().toLowerCase() + "'")) && (keywords.contains("'" + tAfter.getText().toLowerCase() + "'"))) { token += " ('" + tBefore.getText() + "' and '" + tAfter.getText() + "' are a reserved keyword)"; reservedKeyword = true; } else if ((tBefore != null) && (keywords.contains("'" + tBefore.getText().toLowerCase() + "'"))) { token += " ('" + tBefore.getText() + "' is a reserved keyword)"; reservedKeyword = true; } else if (tEnd != null && keywords.contains("'" + tEnd.getText().toLowerCase() + "'")) { token += " ('" + tEnd.getText() + "' is a reserved keyword)"; reservedKeyword = true; } } // special handling for the select-clause "as" keyword, which is required if (isSelect && !reservedKeyword) { check += getSelectClauseAsText(tBeforeBefore, t); } String message = "Incorrect syntax near " + token + positionInfo + check; if (e instanceof NoViableAltException || e instanceof LexerNoViableAltException || checkForInputMismatchWithNoExpected(e)) { Token nvaeToken = e.getOffendingToken(); int nvaeTokenType = nvaeToken != null ? nvaeToken.getType() : EsperEPL2GrammarLexer.EOF; if (nvaeTokenType == EsperEPL2GrammarLexer.EOF) { if (token.equals(END_OF_INPUT_TEXT)) { message = "Unexpected " + END_OF_INPUT_TEXT + positionInfo + check; } else { if (ParseHelper.hasControlCharacters(expression)) { message = "Unrecognized control characters found in text" + positionInfo; } else { message = "Unexpected " + END_OF_INPUT_TEXT + " near " + token + positionInfo + check; } } } else { if (parser.getParserTokenParaphrases().get(nvaeTokenType) != null) { message = "Incorrect syntax near " + token + positionInfo + check; } else { // find next keyword in the next 3 tokens int currentIndex = tIndex + 1; while ((currentIndex > 0) && (currentIndex < parser.getTokenStream().size() - 1) && (currentIndex < tIndex + 3)) { Token next = parser.getTokenStream().get(currentIndex); currentIndex++; String quotedToken = "'" + next.getText() + "'"; if (parser.getKeywords().contains(quotedToken)) { check += " near reserved keyword '" + next.getText() + "'"; break; } } message = "Incorrect syntax near " + token + positionInfo + check; } } } else if (e instanceof InputMismatchException) { InputMismatchException mismatched = (InputMismatchException) e; String expected; if (mismatched.getExpectedTokens().size() > 1) { StringWriter writer = new StringWriter(); writer.append("any of the following tokens {"); String delimiter = ""; for (int i = 0; i < mismatched.getExpectedTokens().size(); i++) { writer.append(delimiter); if (i > 5) { writer.append("..."); writer.append(Integer.toString(mismatched.getExpectedTokens().size() - 5)); writer.append(" more"); break; } delimiter = ", "; writer.append(getTokenText(parser, mismatched.getExpectedTokens().get(i))); } writer.append("}"); expected = writer.toString(); } else { expected = getTokenText(parser, mismatched.getExpectedTokens().get(0)); } int offendingTokenType = mismatched.getOffendingToken().getType(); String unexpected = getTokenText(parser, offendingTokenType); String expecting = " expecting " + expected.trim() + " but found " + unexpected.trim(); message = "Incorrect syntax near " + token + expecting + positionInfo + check; } return new UniformPair<String>(message, expression); }
From source file:com.espertech.esper.epl.parse.ParseHelper.java
License:Open Source License
private static String getNoAnnotation(String expression, List<EsperEPL2GrammarParser.AnnotationEnumContext> annos, CommonTokenStream tokens) { if (annos == null || annos.isEmpty()) { return expression; }//from w ww . j a va2 s. c o m Token lastAnnotationToken = annos.get(annos.size() - 1).getStop(); if (lastAnnotationToken == null) { return null; } try { int line = lastAnnotationToken.getLine(); int charpos = lastAnnotationToken.getCharPositionInLine(); int fromChar = charpos + lastAnnotationToken.getText().length(); if (line == 1) { return expression.substring(fromChar).trim(); } String[] lines = expression.split("\r\n|\r|\n"); StringBuilder buf = new StringBuilder(); buf.append(lines[line - 1].substring(fromChar)); for (int i = line; i < lines.length; i++) { buf.append(lines[i]); if (i < lines.length - 1) { buf.append(newline); } } return buf.toString().trim(); } catch (RuntimeException ex) { log.error("Error determining non-annotated expression sting: " + ex.getMessage(), ex); } return null; }
From source file:com.espertech.esper.epl.parse.ParseHelper.java
License:Open Source License
private static String rewriteScripts(List<UniformPair<Integer>> ranges, CommonTokenStream tokens) { if (ranges.isEmpty()) { return tokens.getText(); }/*from w w w . j av a2 s . c o m*/ StringWriter writer = new StringWriter(); int rangeIndex = 0; UniformPair<Integer> current = ranges.get(rangeIndex); for (int i = 0; i < tokens.size(); i++) { Token t = tokens.get(i); if (t.getType() == EsperEPL2GrammarLexer.EOF) { break; } if (i < current.getFirst()) { writer.append(t.getText()); } else if (i == current.getFirst()) { writer.append(t.getText()); writer.append("'"); } else if (i == current.getSecond()) { writer.append("'"); writer.append(t.getText()); rangeIndex++; if (ranges.size() > rangeIndex) { current = ranges.get(rangeIndex); } else { current = new UniformPair<Integer>(-1, -1); } } else { if (t.getType() == EsperEPL2GrammarParser.QUOTED_STRING_LITERAL && i > current.getFirst() && i < current.getSecond()) { writer.append("\\'"); writer.append(t.getText().substring(1, t.getText().length() - 1)); writer.append("\\'"); } else { writer.append(t.getText()); } } } return writer.toString(); }
From source file:com.espertech.esper.event.property.PropertyParser.java
License:Open Source License
private synchronized static String escapeKeywords(CommonTokenStream tokens) { if (keywordCache == null) { keywordCache = new HashSet<String>(); Set<String> keywords = ParseHelper.newParser(tokens).getKeywords(); for (String keyword : keywords) { if (keyword.charAt(0) == '\'' && keyword.charAt(keyword.length() - 1) == '\'') { keywordCache.add(keyword.substring(1, keyword.length() - 1)); }/*from w w w .j a v a 2s . c om*/ } } StringWriter writer = new StringWriter(); for (Object token : tokens.getTokens()) // Call getTokens first before invoking tokens.size! ANTLR problem { Token t = (Token) token; if (t.getType() == EsperEPL2GrammarLexer.EOF) { break; } boolean isKeyword = keywordCache.contains(t.getText().toLowerCase()); if (isKeyword) { writer.append('`'); writer.append(t.getText()); writer.append('`'); } else { writer.append(t.getText()); } } return writer.toString(); }
From source file:com.facebook.presto.sql.parser.AstBuilder.java
License:Apache License
private static LikeClause.PropertiesOption getPropertiesOption(Token token) { switch (token.getType()) { case SqlBaseLexer.INCLUDING: return LikeClause.PropertiesOption.INCLUDING; case SqlBaseLexer.EXCLUDING: return LikeClause.PropertiesOption.EXCLUDING; }//from w ww .j a va2 s . c o m throw new IllegalArgumentException("Unsupported LIKE option type: " + token.getText()); }
From source file:com.facebook.presto.sql.parser.AstBuilder.java
License:Apache License
private static ArithmeticBinaryExpression.Type getArithmeticBinaryOperator(Token operator) { switch (operator.getType()) { case SqlBaseLexer.PLUS: return ArithmeticBinaryExpression.Type.ADD; case SqlBaseLexer.MINUS: return ArithmeticBinaryExpression.Type.SUBTRACT; case SqlBaseLexer.ASTERISK: return ArithmeticBinaryExpression.Type.MULTIPLY; case SqlBaseLexer.SLASH: return ArithmeticBinaryExpression.Type.DIVIDE; case SqlBaseLexer.PERCENT: return ArithmeticBinaryExpression.Type.MODULUS; }/*from ww w . j a va 2s .co m*/ throw new UnsupportedOperationException("Unsupported operator: " + operator.getText()); }
From source file:com.facebook.presto.sql.parser.AstBuilder.java
License:Apache License
private static ComparisonExpressionType getComparisonOperator(Token symbol) { switch (symbol.getType()) { case SqlBaseLexer.EQ: return ComparisonExpressionType.EQUAL; case SqlBaseLexer.NEQ: return ComparisonExpressionType.NOT_EQUAL; case SqlBaseLexer.LT: return ComparisonExpressionType.LESS_THAN; case SqlBaseLexer.LTE: return ComparisonExpressionType.LESS_THAN_OR_EQUAL; case SqlBaseLexer.GT: return ComparisonExpressionType.GREATER_THAN; case SqlBaseLexer.GTE: return ComparisonExpressionType.GREATER_THAN_OR_EQUAL; }/* w w w. j ava 2 s . c om*/ throw new IllegalArgumentException("Unsupported operator: " + symbol.getText()); }
From source file:com.facebook.presto.sql.parser.AstBuilder.java
License:Apache License
private static CurrentTime.Type getDateTimeFunctionType(Token token) { switch (token.getType()) { case SqlBaseLexer.CURRENT_DATE: return CurrentTime.Type.DATE; case SqlBaseLexer.CURRENT_TIME: return CurrentTime.Type.TIME; case SqlBaseLexer.CURRENT_TIMESTAMP: return CurrentTime.Type.TIMESTAMP; case SqlBaseLexer.LOCALTIME: return CurrentTime.Type.LOCALTIME; case SqlBaseLexer.LOCALTIMESTAMP: return CurrentTime.Type.LOCALTIMESTAMP; }/* w ww .java 2 s. c o m*/ throw new IllegalArgumentException("Unsupported special function: " + token.getText()); }
From source file:com.facebook.presto.sql.parser.AstBuilder.java
License:Apache License
private static IntervalLiteral.IntervalField getIntervalFieldType(Token token) { switch (token.getType()) { case SqlBaseLexer.YEAR: return IntervalLiteral.IntervalField.YEAR; case SqlBaseLexer.MONTH: return IntervalLiteral.IntervalField.MONTH; case SqlBaseLexer.DAY: return IntervalLiteral.IntervalField.DAY; case SqlBaseLexer.HOUR: return IntervalLiteral.IntervalField.HOUR; case SqlBaseLexer.MINUTE: return IntervalLiteral.IntervalField.MINUTE; case SqlBaseLexer.SECOND: return IntervalLiteral.IntervalField.SECOND; }/*from w w w . java2 s . c om*/ throw new IllegalArgumentException("Unsupported interval field: " + token.getText()); }