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

Структуры данных дмп-процессора

Общие структуры:

{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-АНАЛИЗАТОРА для подграмматики операторов