- •Задание на курсовую работу
- •1. Описание входного языка.
- •1.2.3. Конструкции входного языка.
- •Если результат false, то происходит переход на оператор2, в противном случае выполняется оператор1 и происходит переход в конец оператора if-then-else. Лексический анализатор.
- •Представление основных операторов в полиз
- •Операционный символ { вычислить адрес }p, n, r
- •Операционный символ {сложить}p, q, r
- •Операционный символ {вычесть}p, q, r
- •Операционный символ { умножить }p, q, r
- •Операционный символ { делить }p, q, r
- •Операционный символ { общий знаменатель }p, q, r
- •Операционный символ { дизъюнкция }p, q, r
- •Операционный символ { конъюнкция }p, q, r
- •Операционный символ { отрицание }p, q
- •Операционный символ { меньше }p, q, r
- •Операционный символ { отношение }q1, q2, q3, r
- •Операционный символ { id }n
- •Операционный символ { init }n, V, r
- •Операционный символ { нач_ц }q1, q2, q3, m1, m2, r2
- •Операционный символ { кон_ц } q4, q5, m1, m2
- •Операционный символ { присвоить }p, q
- •Операционный символ { имя }q, r
- •Операционный символ { последовательность имён }p, q, r
- •Операционный символ {индекс}p, r
- •Операционный символ {массив}t, q, r
- •Операционный символ { последовательность индексов }p, q, r
- •Операционный символ {диапазон}p, q, r
- •Операционный символ {создать метку}p, r
- •Описание типа
- •Структуры данных дмп-процессора
- •Структура символа
- •Магазин дмп процессора
- •Часть 1 :
- •Часть 2 :
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Операционный символ {создать метку}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 | |