Язык программирования Оберон-2

Операнды



Операнды

За исключением конструкторов множества и литералов (чисел, символьных констант или строк), операнды представлены обозначениями. Обозначение содержит идентификатор константы, переменной или процедуры. Этот идентификатор может быть уточнен именем модуля (см. Гл. 4 и 11) и может сопровождаться селекторами, если обозначенный объект - элемент структуры.

Обозначение = УточнИдент { "." идент | "[" СписокВыражений "]" | "^" | "(" УточнИдент ")" }.
СписокВыражений  = Выражение {"," Выражение}.

Если а - обозначение массива, a[e] означает элемент а, чей индекс - текущее значение выражения e. Тип e должен быть целым типом. Обозначение вида a[e0, e1, ..., en] применимо вместо a[e0] [e1] ... [en]. Если r обозначает запись, то r.f означает поле f записи r или процедуру f, связанную с динамическим типом r (Гл. ). Если p обозначает указатель, p^ означает переменную, на которую ссылается p. Обозначения p^.f и p^[e] могут быть сокращены до p.f и p[e], то есть запись и индекс массива подразумевают разыменование. Если a или r доступны только для чтения, то a[e] и r.f также предназначены только для чтения.
     Охрана типа v(T) требует, чтобы динамическим типом v был T (или расширение T), то есть выполнение программы прерывается, если динамический тип v - не T (или расширение T). В пределах такого обозначения v воспринимается как имеющая статический тип T. Охрана применима, если

  • v - параметр-переменная типа запись, или v - указатель, и если
  • T - расширение статического типа v


  • Если обозначенный объект - константа или переменная, то обозначение ссылается на их текущее значение. Если он - процедура, то обозначение ссылается на эту процедуру, если только обозначение не сопровождается (возможно пустым) списком параметров. В последнем случае подразумевается активация процедуры и подстановка значения результата, полученного при ее исполнении. Фактические параметры должны соответствовать формальным параметрам как и при вызовах собственно процедуры (см. ).

    Примеры обозначений (со ссылками на примеры из Гл. 7):

    i (INTEGER)
    a[i] (REAL)
    w[3].name[i] (CHAR)
    t.left.right (Tree)
    t(CenterTree).subnode     (Tree)



    Содержание раздела