- •Задание на курсовую работу
- •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 :
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Структуры данных дмп-процессора
Общие структуры:
{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 |
Вывести содержимое стека на экран (для отладки) |
УПРАВЛЯЮЩАЯ ТАБЛИЦА LL1-АНАЛИЗАТОРА для подграмматики выражений
===============================================================
I I+ !- !* !/ !com!fra!int!sim!VAR!usi!( !) !irr!EpsI
===============================================================
I EXP I З ! З ! О ! О ! О ! З ! З ! З ! З ! З ! З ! О ! З ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I AE I З ! З ! О ! О ! О ! З ! З ! З ! З ! З ! З ! О ! З ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I ME I З ! З ! О ! О ! О ! З ! З ! З ! З ! З ! З ! О ! З ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I SAE I З ! З ! О ! О ! О ! О ! О ! О ! О ! О ! О ! З ! О ! З I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I SME I З ! З ! З ! З ! З ! О ! О ! О ! О ! О ! О ! З ! О ! З I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I + I В ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I - I О ! В ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I * I О ! О ! В ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I / I О ! О ! О ! В ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I com I О ! О ! О ! О ! В ! О ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I fra I О ! О ! О ! О ! О ! В ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I int I О ! О ! О ! О ! О ! О ! В ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I sim I О ! О ! О ! О ! О ! О ! О ! В ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I VAR I О ! О ! О ! О ! О ! О ! О ! О ! В ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I usi I О ! О ! О ! О ! О ! О ! О ! О ! О ! В ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I ( I О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! В ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I ) I О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! В ! О ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I irr I О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! В ! О I
I-----I---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I ┴ I О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! О ! Д I
===============================================================
УПРАВЛЯЮЩАЯ ТАБЛИЦА LL1-АНАЛИЗАТОРА для подграмматики логических выражений
===========================================
I Ior !( !) !not!< !> != !EXP!EpsI
===========================================
I LEX I О ! З ! О ! З ! О ! О ! О ! З ! О I
I-----I---+---+---+---+---+---+---+---+---I
I C I О ! З ! О ! З ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I SC I З ! О ! З ! О ! О ! О ! О ! О ! З I
I-----I---+---+---+---+---+---+---+---+---I
I REL I О ! О ! О ! О ! О ! О ! О ! З ! О I
I-----I---+---+---+---+---+---+---+---+---I
I LM I О ! З ! О ! З ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I SLM I З ! О ! З ! О ! О ! О ! О ! О ! З I
I-----I---+---+---+---+---+---+---+---+---I
I REO I О ! О ! О ! О ! З ! З ! З ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I or I В ! О ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I ( I О ! В ! О ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I ) I О ! О ! В ! О ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I not I О ! О ! О ! В ! О ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I < I О ! О ! О ! О ! В ! О ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I > I О ! О ! О ! О ! О ! В ! О ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I = I О ! О ! О ! О ! О ! О ! В ! О ! О I
I-----I---+---+---+---+---+---+---+---+---I
I EXP I О ! О ! О ! О ! О ! О ! О ! В ! О I
I-----I---+---+---+---+---+---+---+---+---I
I ┴ I О ! О ! О ! О ! О ! О ! О ! О ! Д I
===========================================
УПРАВЛЯЮЩАЯ ТАБЛИЦА LL1-АНАЛИЗАТОРА для подграмматики списка имён
===================
I Iid !, !EpsI
===================
I NL I З ! О ! О I
I-----I---+---+---I
I SN I О ! З ! З I
I-----I---+---+---I
I id I В ! О ! О I
I-----I---+---+---I
I , I О ! В ! О I
I-----I---+---+---I
I ┴ I О ! О ! Д I
===================
УПРАВЛЯЮЩАЯ ТАБЛИЦА LL1-АНАЛИЗАТОРА для подграмматики операторов