Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП, ТВП / ТЯПМТ / Пособие.doc
Скачиваний:
161
Добавлен:
11.05.2015
Размер:
2.37 Mб
Скачать

7.3. Таблица видов

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

В существующих языках существует 5-7 вариантов видов:

  1. основные виды, напримерint, real, char, bool и др.;

  2. длинные и короткие виды, которые содержат символыlong илиshort, появляющиеся перед основными видами;

  3. указателина адрес ячейки памяти, выделенной для данного вида;

  4. структурныевиды, типаstruct и последовательностью полей; каждое поле имеет вид и селектор, обычно заключенные в скобки;

  5. виды массивов;

  6. объединенные виды, состоящие из символовunionилиvoid, используемых для выражения значений, которые могут принадлежать нескольким видам;

  7. виды процедур, представленные символамиprocedure, function и др., используемых для выражения значений, являющихся процедурами.

Естественно было бы представить все виды каким-нибудь одним типом, например, структурой. Для представления вида можно использовать массив или список, причем список более удобен, так как компилятор обычно строит структуру вида слева направо при просмотре программы, и необходимое для представления каждого вида пространство неизвестно, когда встречается его первый символ.

Описатель

proc(real, int) bool,

выражающий значение вида «процедура-с-вещественными-и-целочисленными-параметрами-дающая-логический-результат» может быть представлена структурой с отдельными указателями на список параметров и результат (рис. 7.3).

proc

Real

int

bool

Рис. 7.3. Структура процедуры

Аналогичным образом вид

struct(int(i), struct(int j, bool y), real r)

может быть представлен так, как показано на рис. 7.4.

struct

int

i

struct

real

r

int

J

bool

y

Рис 7.4. Структура типа struct

Каждая ячейка имеет два (возможно пустых) указателя; вертикальный указатель используется в случае структурных, объединенных и процедурных видов.

С помощью рассмотренного метода представления видов компилятор может легко выполнять следующие операции:

  1. нахождение вида результата процедуры;

  2. выбор структуры поля;

  3. разыменование значения, т.е. замену адреса значением в адресе;

  4. векторизацию, т.е. построение линейной структуры для любого массива.

Контрольные вопросы

  1. Понятие прохода компилятора, необходимость использования нескольких проходов при компиляции.

  2. Назначение таблицы символов.

  3. Методы организации таблицы символов.

  4. Хеширование, разрешение конфликтов при хешировании.

  5. Сцепление элементов и бинарное дерево.

  6. Назначение таблицы видов.

  7. Способы организации таблицы видов.