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

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

Introduction

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

Prototype

int getStartIndex();

Source Link

Document

The starting character index of the token This method is optional; return -1 if not implemented.

Usage

From source file:org.elasticsearch.plan.a.ParserErrorStrategy.java

License:Apache License

@Override
public void recover(Parser recognizer, RecognitionException re) {
    Token token = re.getOffendingToken();
    String message;//  w  ww  .  j a v  a 2  s. c  om

    if (token == null) {
        message = "Error: no parse token found.";
    } else if (re instanceof InputMismatchException) {
        message = "Error[" + token.getLine() + ":" + token.getCharPositionInLine() + "]:"
                + " unexpected token [" + getTokenErrorDisplay(token) + "]" + " was expecting one of ["
                + re.getExpectedTokens().toString(recognizer.getVocabulary()) + "].";
    } else if (re instanceof NoViableAltException) {
        if (token.getType() == PlanAParser.EOF) {
            message = "Error: unexpected end of script.";
        } else {
            message = "Error[" + token.getLine() + ":" + token.getCharPositionInLine() + "]:"
                    + "invalid sequence of tokens near [" + getTokenErrorDisplay(token) + "].";
        }
    } else {
        message = "Error[" + token.getLine() + ":" + token.getCharPositionInLine() + "]:"
                + " unexpected token near [" + getTokenErrorDisplay(token) + "].";
    }

    ParseException parseException = new ParseException(message, token == null ? -1 : token.getStartIndex());
    parseException.initCause(re);

    throw new RuntimeException(parseException);
}

From source file:org.geotoolkit.cql.JCQLTextPane.java

License:Open Source License

private void syntaxHighLight(ParseTree tree, StyledDocument doc, AtomicInteger position) {

    if (tree instanceof ParserRuleContext) {
        final ParserRuleContext prc = (ParserRuleContext) tree;
        if (prc.exception != null) {
            //error nodes
            final Token tokenStart = prc.getStart();
            Token tokenEnd = prc.getStop();
            if (tokenEnd == null)
                tokenEnd = tokenStart;// w ww .  ja v  a 2  s  .c om
            final int offset = tokenStart.getStartIndex();
            final int length = tokenEnd.getStopIndex() - tokenStart.getStartIndex() + 1;
            doc.setCharacterAttributes(offset, length, styleError, true);
            return;
        }

        //special case for functions
        if (prc instanceof CQLParser.ExpressionTermContext) {
            final CQLParser.ExpressionTermContext ctx = (CQLParser.ExpressionTermContext) prc;
            if (ctx.NAME() != null && ctx.LPAREN() != null) {
                final int nbChild = tree.getChildCount();
                for (int i = 0; i < nbChild; i++) {
                    final ParseTree pt = tree.getChild(i);
                    if (pt instanceof TerminalNode
                            && ((TerminalNode) pt).getSymbol().getType() == CQLLexer.NAME) {
                        final TerminalNode tn = (TerminalNode) pt;
                        // if index<0 = missing token
                        final Token token = tn.getSymbol();
                        final int offset = token.getStartIndex();
                        final int length = token.getStopIndex() - token.getStartIndex() + 1;
                        position.addAndGet(length);
                        doc.setCharacterAttributes(offset, length, styleFunction, true);
                    } else {
                        syntaxHighLight(pt, doc, position);
                    }
                }
                return;
            }
        }

    }

    if (tree instanceof TerminalNode) {
        final TerminalNode tn = (TerminalNode) tree;
        // if index<0 = missing token
        final Token token = tn.getSymbol();
        final int offset = token.getStartIndex();
        final int length = token.getStopIndex() - token.getStartIndex() + 1;
        position.addAndGet(length);

        switch (token.getType()) {

        case CQLLexer.COMMA:
        case CQLLexer.UNARY:
        case CQLLexer.MULT:
            doc.setCharacterAttributes(offset, length, styleDefault, true);
            break;

        // EXpressions -------------------------------------------------
        case CQLLexer.TEXT:
        case CQLLexer.INT:
        case CQLLexer.FLOAT:
        case CQLLexer.DATE:
        case CQLLexer.DURATION_P:
        case CQLLexer.DURATION_T:
        case CQLLexer.POINT:
        case CQLLexer.LINESTRING:
        case CQLLexer.POLYGON:
        case CQLLexer.MPOINT:
        case CQLLexer.MLINESTRING:
        case CQLLexer.MPOLYGON:
            doc.setCharacterAttributes(offset, length, styleLiteral, true);
            break;
        case CQLLexer.PROPERTY_NAME:
            doc.setCharacterAttributes(offset, length, stylePropertyName, true);
            break;
        case CQLLexer.NAME:
            if (tree.getChildCount() == 0) {
                //property name
                doc.setCharacterAttributes(offset, length, stylePropertyName, true);
            } else {
                //function name
                doc.setCharacterAttributes(offset, length, styleFunction, true);
            }
            break;
        case CQLLexer.RPAREN:
        case CQLLexer.LPAREN:
            doc.setCharacterAttributes(offset, length, styleParenthese, true);
            break;

        case CQLLexer.COMPARE:
        case CQLLexer.LIKE:
        case CQLLexer.IS:
        case CQLLexer.BETWEEN:
        case CQLLexer.IN:
            doc.setCharacterAttributes(offset, length, styleOperator, true);
            break;
        case CQLLexer.AND:
        case CQLLexer.OR:
        case CQLLexer.NOT:
            doc.setCharacterAttributes(offset, length, styleBinary, true);
            break;
        case CQLLexer.BBOX:
        case CQLLexer.BEYOND:
        case CQLLexer.CONTAINS:
        case CQLLexer.CROSSES:
        case CQLLexer.DISJOINT:
        case CQLLexer.DWITHIN:
        case CQLLexer.EQUALS:
        case CQLLexer.INTERSECTS:
        case CQLLexer.OVERLAPS:
        case CQLLexer.TOUCHES:
        case CQLLexer.WITHIN:
            doc.setCharacterAttributes(offset, length, styleBinary, true);
            break;
        default:
            doc.setCharacterAttributes(offset, length, styleError, true);
            break;
        }
    }

    final int nbChild = tree.getChildCount();
    for (int i = 0; i < nbChild; i++) {
        syntaxHighLight(tree.getChild(i), doc, position);
    }
}

