Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП(РЯП)1.doc
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
1.87 Mб
Скачать

Операционный символ {создать метку}p, r

Сопоставляет имя метки p с номером позиции в таблице меток.

Операционный символ {создать константу}p, q, r

Записывает имя p и значение q константы в таблицу констант

Операционный символ {создать тип}p, q, r

Записывает имя p и значение q типа в таблицу типов по адресу r

Операционный символ {создать переменную}p, q, r

Записывает имена переменных p и тип q в таблицу идентификаторов по адресу r

Объявление

Структура, используемая для связи некоторого идентификатора с определённым типом данных.

type

E_var_state = ( VS_CONST, VS_VAR, VS_SYSTEM ); // VS_System - for programs and units

//--- T_var_desc

P_var_desc = ^T_var_desc;

T_var_desc =

record

name: string;

state: E_var_state;

type_desc: P_type_desc;

{}

data: ^smallint;

next: P_var_desc;

end;

Имя поля

Описание

name

Идентификатор (его имя)

state

Классифицирует состояние идентификатора: константа, переменная, системный идентификатор

type_desc

Указатель на структуру с описанием типа

data

Область памяти для данных

next

Указатель на следующий элемент в списке

Таблица объявлений

Последовательность объявлений представлена в виде списка:

T_var_table =

object

first: P_var_desc;

//

constructor init;

procedure clear;

function find( vn: string ): P_var_desc;

function add: P_var_desc;

function declare_const( vn: string; type_desc: P_type_desc ): P_var_desc;

function declare_var( vn: string; type_desc: P_type_desc ): P_var_desc;

function declare_system( vn: string ): P_var_desc;

//

procedure file_dump( fn: string );

end;

Имя поля

Описание

first

Указатель на первый элемент списка

constructor init

Инициализация, обнуление указателей

procedure clear

Очистка памяти из под структуры и ее дочерних подструктур

function find

Найти переменную по имени и вернуть на нее указатель

function add

Добавить новую ячейку и вернуть на нее указатель

function declare_const

Объявить константу с указанным именем и типом и вернуть на нее указатель

function declare_var

Объявить переменную с указанным именем и типом и вернуть на нее указатель

function declare_system

Объявить системную переменную и вернуть на нее указатель

procedure file_dump

Вывести содержимое таблицы в указанный файл

Описание типа

Данная структура используется для хранения информации об описании некоторого типа

type

E_type_state = ( TYS_NAMED, TYS_GENERIC );

E_type_cons = ( TC_ERR, TC_INTEGER, TC_RATIONAL, TC_ALIAS, TC_RANGE, TC_ENUM, TC_ARRAY );

//--- P_type_desc

P_type_desc = ^T_type_desc;

//--- T_type_desc

T_type_desc =

object

name: string;

//

type_state: E_type_state;

type_cons: E_type_cons;

//

ordinal: boolean;

//

alias_type,

index_type,

base_type: P_type_desc;

//

left_bound,

right_bound,

variants,

size: integer;

//

next: P_type_desc;

//

out_idx: integer;

//

procedure calc_sizes;

end;

Имя поля

Описание

name

Идентификатор типа

type_state

Классифицирует тип

TYS_NAMED

Для создания поименованных типов

TYS_GENERIC

Для создания временных типов

type_cons

TC_ERR

Ошибка

TC_INTEGER

Целый тип (integer)

TC_RATIONAL

Рациональный тип (rational)

TC_ALIAS

Унаследованный тип

TC_RANGE

Тип диапазон

TC_ENUM

Перечислимый тип

TC_ARRAY

Тип массив

ordinal

Определяет перечислим ли тип

alias_type

Если (cons = TC_ALIAS), то содержит ссылку на тип-родитель

index_type

Если (cons = TC_ARRAY), то содержит ссылку на индекс

base_type

Если (cons = TC_ARRAY|TC_RANGE), то содержит ссылку на тип базы массива

left_bound

Если тип перечислим, то определяет левую границу диапазона

right_bound

Если тип перечислим, то определяет правую границу диапазона

variants

Если тип перечислим, то определяет мощность диапазона

size

Определяет размер типа в байтах

out_idx

Определяет номер типа в таблице типов

procedure calc_size

Вычисляет размерность типа, основываясь на древовидном представлении типа

Таблица описаний типов

Данная структура используется для хранения информации об описании некоторого типа.

//--- T_type_table

T_type_table =

object

first: P_type_desc;

//

constructor init;

procedure clear;

function add: P_type_desc;

procedure add_internal_types;

function find( tn: string ): P_type_desc;

//

procedure file_dump( fn: string );

end

Имя поля

Описание

first

Указатель на первый элемент списка

constructor init

Инициализация, обнуление указателей, добавление встроенных типов

procedure clear

Очистка памяти структуры и дочерних подструктур

function add

Добавить ячейку и вернуть указатель

procedure add_internal_types

Добавить встроенные типы 'integer', ‘rational’ и ‘boolean’

function find

Найти тип по имени и вернуть указатель

procedure file_dump

Вывести содержимое таблицы в память

Представляется списком, каждый элемент которого – описание типа. На момент запуска ДМП процессора список состоит из следующих элементов:

3

1

boolean NAMED ENUM Ord Nil Nil Nil 0 1 2 4

2

rational NAMED RAT N-Ord Nil Nil Nil 0 0 N-Ord 8

3

integer NAMED INT Ord Nil Nil Nil -32768 32767 65536 4

-------------------------------------------------------------------------------

Name |Type |Cons |Ord? |Alias|Idx |Base|LeftB |RightB |Variant|Size |