Алексей Молчанов - Системное программное обеспечение. Лабораторный практикум

Здесь есть возможность читать онлайн «Алексей Молчанов - Системное программное обеспечение. Лабораторный практикум» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2005, ISBN: 2005, Издательство: Array Издательство «Питер», Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Системное программное обеспечение. Лабораторный практикум: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Системное программное обеспечение. Лабораторный практикум»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.
Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой. Но она будет также полезна всем, чья деятельность так или иначе касается разработки программного обеспечения.

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Системное программное обеспечение. Лабораторный практикум», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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.

Приложение 4

Примеры входных и результирующих файлов для курсовой работы

Пример 1. Вычисление факториала

Листинг П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.

Пример 2. Иллюстрация работы функций оптимизации

Листинг П4.3. Входной файл

prog

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Системное программное обеспечение. Лабораторный практикум»

Представляем Вашему вниманию похожие книги на «Системное программное обеспечение. Лабораторный практикум» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Системное программное обеспечение. Лабораторный практикум»

Обсуждение, отзывы о книге «Системное программное обеспечение. Лабораторный практикум» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

Хатын 10 марта 2023 в 07:44
Я хочу читать книги
x