- •Задание на курсовую работу
- •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-анализатора для подграмматики переменных
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Структуры данных дмп-процессора
Общие структуры:
{Pointers}
P_attribute_link = ^T_attribute_link;
P_attribute = ^T_attribute;
P_dmp_stack_obj = ^T_dmp_stack_obj;
P_dmp_stack = ^T_dmp_stack;
Структура данных для атрибута:
{T_attribute_link}
T_attribute_link =
record
attr: P_attribute; {Attribute ptr}
next: P_attribute_link; {Next link ptr}
end;
{T_attribute}
T_attribute =
object
idx: integer; {Attribute index}
attr_value: integer; {Attribute value}
attr_type: integer {Attribute type}
link: P_attribute_link; {Links for that attribute}
next: P_attribute; {Next attribute ptr}
{}
constructor init; {Init attribute obj}
procedure clear; {Clear attribute obj}
function add_link: P_attribute_link; {Add link}
procedure add_link_to( attr: P_attribute );
procedure copy_links_from( attr: P_attribute );
end;
Имя поля |
Описание |
idx |
Номер атрибута |
attr_value |
Значение атрибута |
attr_type |
Тип атрибута |
link |
Указатель на начало списка атрибутов (копирующее правило) |
next |
Указатель на следующий атрибут |
constructor init |
Инициализация, обнуление указателей |
procedure clear |
Очистка памяти структуры и ее подструктур |
function add_link |
Добавить атрибуту ссылку и вернуть указатель на ее структуру |
procedure add_link_to |
Добавить атрибуту ссылку на другой атрибут |
procedure copy_links_from |
Скопировать список ссылок от другого атрибута |
Структура символа
Каждый символ грамматики имеет свой уникальный номер. Элементами стека являются объекты следующей структуры:
{T_dmp_stack_obj}
T_dmp_stack_obj =
object
state: E_alphabet; {Stack object index}
attr: P_attribute; {Attributes for object}
{}
next: P_dmp_stack_obj; {Next object ptr}
{}
constructor init; {Init object}
procedure clear; {Clear object}
function add_attr: P_attribute; {Add attribute to object}
function get_attr( i: integer ): P_attribute; {Get attribute by number}
procedure push_data_down;
end;
Имя поля |
Описание |
state |
Конкретный символ из полного алфавита |
attr |
Указатель на список атрибутов |
next |
Указатель на следующий элемент стека |
constructor init |
Инициализация, обнуление указателей |
procedure clear |
Очистка памяти структуры и ее подструктур |
function add_attr |
Добавить атрибут и вернуть указатель на его структуру |
function get_attr |
Получить атрибут по номеру |
procedure push_data_down |
|
Магазин дмп процессора
Магазин ДМП-процессора представляется списком элементов типа T_dmp_stack_obj. Помещение объекта в магазин подразумевает собой добавление его в список в качестве первого элемента. Изначально в списке содержится маркер дна магазина.
{T_dmp_stack}
T_dmp_stack =
object
first: P_dmp_stack_obj; {Root of list}
{}
constructor init; {Init of stack}
procedure clear; {Clear of stack}
function add_top: P_dmp_stack_obj; {Add one top element}
procedure del_top; {Del one top element}
{}
function add_top_symbol( t: E_alphabet; attr_count: integer ): P_dmp_stack_obj;
function step_over: P_dmp_stack_obj;
{}
procedure dump;
end;
Имя поля |
Описание |
first |
Указатель на первый элемент стека |
constructor init |
Инициализация, обнуление указателей |
procedure clear |
Очистка памяти структуры и ее подструктур |
function add_top |
Добавить элемент в верхушку стека и вернуть указатель на него |
procedure del_top |
Удалить верхний элемент и очистить его память |
function add_top_symbol |
Добавить в верхушку стека заданный символ алфавита с заданным количеством атрибутов |
function step_over |
«Перешагнуть» через верхушку стека, вернуть указатель на бывшую верхушку, элемент пока не удалять |
procedure dump |
Вывести содержимое стека на экран (для отладки) |