List of usage examples for org.antlr.v4.runtime Token getStartIndex
int getStartIndex();
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(); } } }