Example usage for org.antlr.v4.runtime DiagnosticErrorListener DiagnosticErrorListener

List of usage examples for org.antlr.v4.runtime DiagnosticErrorListener DiagnosticErrorListener

Introduction

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

Prototype

public DiagnosticErrorListener() 

Source Link

Document

Initializes a new instance of DiagnosticErrorListener which only reports exact ambiguities.

Usage

From source file:no.ssb.vtl.test.junit.GrammarRule.java

License:Apache License

/**
 * Parse an expression starting from the given <b>ANTLR rule</b>
 * <p>// w  ww  . j  a  va2s . c  o  m
 * In order to get the Rule, use the {@link #withRule(String)} method.
 *
 * @param expression the expression to parse.
 * @param rule       the rule to start from.
 *                   @param diagnostic {@link DiagnosticErrorListener} will be used if true.
 * @return the resulting parse tree.
 * @throws Exception if the expression failed to parse.
 */
public ParserRuleContext parse(String expression, Rule rule, boolean diagnostic) throws Exception {
    Multimap<Integer, String> messages = LinkedListMultimap.create();

    LexerInterpreter lexerInterpreter = grammar.createLexerInterpreter(new ANTLRInputStream(expression));
    GrammarParserInterpreter parserInterpreter = grammar
            .createGrammarParserInterpreter(new CommonTokenStream(lexerInterpreter));

    BaseErrorListener errorListener;
    if (diagnostic) {
        errorListener = new DiagnosticErrorListener();
    } else {
        errorListener = new ConsoleErrorListener();
    }

    BaseErrorListener ruleErrorReporter = new BaseErrorListener() {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line,
                int charPositionInLine, String msg, org.antlr.v4.runtime.RecognitionException e) {
            int startLine = line, stopLine = line;
            int startColumn = charPositionInLine, stopColumn = charPositionInLine;
            if (offendingSymbol instanceof Token) {
                Token symbol = (Token) offendingSymbol;
                int start = symbol.getStartIndex();
                int stop = symbol.getStopIndex();
                if (start >= 0 && stop >= 0) {
                    stopColumn = startColumn + (stop - start) + 1;
                }
            }

            messages.put(stopLine,
                    String.format("at [%4s:%6s]:\t%s (%s)\n", String.format("%d,%d", startLine, stopLine),
                            String.format("%d,%d", startColumn, stopColumn), msg,
                            Optional.ofNullable(e).map(ex -> ex.getClass().getSimpleName()).orElse("null")));
        }
    };

    parserInterpreter.setErrorHandler(new GrammarParserInterpreter.BailButConsumeErrorStrategy());
    lexerInterpreter.removeErrorListeners();
    parserInterpreter.removeErrorListeners();

    lexerInterpreter.addErrorListener(errorListener);
    parserInterpreter.addErrorListener(errorListener);
    lexerInterpreter.addErrorListener(ruleErrorReporter);
    parserInterpreter.addErrorListener(ruleErrorReporter);

    ParserRuleContext parse = parserInterpreter.parse(rule.index);

    if (!messages.isEmpty()) {

        StringBuilder expressionWithErrors = new StringBuilder();
        LineNumberReader expressionReader = new LineNumberReader(new StringReader(expression));
        String line;
        while ((line = expressionReader.readLine()) != null) {
            int lineNumber = expressionReader.getLineNumber();
            expressionWithErrors.append(String.format("\t%d:%s%n", lineNumber, line));
            if (messages.containsKey(lineNumber)) {
                expressionWithErrors.append(String.format("%n"));
                for (String message : messages.get(lineNumber)) {
                    expressionWithErrors.append(message);
                }
            }
        }
        throw new Exception(
                String.format("errors parsing expression:%n%n%s%n", expressionWithErrors.toString()));
    }

    return parse;
}

From source file:org.apache.olingo.server.core.uri.testutil.ParserWithLogging.java

License:Apache License

@Override
protected void addStage1ErrorListener(final UriParserParser parser) {
    // Log error to console
    parser.removeErrorListeners();/*from   www . java 2 s. com*/
    parser.addErrorListener(errorCollector1);
    parser.addErrorListener(new DiagnosticErrorListener());
}

From source file:org.apache.olingo.server.core.uri.testutil.ParserWithLogging.java

License:Apache License

@Override
protected void addStage2ErrorListener(final UriParserParser parser) {
    // Log error to console
    parser.removeErrorListeners();//from   w w w  . j a va  2 s .  c om
    parser.addErrorListener(errorCollector2);
    parser.addErrorListener(new DiagnosticErrorListener());
}

From source file:org.btrplace.safeplace.spec.SpecScanner.java

License:Open Source License

private static CommonTokenStream getTokens(String source) throws IOException {
    CharStream is = CharStreams.fromReader(new StringReader(source));
    CstrSpecLexer lexer = new CstrSpecLexer(is);
    lexer.removeErrorListeners();/*  w w  w  .j  a va2  s  .  c  om*/
    lexer.addErrorListener(new DiagnosticErrorListener());
    return new CommonTokenStream(lexer);
}