From source file:org.geotoolkit.gui.javafx.filter.FXCQLEditor.java

License:Open Source License

private void syntaxHighLight(ParseTree tree) {

    if (tree instanceof ParserRuleContext) {
        final ParserRuleContext prc = (ParserRuleContext) tree;
        if (prc.exception != null) {
            //error nodes
            final Token tokenStart = prc.getStart();
            Token tokenEnd = prc.getStop();
            if (tokenEnd == null)
                tokenEnd = tokenStart;//from w  ww  .  ja v a2 s  .c  o m
            final int offset = tokenStart.getStartIndex();
            final int end = tokenEnd.getStopIndex() + 1;
            if (end > offset) {
                codeArea.setStyle(offset, end, STYLE_ERROR);
            }
            return;
        }

        //special case for functions
        if (prc instanceof CQLParser.ExpressionTermContext) {
            final CQLParser.ExpressionTermContext ctx = (CQLParser.ExpressionTermContext) prc;
            if (ctx.NAME() != null && ctx.LPAREN() != null) {
                final int nbChild = tree.getChildCount();
                for (int i = 0; i < nbChild; i++) {
                    final ParseTree pt = tree.getChild(i);
                    if (pt instanceof TerminalNode
                            && ((TerminalNode) pt).getSymbol().getType() == CQLLexer.NAME) {
                        final TerminalNode tn = (TerminalNode) pt;
                        // if index<0 = missing token
                        final Token token = tn.getSymbol();
                        final int offset = token.getStartIndex();
                        final int end = token.getStopIndex() + 1;
                        if (end > offset) {
                            codeArea.setStyle(offset, end, STYLE_FUNCTION);
                        }
                    } else {
                        syntaxHighLight(pt);
                    }
                }
                return;
            }
        }

    }

    if (tree instanceof TerminalNode) {
        final TerminalNode tn = (TerminalNode) tree;
        // if index<0 = missing token
        final Token token = tn.getSymbol();
        final int offset = token.getStartIndex();
        final int end = token.getStopIndex() + 1;

        switch (token.getType()) {

        case CQLLexer.COMMA:
        case CQLLexer.UNARY:
        case CQLLexer.MULT:
            codeArea.setStyle(offset, end, STYLE_DEFAULT);
            break;

        // EXpressions -------------------------------------------------
        case CQLLexer.TEXT:
        case CQLLexer.INT:
        case CQLLexer.FLOAT:
        case CQLLexer.DATE:
        case CQLLexer.DURATION_P:
        case CQLLexer.DURATION_T:
        case CQLLexer.POINT:
        case CQLLexer.LINESTRING:
        case CQLLexer.POLYGON:
        case CQLLexer.MPOINT:
        case CQLLexer.MLINESTRING:
        case CQLLexer.MPOLYGON:
            codeArea.setStyle(offset, end, STYLE_LITERAL);
            break;
        case CQLLexer.PROPERTY_NAME:
            codeArea.setStyle(offset, end, STYLE_PROPERTY);
            break;
        case CQLLexer.NAME:
            if (tree.getChildCount() == 0) {
                //property name
                codeArea.setStyle(offset, end, STYLE_PROPERTY);
            } else {
                //function name
                codeArea.setStyle(offset, end, STYLE_FUNCTION);
            }
            break;
        case CQLLexer.RPAREN:
        case CQLLexer.LPAREN:
            codeArea.setStyle(offset, end, STYLE_PARENTHESE);
            break;

        case CQLLexer.COMPARE:
        case CQLLexer.LIKE:
        case CQLLexer.IS:
        case CQLLexer.BETWEEN:
        case CQLLexer.IN:
            codeArea.setStyle(offset, end, STYLE_OPERATOR);
            break;
        case CQLLexer.AND:
        case CQLLexer.OR:
        case CQLLexer.NOT:
            codeArea.setStyle(offset, end, STYLE_BINARY);
            break;
        case CQLLexer.BBOX:
        case CQLLexer.BEYOND:
        case CQLLexer.CONTAINS:
        case CQLLexer.CROSSES:
        case CQLLexer.DISJOINT:
        case CQLLexer.DWITHIN:
        case CQLLexer.EQUALS:
        case CQLLexer.INTERSECTS:
        case CQLLexer.OVERLAPS:
        case CQLLexer.TOUCHES:
        case CQLLexer.WITHIN:
            codeArea.setStyle(offset, end, STYLE_BINARY);
            break;
        default:
            codeArea.setStyle(offset, end, STYLE_ERROR);
            break;
        }
    }

    final int nbChild = tree.getChildCount();
    for (int i = 0; i < nbChild; i++) {
        syntaxHighLight(tree.getChild(i));
    }
}

