static byte[] getBytesFromHexString(String value)
    {
        int start = value.startsWith("0x") ? 2 : 0;
        int len = value.length() - start;
        if (len % 2 != 0)
            throw new IllegalArgumentException("malformed hex string: " + value);

        byte[] out = new byte[len / 2];
        for (int i = 0; i < out.length;)
        {
            int left = decimalFromHex(value.charAt(start++));
            int right = decimalFromHex(value.charAt(start++));
            out[i++] = (byte) ((right & 0x0F) | (left << 4 & 0xF0));
        }
        return out;
    }
Creates the error/warning message that we need to show users/IDEs when ANTLR has found a parsing error, has
recovered from it and is now telling us that a parsing exception occurred.

@param tokenNames
           token names as known by ANTLR (which we ignore)
@param e
           The exception that was thrown
protostuff-parser/src/main/java/io/protostuff/parser/AbstractParser.java