Сравнение приоритетов операторов Java - PullRequest
8 голосов
/ 30 апреля 2010

Есть ли в Java встроенный метод для сравнения приоритетов двух операторов? Например, если у меня есть char '/' и char '+', есть ли метод, который я могу вызвать, который сравнивает два и возвращает true / false, если первое больше второго (например, true)?

Ответы [ 4 ]

13 голосов
/ 30 апреля 2010

Приоритет оператора в том виде, как вы его определили, хотя и является обычным явлением, не является универсальной истиной, которую должен распознавать язык Java. Поэтому нет, сам язык Java не имеет такого сравнения. Конечно, легко написать свой собственный текст:

int precedenceLevel(char op) {
    switch (op) {
        case '+':
        case '-':
            return 0;
        case '*':
        case '/':
            return 1;
        case '^':
            return 2;
        default:
            throw new IllegalArgumentException("Operator unknown: " + op);
    }
}

Тогда, учитывая char op1, op2, просто сравните precedenceLevel(op1), precedenceLevel(op2).

Вы также можете использовать if-else или троичные операторы вместо switch, если у вас очень мало операторов. Другой вариант - использовать enum Operator implements Comparable<Operator>, но в зависимости от того, что вы делаете, лучше использовать инструмент синтаксического анализа, такой как ANTLR .


Обратите внимание, что в приведенном выше примере ^ имеет наивысший приоритет, подразумевая, что, возможно, он используется для обозначения возведения в степень. Фактически, ^ в языке Java является исключающим-или, и имеет более низкий приоритет, чем +.

    System.out.println(1+2^3);   // prints 0
    System.out.println(1+(2^3)); // prints 2
    System.out.println((1+2)^3); // prints 0

Это просто показывает, что приоритет и даже семантика этих символов НЕ являются универсальными истинами.

Смотри также:

2 голосов
/ 30 апреля 2010

нет. Лучше всего найти банку 3-го участника, которая выполняет разбор языка, и посмотреть, есть ли у них такие методы.

0 голосов
/ 30 апреля 2010

Я озадачен, почему вы думаете, что вам нужна эта информация во время выполнения. В каждом языке, который я когда-либо использовал, включая алгебру и английский, приоритет оператора предопределен.

0 голосов
/ 30 апреля 2010

Вы можете написать свой собственный API, который выполняет это, и отправляет это как параметр, и дает вам результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...