From source file:org.jruby.truffle.core.format.parser.PrintfTreeBuilder.java

License:Open Source License

private ByteList tokenAsBytes(Token token, int trim) {
    return new ByteList(source, token.getStartIndex() + trim,
            token.getStopIndex() - token.getStartIndex() + 1 - 2 * trim);
}

From source file:org.jruby.truffle.core.format.printf.PrintfTreeBuilder.java

License:Open Source License

private byte[] tokenAsBytes(Token token, int trim) {
    final int from = token.getStartIndex() + trim;
    final int to = from + token.getStopIndex() - token.getStartIndex() + 1 - 2 * trim;
    return Arrays.copyOfRange(source, from, to);
}

From source file:org.kaazing.k3po.lang.internal.parser.ScriptParseStrategy.java

License:Open Source License

private static int startIndex(Token token) {
    return (token != null && token.getType() != Token.EOF) ? token.getStartIndex() : 0;
}

From source file:org.ng200.tslk.ide.editors.TSLKRepairer.java

License:Open Source License

@Override
public void createPresentation(TextPresentation presentation, ITypedRegion region) {
    // Use tokens provided by the lexer to highlight keywords, etc...
    // Seems fast enough to skip Eclipse partitioning. Infact, the Eclipse
    // partitioner seems to slow everything down...
    TSLKGrammarLexer lexer = new TSLKGrammarLexer(new ANTLRInputStream(document.get()));
    Token t = null;
    while ((t = lexer.nextToken()).getType() != Token.EOF) {
        if (t.getStartIndex() > region.getOffset() + region.getLength())
            break;
        int start = t.getStartIndex();
        int end = t.getStopIndex();
        RGB foreground = null;/*  w  ww  .j a v a2s .  c om*/
        RGB background = null;
        int style = SWT.NORMAL;
        switch (t.getType()) { // TODO: Make keywords customisable
        case TSLKGrammarLexer.WHILE:
        case TSLKGrammarLexer.FOR:
        case TSLKGrammarLexer.FUNC:
        case TSLKGrammarLexer.IF:
        case TSLKGrammarLexer.THEN:
        case TSLKGrammarLexer.DO:
        case TSLKGrammarLexer.END:
            foreground = ColorManager.KEYWORD;
            style = SWT.BOLD;
            break;
        case TSLKGrammarLexer.STRING:
            foreground = ColorManager.STRING;
            break;
        case TSLKGrammarLexer.SLCOMMENT:
            foreground = ColorManager.SINGLE_LINE_COMMENT;
            break;
        case TSLKGrammarLexer.MLCOMMENT:
            foreground = ColorManager.MULTI_LINE_COMMENT;
            break;
        default:
            foreground = ColorManager.DEFAULT;
            break;
        }
        presentation.addStyleRange(new StyleRange(start, end - start + 1, colorManager.getColor(foreground),
                colorManager.getColor(background), style));
    }
}

