Преобразовать HEX в обратной польской нотации

Есть код обратной польской нотации

static boolean isDelim(char c) {
    return c == ' ';
}
static boolean isOperator(char c) {
    return c == '+' || c == '-' || c == '*' || c == '/' || c == '%' || c == 'x';
}
static int priority(char op) {
    switch (op) {
        case '+':
        case '-':
            return 1;
        case '*':
        case '/':
        case '%':
            return 2;
        case 'x':
            return 3;
        default:
            return -1;
    }
}
static void processOperator(LinkedList<Float> st, char op) {
    float r = st.removeLast();
    float l = st.removeLast();
    switch (op) {
        case '+':
            st.add(l + r);
            break;
        case '-':
            st.add(l - r);
            break;
        case '*':
            st.add(l * r);
            break;
        case '/':
            st.add(l / r);
            break;
        case '%':
            st.add(l % r);
            break;
        case 'x':
            st.add((float)parseInt("15", 16)); // 15 для примера, надо подставить типа DE
            break;
    }
}
public static float eval(String s) {
    LinkedList<Float> st = new LinkedList<>();
    LinkedList<Character> op = new LinkedList<>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (isDelim(c))
            continue;
        if (c == '(')
            op.add('(');
        else if (c == ')') {
            while (op.getLast() != '(')
                processOperator(st, op.removeLast());
            op.removeLast();
        } else if (isOperator(c)) {
            while (!op.isEmpty() && priority(op.getLast()) >= priority(c))
                processOperator(st, op.removeLast());
            op.add(c);
        } else {
            StringBuilder operand = new StringBuilder();
            boolean isContainDot = false;
            while (i < s.length() && (Character.isDigit(s.charAt(i)) || s.charAt(i)=='.')) {
                if (s.charAt(i)=='.') {
                    if (isContainDot) try {
                        throw new ParseException(s + " at position " + i, i);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    else isContainDot = true;
                }
                operand.append(s.charAt(i++));
            }
            --i;
            st.add(Float.parseFloat(operand.toString()));
        }
    }
    while (!op.isEmpty())
        processOperator(st, op.removeLast());
    return st.get(0);
}

Мне нужно что бы в коде сразу преобразовались данные HEX в int, с дальнейшим вычислением. Я ввёл параметр x, обозначающий HEX, поставил приоритет, а дальше не знаю, как сделать.

Вызов например такой

exp = "xDE*2";
System.out.println("Результат " + eval(exp));

Прошу помощи


Ответы (0 шт):