- •3 Этапы разработки
- •Алфавит языка
- •1.4 Выражения
- •1.4.1. Операнды
- •1.4.2. Предопределенные знаки операций
- •1.4.2.1. Логические операции
- •1.4.2.2 Арифметические операции
- •1.4.2.3. Знаки операций для множеств
- •1.4.2.4. Отношения
- •1.4.3. Определенные пользователем знаки операций и объявления знаков операций
- •1.4.3.1. Базисные знаки операций, для которых допустима перегрузка
- •1.4.3.2. Объявления новых знаков операций
- •1.4.3.3. Правила, управляющие перегрузкой
- •1.4.3.4. Старшинство операций
- •1.4.3.5. Численные разрешения внутри выражений
- •7. Операторы ввода-вывода
- •Условный оператор
- •Оператор цикла с предусловием в Паскале
- •Оператор цикла с постусловием в языке Паскаль
- •Оператор цикла с параметром в языке Паскаль
- •10 Одномерные и двумерные массивы
- •11 Пузырьковая сортировка (bubble sort)
- •Сортировка выборочная (selection sort)
- •Быстрая сортировка (quick sort)
- •Алгоритм поиска путей в лабиринте из песочницы
- •Предыстория
- •История
- •Анализ алгоритмов и программ, 2 семестр. Рекуррентность и рекурсия
- •Основы систем счисления из песочницы
- •Введение
- •Непозиционные системы
- •Единичная система счисления
- •Древнеегипетская десятичная система
- •Вавилонская шестидесятеричная система
- •Римская система
- •Позиционные системы счисления
- •Десятичная система счисления
- •Двоичная система счисления
- •Восьмеричная система счисления
- •Шестнадцатеричная система счисления
- •Однородные позиционные системы счисления
- •Смешанные системы счисления
- •Перевод из одной системы счисления в другую
- •Преобразование в десятичную систему счисления
- •Преобразование из десятичной системы счисления в другие
- •Преобразование из двоичной в восьмеричную и шестнадцатеричную системы
- •Преобразование из восьмеричной и шестнадцатеричной систем в двоичную
- •Преобразование дробной части двоичной системы в 8- и 16-ую
- •Преобразование дробной части десятичной системы в любую другую
1.4.3.3. Правила, управляющие перегрузкой
Следующее множество правил применяется для перегруженных знаков операций:
1) По крайней мере, тип у одного операнда перегруженного знака операции должен быть определенным пользователем типом (тип массивов, тип объектов, процедурный тип, тип перечисления). Законно вводить определенные пользователем версии “базисных” типов, такие как integer, real, и boolean.
2) Не разрешена спецификация типа объекта с постулированным интерфейсом (таким как object {D}) в качестве параметра знака операции. Причина – должна быть полная возможность разрешения перегрузки во время компиляции (т.е. статически).
3) Нет ограничений на тип результата перегруженной операции.
4) Число аргументов, старшинство перегруженной операции и форма (префиксная или постфиксная) унарной операции должны совпадать с соответствующими чертами для предопределенной операции с тем же знаком.
5) Конструкция разыменования со знаком ^ (см. обозначение правила Designator в синтаксисе) рассматривается здесь как постфиксный знак унарной операции. Следовательно, любая перегрузка знака операции ^ сохраняет форму унарного постфиксного знака; аналогично, унарные + и – знаки операций всегда являются унарными префиксными знаками операций.
6) Допускается перегрузка оператора присваивания. В этом случае, присваивание рассматривается как специальная операция со знаком ‘:=’, реализующая определенный побочный эффект и не производящая значения.
7) В перегруженном знаке операции для оператора присваивания должно быть два параметра и первый параметр должен подставляться по ссылке.
8) Законно специфицировать более одной версии перегруженной операции с одним и тем же знаком; в этом случае типы параметров соответствующих определений операции должны отличаться от любого другого определения операции с тем же знаком (см. раздел 1.4.3.1).
1.4.3.4. Старшинство операций
При использовании в выражениях знаков операций синтаксически выделяются четыре их класса, различающихся по старшинству (силе связывания). Операции одного и того же старшинства соединяются слева направо. Например, x-y-z означает (x-y)-z. Старшинство операций от наибольшего старшинства к наименьшему имеет следующий вид:
1. унарная операция отрицания ~ 2. операции типа умножения 3. операции типа сложения 4. отношения
Знаки операций используются в выражениях:
Expression = SimpleExpression
[ ( "=" | "#" | "<" | "<=" | ">" | ">=" | in ) SimpleExpression ] | Designator implements DefinitionName.
SimpleExpression = [ "+"|"-" ] Term { ( "+" | "-" | or ) Term }.
Term = Factor { ( "*" | "/" | div | mod | "&" ) Factor }.
Factor = number
| CharConstant | string | nil | Set | Designator | new TypeName [ "(" ActualParameters ")" ] | new ActivityInstanceName | "(" Expression ")" | "~" Factor.
Set = "{" [ SetElement { "," SetElement } ] "}".
SetElement = Expression [ ".." Expression ].
Допустимые знаки операций перечислены ниже. Некоторые из них применимы к операндам различных типов, обозначая различные операции. В этих случаях реальная операция идентифицируется типом операндов. Операнды должны быть выражениями, совместимыми по отношению к данному знаку операции (см. 1.11.6).