From source file:org.shirolang.playground.SyntaxHighlighter.java

License:Open Source License

private void add(TerminalNode ident, String style) {
    if (ident != null) {
        Token t = ident.getSymbol();

        int spacer = t.getStartIndex() - lastEnd;
        if (spacer > 0) {
            spansBuilder.add(Collections.emptyList(), spacer);

            int gap = t.getText().length();
            spansBuilder.add(Collections.singleton(style), gap);
            lastEnd = t.getStopIndex() + 1;
        }//from   ww w. j  a v  a  2s  . co  m
    }
}

From source file:org.smallpearl.compiler.DescriptiveErrorListener.java

License:BSD License

protected void underlineError(Recognizer recognizer, Token offendingToken, int line, int charPositionInLine) {
    CommonTokenStream tokens = (CommonTokenStream) recognizer.getInputStream();
    String input = tokens.getTokenSource().getInputStream().toString();
    String[] lines = input.split("\n");
    String errorLine = lines[line - 1];
    System.err.println(errorLine);
    for (int i = 0; i < charPositionInLine; i++)
        System.err.print(" ");
    int start = offendingToken.getStartIndex();
    int stop = offendingToken.getStopIndex();
    if (start >= 0 && stop >= 0) {
        for (int i = start; i < stop; i++)
            System.err.print(" ");
    }/*from   w w  w  .  j  ava2 s .c  om*/
    System.err.println("^");
}

From source file:org.sourcepit.ltk.parser.ParseTreeBuilder.java

License:Apache License

private ParseNode handleTerminalNode(Terminal origin, Rule parent, TerminalNode terminalNode) {
    final ParseResult parseResult = parseResultStack.peek();
    final Class<? extends Lexer> sourceType = parseResult.getLexer().getClass();
    final org.antlr.v4.runtime.Token antlrToken = terminalNode.getSymbol();

    final int tokenType = antlrToken.getType();
    final int offset = offsetStack.peek().intValue() + antlrToken.getStartIndex();
    final int channel = antlrToken.getChannel();
    final String text = antlrToken.getText();
    final TokenType type = new TokenType(sourceType, tokenType);
    final Token token = new Token(type, channel, offset, text);

    final Terminal previous = terminals.isEmpty() ? null : terminals.getLast();
    final Terminal terminal = new Terminal(previous, parent, token, origin);

    final ParseResult nestedParseResult = parserDelegeate.parseNestedLanguage(sourceType, antlrToken);
    if (nestedParseResult == null) {
        terminals.add(terminal);//from  w  w  w  . ja va 2s  .c  om
        return terminal;
    } else {
        offsetStack.push(Integer.valueOf(antlrToken.getStartIndex()));
        try {
            return handleParseResult(terminal, parent, nestedParseResult);
        } finally {
            offsetStack.pop();
        }
    }
}