List of usage examples for org.antlr.v4.runtime ANTLRErrorListener syntaxError
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e);
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); } }; }