
- •Задание на курсовую работу
- •1. Описание входного языка.
- •1.2.3. Конструкции входного языка.
- •Оператор итерационного цикла for-to-do и for-downto-do.
- •Оператор безусловного перехода goto.
- •Условный опеатор if-then-else
- •Лексический анализатор.
- •Представление основных операторов в полиз
- •Разобьем исходную грамматику на подграмматики:
- •Подграмматика для списка имён:
- •Подграмматика для типов:
- •Основная подграмматика:
- •Описание перевода (атг) каждой конструкции входного языка
- •Подграмматика для переменной:
- •Операционный символ { вычислить адрес }p, n, r
- •Операционный символ { числитель }p, t
- •Операционный символ {сложить}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
- •Операционный символ {индекс}p, r
- •Операционный символ {создать метку}p, r
- •Описание типа
- •Структуры данных дмп-процессора
- •Структура символа
- •Магазин дмп процессора
- •Управляющая таблица ll1-анализатора для подграмматики выражений
- •Управляющая таблица ll1-анализатора для подграмматики логических выражений
- •Управляющая таблица ll1-анализатора для подграмматики списка имён
- •Управляющая таблица ll1-анализатора для подграмматики операторов
- •Управляющая таблица ll1-анализатора для основной подграмматики
- •Управляющая таблица ll1-анализатора для подграмматики типов
- •Управляющая таблица ll1-анализатора для подграмматики переменных
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Описание типа
Данная структура используется для хранения информации об описании некоторого типа
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 | |