Книга: Системное программное обеспечение. Лабораторный практикум

Текст программы генератора списка триад

Текст программы генератора списка триад

Кроме перечисленных модулей необходим еще модуль, обеспечивающий интерфейс с пользователем. Этот модуль (FormLab4) реализует графическое окно TLab4Form на основе класса TForm библиотеки VCL и включает в себя две составляющие:

• файл программного кода (файл FormLab4.pas);

• файл описания ресурсов пользовательского интерфейса (файл FormLab4.dfm).

Модуль FormLab4 построен на основе модуля FormLab3, который использовался для реализации интерфейса с пользователем в лабораторной работе № 3. Он содержит все данные, управляющие и интерфейсные элементы, которые были использованы в лабораторных работах № 2 и 3. Такой подход оправдан, поскольку первым этапом лабораторной работы № 4 является лексический анализ, который выполняется модулями, созданными для лабораторной работы № 2, а вторым этапом – синтаксический анализ, который выполняется модулями, созданными для лабораторной работы № 3.

Кроме данных, используемых для выполнения лексического и синтаксического анализа так, как это было описано в лабораторных работах № 2 и 3, модуль содержит поле listTriad, которое представляет собой список триад. Этот список инициализируется при создании интерфейсной формы и уничтожается при ее закрытии. Он также очищается всякий раз, когда запускаются процедуры лексического и синтаксического анализа.

Кроме органов управления, использованных в лабораторной работе № 3, интерфейсная форма, описанная в модуле FormLab4, содержит органы управления для генератора списка триад лабораторной работы № 4:

• в многостраничной вкладке (PageControll) появилась новая закладка (Sheet-Triad) под названием «Триады»;

• на закладке SheetTriad расположены интерфейсные элементы для вывода и просмотра списков триад (группа с заголовком и список строк для отображения каждого списка триад):

GroupTriadAll и ListTriadAll – для отображения полного списка триад, построенного до применения алгоритмов оптимизации;

GroupTriadConst и ListTriadConst – для отображения списка триад, построенного после оптимизации методом свертки объектного кода;

GroupTriadSame и ListTriadSame – для отображения списка триад, построенного после оптимизации методом исключения лишних операций.

• на той же закладке SheetTriad расположены два сплиттера для управления размерами списков триад;

• на первой закладке SheetFi 1 е («Исходный файл») появились два дополнительных органа управления – флажки с двумя состояниями («пусто» или «отмечено»):

CheckDelC – при установке этого флажка триады типа С удаляются из списка триад после выполнения оптимизации методом свертки объектного кода;

CheckDelSame – при установке этого флажка триады типа same удаляются из списка триад после выполнения оптимизации методом исключения лишних операций.

Внешний вид новой закладки интерфейсной формы TLab4Form приведен на рис. 4.3.


Рис. 4.3. Внешний вид четвертой закладки интерфейсной формы для лабораторной работы № 4.

Чтение содержимого входного файла организовано точно так же, как в лабораторной работе № 2.

После чтения файла выполняется лексический анализ, как это было описано в лабораторной работе № 2, а затем, при успешном выполнении лексического анализа, синтаксический анализ, как это было описано в лабораторной работе № 3.

Если синтаксический анализ выполнен успешно, полученная в результате его выполнения переменная symbRes указывает на корень построенного синтаксического дерева. Тогда, после того как синтаксическое дерево отобразится на экране с помощью функции MakeTree, вызывается функция построения списка триад по синтаксическому дереву MakeTriaD1ist (из модуля TrdMake). Список триад запоминается в список listTriad, а результат выполнения функции – во временную переменную lexTmp.

Если переменная lexTmp после построения списка триад содержит непустую ссылку на лексему, это значит, что исходная программа содержит семантическую ошибку. Лексема, на которую указывает lexTmp, определяет место, где обнаружена ошибка. В этом случае список строк позиционируется на место ошибки и пользователю выдается соответствующее сообщение.

Иначе, если переменная lexTmp после построения списка триад содержит пустую ссылку (nil), это значит, что построение списка триад выполнено без ошибок, и список listTriad содержит все построенные триады в порядке их следования. Список триад отображается на экране в списке строк ListTriadAll, после чего выполняется оптимизация методом свертки объектного кода – вызывается процедура OptimizeConst. Если установлен флажок CheckDel_C, то после оптимизации методом свертки объектного кода из списка триад удаляются триады типа C (вызывается функция DelTriadTypes с параметром TRD_CONST), после чего список триад отображается в списке строк ListTriadConst. Затем выполняется оптимизация методом исключения лишних операций – вызывается процедура OptimizeSame. Если установлен флажок CheckDelSame, то после оптимизации методом исключения лишних операций из списка триад удаляются триады типа same (вызывается функция DelTriadTypes с параметром TRD_SAME), после чего список триад отображается в списке строк ListTriadSame.

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

Полный текст всех программных модулей, реализующих рассмотренный пример для лабораторной работы № 4, можно найти в архиве, располагающемся на вебсайте издательства, в подкаталогах LABS и COMMON (в подкаталог COMMON вынесены те программные модули, исходный текст которых не зависит от входного языка и задания по лабораторной работе). Главным файлом проекта является файл LAB4.DPR в подкаталоге LABS. Кроме того, текст модуля Triads приведен в листинге П3.10, а текст модуля TrdOpt – в листинге П3.11 в приложении 3.

Оглавление книги


Генерация: 0.050. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз