Example usage for org.antlr.v4.runtime Token getText

List of usage examples for org.antlr.v4.runtime Token getText

Introduction

In this page you can find the example usage for org.antlr.v4.runtime Token getText.

Prototype

String getText();

Source Link

Document

Get the text of the token.

Usage

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());
}