Example usage for org.antlr.v4.runtime ANTLRErrorListener syntaxError

List of usage examples for org.antlr.v4.runtime ANTLRErrorListener syntaxError

Introduction

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

Prototype

public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine,
        String msg, RecognitionException e);

Source Link

Document

Upon syntax error, notify any interested parties.

Usage

From source file:com.github.jknack.handlebars.internal.HbsParserFactory.java

License:Apache License

/**
 * Creates a new {@link Parser}.//from  www .j  ava 2 s . com
 *
 * @param handlebars The parser owner.
 * @param startDelimiter The start delimiter.
 * @param endDelimiter The end delimiter.
 * @return A new {@link Parser}.
 */
@Override
public Parser create(final Handlebars handlebars, final String startDelimiter, final String endDelimiter) {
    return new Parser() {

        @Override
        public Template parse(final TemplateSource source) throws IOException {
            logger.debug("About to parse: {}", source);
            final ANTLRErrorListener errorReporter = new HbsErrorReporter(source.filename());

            // 1. Lexer
            final HbsLexer lexer = newLexer(newStream(source.filename(), source.content()), startDelimiter,
                    endDelimiter);
            configure(lexer, errorReporter);

            // 2. Parser
            final HbsParser parser = newParser(lexer);
            configure(parser, errorReporter);

            logger.debug("Building AST");
            // 3. Parse
            ParseTree tree = parser.template();

            // remove unnecessary spaces and new lines?
            if (handlebars.prettyPrint()) {
                logger.debug("Applying Mustache spec");
                new ParseTreeWalker().walk(new MustacheSpec(), tree);
            }

            if (lexer.whiteSpaceControl) {
                logger.debug("Applying white spaces control");
                new ParseTreeWalker().walk(new WhiteSpaceControl(), tree);
            }

            /**
             * Build the AST.
             */
            TemplateBuilder builder = new TemplateBuilder(handlebars, source) {
                @Override
                protected void reportError(final CommonToken offendingToken, final int line, final int column,
                        final String message) {
                    errorReporter.syntaxError(parser, offendingToken, line, column, message, null);
                }
            };
            logger.debug("Creating templates");
            Template template = builder.visit(tree);
            return template;
        }

    };
}

From source file:com.github.jknack.handlebars.internal.HbsParserFactory.java

License:Apache License

/**
 * Creates a new {@link HbsLexer}.// w ww .  j  a v  a  2s .c om
 *
 * @param stream The input stream.
 * @param startDelimiter The start delimiter.
 * @param endDelimiter The end delimiter.
 * @return A new {@link HbsLexer}.
 */
private HbsLexer newLexer(final ANTLRInputStream stream, final String startDelimiter,
        final String endDelimiter) {
    return new HbsLexer(stream, startDelimiter, endDelimiter) {

        @Override
        public void notifyListeners(final LexerNoViableAltException e) {
            String text = _input.getText(Interval.of(_tokenStartCharIndex, _input.index()));
            String msg = "found: '" + getErrorDisplay(text) + "'";
            ANTLRErrorListener listener = getErrorListenerDispatch();
            listener.syntaxError(this, null, _tokenStartLine, _tokenStartCharPositionInLine, msg, e);
        }

        @Override
        public void recover(final LexerNoViableAltException e) {
            throw new IllegalArgumentException(e);
        }
    };
}