Читаем Системное программное обеспечение. Лабораторный практикум полностью

CheckDelSame.Checked {флаг удаления триад «SAME»},

True {флаг оптимизации «свертка объектного кода»},

True {флаг оптимизации исключения лишних операций},

CheckAsm.Checked {оптимизация команд ассемблера});

if iRes > ERR_LEX then {Если не было лексической ошибки,}

begin { заполняем список лексем }

GridLex.RowCount:= listLex.Count+1; { Количество строк }

iCnt:= listLex.Count-1;

for i:=0 to iCnt do

begin { Цикл по всем прочитанным лексемам }

{ Первая колонка – номер }

GridLex.Cells[0,i+1]:= IntToStr(i+1);

{ Вторая колонка – тип лексемы }

GridLex.Cells[1,i+1]:=

LexTypeName(listLex[i].LexType);

{ Третья колонка – значение лексемы }

GridLex.Cells[2,i+1]:= listLex[i].LexInfoStr;

end;

end;

if (iRes > ERR_SYNT) and (symbRes <> nil) then

{ Если не было синтаксической ошибки,}

begin { заполняем дерево синтаксического разбора }

{ Записываем данные в корень дерева }

nodeTree:= TreeSynt.Items.Add(nil,symbRes.SymbolStr);

MakeTree(nodeTree,symbRes); { Строим дерево от корня }

nodeTree.Expand(True); { Раскрываем все дерево }

{ Позиционируем указатель на корневой элемент }

TreeSynt.Selected:= nodeTree;

end;

if iRes > ERR_TRIAD then { Если не было семантической }

begin { ошибки, то компиляция успешно завершена }

MessageDlg('Компиляция успешно выполнена!

mtInformation,[mbOk],0);

PageControl1.ActivePageIndex:= 4;

end;

end;

procedure TCursovForm.MakeTree(

{ Процедура отображения синтаксического дерева }

nodeTree: TTreeNode; {ссылка на корневой элемент

отображаемой части дерева на экране}

symbSynt: TSymbol {ссылка на синтаксический символ,

связанный с корневым элементом этой части дерева});

var i,iCnt: integer; { переменные счетчиков }

nodeTmp: TTreeNode; { текущий узел дерева }

begin { Берем количество дочерних вершин для текущей }

iCnt:= symbSynt.Count-1;

for i:=0 to iCnt do

begin { Цикл по всем дочерним вершинам }

{ Добавляем к дереву на экране вершину

и запоминаем ссылку на нее }

nodeTmp:= TreeSynt.Items.AddChild(nodeTree,

symbSynt[i].SymbolStr);

{ Если эта вершина связана с нетерминальным символом,

рекурсивно вызываем процедуру построения дерева }

if symbSynt[i].SymbType = SYMB_SYNT then

MakeTree(nodeTmp,symbSynt[i]);

end;

end;

procedure TCursovForm.BtnExitClick(Sender: TObject);

{ Завершение работы с программой }

begin

Self.Close;

end;

end.

Описание ресурсов пользовательского интерфейса

Описание ресурсов пользовательского интерфейса можно найти в архиве, расположенном на веб-сайте издательства, в файле FormLab4.dfm в подкаталоге CURSOV.

<p>Приложение 4</p><p>Примеры входных и результирующих файлов для курсовой работы</p><p>Пример 1. Вычисление факториала</p>Листинг П4.1. Входной файл

prog

if ((InpVar > 31) or InpVar<0) CompileTest:= 0

else

if (InpVar=0) CompileTest:= 1

else

begin

i:= InpVar;

Fact:= 1;

while (i<>-1) do

begin

j:= I-1;

Sum:= Fact;

while (not (j=0)) do

begin

Sum:= Sum + Fact;

j:= j-(-1);

end;

Fact:= Sum;

i:= i – 1;

end;

CompileTest:= Fact;

end;

end.

Листинг П4.2. Результирующий код

program MyCurs;

var

Fact,i,j,Sum: integer;

function CompileTest(InpVar: integer): integer; stdcall;

begin

asm

pushad {запоминаем регистры}

mov eax,InpVar

cmp eax,31 { 1: > (InpVar, 31) }

setg al

and eax,1

mov ebx,eax

mov eax,InpVar

cmp eax,0 { 2: < (InpVar, 0) }

setl al

and eax,1

or eax,ebx { 3: or (^1, ^2) }

jnz @F3 { 4: if (^3, ^7) }

jmp @M7

@F3:

xor eax,eax

mov Result,eax { 5::= (CompileTest, 0) }

jmp @M31 { 6: jmp (1, ^31) }

@M7:

mov eax,InpVar

cmp eax,0 { 7: = (InpVar, 0) }

sete al

and eax,1

jnz @F7 { 8: if (^7, ^11) }

jmp @M11

@F7:

xor eax,eax

inc eax

mov Result,eax { 9::= (CompileTest, 1) }

jmp @M31 { 10: jmp (1, ^31) }

@M11:

mov eax,InpVar

mov i,eax { 11::= (i, InpVar) }

xor eax,eax

inc eax

mov Fact,eax { 12::= (Fact, 1) }

@M13:

mov eax,i

cmp eax,1 { 13: <> (i, 1) }

setne al

and eax,1

jnz @F13 { 14: if (^13, ^30) }

jmp @M30

@F13:

mov eax,i

dec eax { 15: – (i, 1) }

mov j,eax { 16::= (j, ^15) }

mov eax,Fact

mov Sum,eax { 17::= (Sum, Fact) }

@M18:

mov eax,j

cmp eax,0 { 18: = (j, 0) }

sete al

and eax,1

not eax { 19: not (^18, 0) }

and eax,1

jnz @F19 { 20: if (^19, ^26) }

jmp @M26

@F19:

mov eax,Sum

add eax,Fact { 21: + (Sum, Fact) }

mov Sum,eax { 22::= (Sum, ^21) }

mov eax,j

dec eax { 23: – (j, 1) }

mov j,eax { 24::= (j, ^23) }

jmp @M18 { 25: jmp (1, ^18) }

@M26:

mov eax,Sum

mov Fact,eax { 26::= (Fact, Sum) }

mov eax,i

dec eax { 27: – (i, 1) }

mov i,eax { 28::= (i, ^27) }

jmp @M13 { 29: jmp (1, ^13) }

@M30:

mov eax,Fact

mov Result,eax { 30::= (CompileTest, Fact) }

@M31:

nop { 31: nop (0, 0) }

popad {восстанавливаем регистры}

end;

end;

var InpVar: integer;

begin

readln(InpVar);

writeln(CompileTest(InpVar));

readln;

end.

<p>Пример 2. Иллюстрация работы функций оптимизации</p>Листинг П4.3. Входной файл

prog

D:= 0;

B:= 1;

C:= 1;

A:= C + InpVar;

D:= C+B+234;

C:= A + B + C;

D:= ((C) +(A+B)) – (InpVar + 1) + (A+B);

E:= (D – 22) – (A + B);

CompileTest:= 0;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных