Разработка компиляторов

       

Конструирование типов


Типы языков программирования конструируются из примитивных типов, таких как boolean , char , integer , real и void , с помощью конструкторов типов. К примитивным типам естественно отнести и тип, который не используется при программировании, но весьма полезен для сигнализации о возникшей ошибке в типах; это тип - invalid . Для построения более сложных типов из примитивных обычно используются следующие конструкторы:

  1. Массивы. Если T - тип, то array (I, T) - тип, обозначающий тип массива с элементами типа T и индексным множеством I . Например, описание языка Pascal:

    var A: array [1..10] of integer;

    связывает выражение над типами array (1..10, T) с A .

  2. Произведение. Если T1 и T2 - типы, то их декартово произведение T1 * T2 также является типом.
  3. Структуры. Конструктор struct применяется к кортежу пар ( имя поля, тип поля). Например, фрагмент программы на языке Pascal:

    type row = record address: integer; lexeme: array [1..15] of char end; var table: array [1..13] of row;

    Тип row строится из примитивных типов следующим образом:

    struct ((address*integer) (lexeme*array (1..15, char))).

  4. Указатели. Если T - тип, то и pointer (T) - тип, определяющий " указатель на объект типа T". Например, описание языка Pascal:

    var p: ^row;

    определяет переменную p , имеющую тип pointer (row) .

  5. Функции. Если T1, T2 - типы, то proc (T1, T2) - тип, определяющий процедуру, типы формальных параметров которой есть T1, а тип результата - T2. Например, функция mod , вычисляющая остаток, имеет тип proc (int *int, int) , а функция, определенная как

    function f (a, b: char) : ^integer;

    имеет тип proc (char char, pointer (integer)) .



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