5.3. ПРИОРИТЕТ ОПЕРАЦИЙ
267
тривать все длинное формальное определение <
выражения
>, так что с со-
держательной точки зрения приоритеты остаются самым простым способом
объяснения порядка вычислений сложных выражений.
Приоритеты обязательно возникают, когда в языке имеется систематиче-
ский механизм определения новых операций.Примером такого языка являет-
ся
Algol 68
. Здесь средств контекстно-свободной грамматики для задания по-
рядка вычисления выражений недостаточно. При описании новой операции
заодно описывается и ее приоритет, и он является характеристикой опера-
ции во всей ее области действия. Оказывается, что смысл операции зачастую
можно определять по контексту, а вот приоритет ее должен быть атрибутом
обозначения операции, а не ее конкретной реализации для конкретных типов
операндов. Ведь для того, чтобы установить, к чему применяется операция,
нужно сначала синтаксически разобрать выражение, в которое она входит.
Фиксированные по определению языка приоритеты операций — локаль-
ное свойство обозначений, тогда как определяемый в программе приоритет
операции — это свойство вводимых в программе обозначений операции, ко-
торое не является контекстно-свободным. Поэтому возможно «растворение»
фиксированных приоритетов в синтаксисе, а определяемые приоритеты тре-
буют дополнительных методов анализа,которые можно организовывать толь-
ко на базе разбора текста программы, что приводит к усложнению транслято-
ра. Именно поэтому в языке
С++
возможности определения операций огра-
ничены: из чисто прагматических соображений разработчики языка позво-
ляют связывать новую операцию лишь с априори заданными знаками опера-
ций, для которых фиксированы приоритеты. Понятно, что это решение отри-
цательно сказывается на выразительности программ.
Задания для самопроверки
1. Расклассифицируйте остальные вхождения операций в выражение (5.1).
2. Переведите выражение (5.2) в обратную польскую запись. Изучите ее
и объясните, почему в языке
АЛМО
использовалась обратная польская
запись и почему она до сих пор часто используется в промежуточных
представлениях транслируемых программ?
3. Проанализировав представления 5.2.4, покажите, когда не стоит поль-
зоваться сокращением цепочки вложенных уловных операторов через
один условный оператор с конъюнкцией условий.