@Override
    public void recover(Parser recognizer, RecognitionException e) {
		for (ParserRuleContext context = recognizer.getContext(); context != null; context = context.getParent()) {
			context.exception = e;
		}

        throw new ParseCancellationException(e);
    }
Instead of recovering from exception {@code e}, re-throw it wrapped
 in a {@link ParseCancellationException} so it is not caught by the
 rule function catches.  Use {@link Exception#getCause()} to get the
 original {@link RecognitionException}.
runtime/Java/src/org/antlr/v4/runtime/BailErrorStrategy.java