@Override
    	public String getErrorMessage(RecognitionException erro, String[] nomeDosSimbolos) {
    		if (erro instanceof UnwantedTokenException) {
    			UnwantedTokenException erroDeSimboloNaoDesejado = (UnwantedTokenException) erro;
    			String entradaNaoDesejada = getTokenErrorDisplay(erroDeSimboloNaoDesejado.getUnexpectedToken());
    			String simboloEsperado = getTokenErrorDisplay(erroDeSimboloNaoDesejado.expecting, nomeDosSimbolos);
    			return String.format("[UnwantedTokenException]\nEntrada não desejada: %s. O símbolo esperado era: %s.", entradaNaoDesejada, simboloEsperado);
    		} else if (erro instanceof MissingTokenException) {
    			MissingTokenException erroDeSimboloFaltando = (MissingTokenException) erro;
    			String simboloFaltando = getTokenErrorDisplay(erroDeSimboloFaltando.expecting, nomeDosSimbolos);
    			String entradaRecebida = getTokenErrorDisplay(erroDeSimboloFaltando.token);
    			return String.format("[MissingTokenException]\nSímbolo faltando: %s. A entrada recebida foi: %s.", simboloFaltando, entradaRecebida);
    		} else if (erro instanceof MismatchedTokenException) {
    			MismatchedTokenException erroDeSimboloIncompativel = (MismatchedTokenException) erro;
    			String entradaIncompativel = getTokenErrorDisplay(erroDeSimboloIncompativel.token);
    			String simboloEsperado = getTokenErrorDisplay(erroDeSimboloIncompativel.expecting, nomeDosSimbolos);
    			return String.format("[MismatchedTokenException]\nEntrada incompátivel: %s. O símbolo esperado era: %s.", entradaIncompativel, simboloEsperado);
    		} else if (erro instanceof MismatchedTreeNodeException) {
    			MismatchedTreeNodeException erroDeNodoIncompativel = (MismatchedTreeNodeException) erro;
    			Object nodoIncompativel = erroDeNodoIncompativel.node;
    			String simboloEsperado = getTokenErrorDisplay(erroDeNodoIncompativel.expecting, nomeDosSimbolos);
    			return String.format("[MismatchedTreeNodeException]\nNodo incompátivel: %s. O símbolo esperado era: %s.", nodoIncompativel.toString(), simboloEsperado);
    		} else if (erro instanceof NoViableAltException) {
    			NoViableAltException erroDeAlternativaInviavel = (NoViableAltException) erro;
    			String entradaRecebida = getTokenErrorDisplay(erroDeAlternativaInviavel.token);
    			return String.format("[NoViableAltException]\nSem alternativa viável. A entrada recebida foi: %s.", entradaRecebida);
    		} else if (erro instanceof EarlyExitException) {
    			EarlyExitException erroDeSaidaPrecoce = (EarlyExitException) erro;
    			String entradaRecebida = getTokenErrorDisplay(erroDeSaidaPrecoce.token);
    			return String.format("[EarlyExitException]\nEsperava-se reconhecer pelo menos uma alternativa, mas não foi reconhecida nenhuma. A entrada recebida foi: %s.", entradaRecebida);
    		} else if (erro instanceof MismatchedSetException) {
    			MismatchedSetException erroDeConjuntoIncompativel = (MismatchedSetException) erro;
    			String entradaIncompativel = getTokenErrorDisplay(erroDeConjuntoIncompativel.token);
    			BitSet conjuntoEsperado = erroDeConjuntoIncompativel.expecting;
    			return String.format("[MismatchedSetException]\nEntrada incompátivel: %s. O conjunto esperado era: %s.", entradaIncompativel, conjuntoEsperado);
    		} else if (erro instanceof MismatchedNotSetException) {
    			MismatchedNotSetException erroDeConjuntoNegadoIncompativel = (MismatchedNotSetException) erro;
    			String entradaIncompativel = getTokenErrorDisplay(erroDeConjuntoNegadoIncompativel.token);
    			BitSet conjuntoNegadoEsperado = erroDeConjuntoNegadoIncompativel.expecting;
    			return String.format("[MismatchedNotSetException]\nEntrada incompátivel: %s. O conjunto negado esperado era: %s.", entradaIncompativel, conjuntoNegadoEsperado);
    		} else if (erro instanceof FailedPredicateException) {
    			FailedPredicateException erroDePredicadoFalho = (FailedPredicateException) erro;
    			String regra = erroDePredicadoFalho.ruleName;
    			String predicado = erroDePredicadoFalho.predicateText;
    			return String.format("[FailedPredicateException]\nPredicado falho: %s na regra: %s.", predicado, regra);
    		}
    		return String.format("[Erro de reconhecimento]\n%s.", erro.getMessage());
    	}