Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Понятие о приоритете операторов
the concept of operator precedence
В языках программирования, научных калькуляторах и аналогичных системах обозначения операторов или грамматике операторов – это способ определения и анализа математических и других формальных выражений. В этой модели линейная последовательность токенов разделяется на два класса: операторы и операнды. Операнды – это объекты, над которыми выполняются операции. К ним относятся литеральные числа и другие константы, а также идентификаторы (имена), которые могут представлять всё, от простых скалярных переменных до сложных агрегированных структур и объектов, в зависимости от сложности и возможностей языка, а также контекста использования. Особым типом операнда является группа в скобках. Выражение, заключенное в скобки, обычно рекурсивно вычисляется, чтобы рассматриваться как единый операнд на следующем уровне вычисления. Каждому оператору присваивается позиция, приоритет и ассоциативность. Приоритет оператора – это число (от высокого к низкому или наоборот), которое определяет, какой оператор принимает операнд, окруженный двумя операторами с разным приоритетом. Умножение обычно имеет более высокий приоритет, чем сложение, например, 3 + 4 × 5 = 3 + (4 × 5) ≠ (3 + 4) × 5. С точки зрения позиции оператора, он может быть префиксным, постфиксным или инфиксным. Префиксный оператор непосредственно предшествует своему операнду, как в −x. Постфиксный оператор непосредственно следует за своим операндом, как, например, x!. Инфиксный оператор расположен между левым и правым операндами, как в x + y. Некоторые языки, особенно семейство синтаксиса C, расширяют эту общепринятую терминологию и говорят также о троичных инфиксных операторах (a ? b : c). Теоретически даже возможно (но не обязательно практически целесообразно) определить скобки как унарную бификсную операцию.
In programming languages, scientific calculators and similar common operator notation or operator grammar is a way to define and analyse mathematical and other formal expressions. In this model a linear sequence of tokens are divided into two classes: operators and operands. Operands are objects upon which the operators operate. These include literal numbers and other constants as well as identifiers (names) which may represent anything from simple scalar variables to complex aggregated structures and objects, depending on the complexity and capability of the language at hand as well as usage context. One special type of operand is the parenthesis group. An expression enclosed in parentheses is typically recursively evaluated to be treated as a single operand on the next evaluation level. Each operator is given a position, precedence, and an associativity. The operator precedence is a number (from high to low or vice versa) that defines which operator takes an operand that is surrounded by two operators of different precedence (or priority). Multiplication normally has higher precedence than addition, for example, so 3+4×5 = 3+(4×5) ≠ (3+4)×5. In terms of operator position, an operator may be prefix, postfix, or infix. A prefix operator immediately precedes its operand, as in −x. A postfix operator immediately succeeds its operand, as in x! for instance. An infix operator is positioned in between a left and a right operand, as in x+y. Some languages, most notably the C syntax family, stretches this conventional terminology and speaks also of ternary infix operators (a?b:c). Theoretically it would even be possible (but not necessarily practical) to define parenthesization as a unary bifix operation.
Обобщения обозначения общего оператора
Использование классов приоритета операторов и ассоциативности – это лишь один из подходов. Однако это не самый общий подход: данная модель не позволяет присвоить оператору более высокий приоритет при сравнении с «−», чем при сравнении с «+», сохраняя при этом эквивалентные приоритеты и ассоциативность для «+» и «−». Обобщённая версия этой модели, в которой каждому оператору можно задать независимые левый и правый приоритеты, доступна по адресу .
The use of operator precedence classes and associativities is just one way. However, it is not the most general way: this model cannot give an operator more precedence when competing with '−' than it can when competing with '+', while still giving '+' and '−' equivalent precedences and associativities. A generalized version of this model (in which each operator can be given independent left and right precedences) can be found at .