Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
72
Добавлен:
27.03.2016
Размер:
3.38 Mб
Скачать

Текст програми розпізнавача

Крім перерахованих вище модулів необхідний ще модуль, що забезпечує інтерфейс з користувачем. Цей модуль (FornLab3) реалізує графічне вікно TLab3Form на основі класу TForm бібліотеки VCL і включає дві складові:

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

  • файл опису ресурсів призначеного для користувача інтерфейсу (файл FormLab3.dfm)

Модуль FormLab3 побудований на основі модуля FormLab2, який використовувався для реалізації інтерфейсу з користувачем в лабораторній роботі № 2. Він містить всі дані, керуючі елементи і інтерфейсні елементи , які були використані в лабораторній роботі № 2. Оскільки першим етапом лабораторної роботи № 3 є лексичний аналіз, який виконується модулями, створеними для лабораторної роботи № 2.

Окрім даних, використовуваних для виконання лексичного аналізу так, як це було описано в лабораторній роботі № 2, модуль містить поле synbStack, яке є синтаксичним стеком, використовуваним для виконання синтаксичного аналізу. Цей стек ініціалізувався при створенні інтерфейсної форми і знищується при її закритті. Він також очищається всякий раз, коли запускаються процедури лексичного і синтаксичного аналізу.

Окрім органів управління, використаних в лабораторній роботі № 2, інтерфейсна форма, описана в модулі FormLab3 , містить органи керування для синтаксичного аналізатора лабораторної роботи № 3:

  • в багатосторінковій вкладці (PageControll) з’явилася нова закладка (SheetSynt) з назвою «Синтаксис»;

  • на закладці SheetSynt розташований інтерфейсний елемент для проглядання ієрархічних структур (TreeSynt типу TTreeView).

Зовнішній вигляд нової закладки інтерфейсної форми TLab3Form приведений на мал 3.3.

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

Після читання файлу виконується лексичний аналіз, як це було описано в лабораторній роботі № 2.

Якщо лексичний аналіз виконаний успішно, то в список лексем listLex додається інформаційна лексема, що позначає кінець рядка, після чого викликається функція виконання синтаксичного аналізу BuildSyntList на вхід якої подаються список лексем (ListLex) і синтаксичний стек (symbStack). Результат виконання функції запам'ятовується в тимчасовій змінній symbRes.

Якщо змінна symbRes містить посилання на лексему, це означає, що синтаксичний аналіз виконаний з помилками і ця лексема якраз указує на те місце, де була виявлена помилка. Тоді список рядків вхідного файлу позиціонується на вказане місце помилки, а користувачеві видається повідомлення про помилку. Інакше, якщо помилок не виявлено, змінна symbRes указує на корінь побудованого синтаксичного дерева. Тоді інтерфейсний елемент TreeSynt записується посилання на корінь синтаксичного дерева, після чого все дерево відображається на екрані за допомогою функції MakeTree.

Функція MakeTree забезпечує рекурсивне відображення синтаксичного дерева в інтерфейсному елементі типу TTreeVіew Елемент типу TTrееVіew є стандартним інтерфейсним елементом в ОС типу Windows для відображення ієрархічних структур (наприклад він використовується для відображення файлової структури).

Мал. 3.3. Зовнішній вигляд третьої закладки інтерфейсної форми для лабораторної роботи № 3

Повний текст програмного коду модуля інтерфейсу з користувачем та опис ресурсів призначеного для користувача інтерфейсу знаходяться в архіві, що знаходиться на веб-сайті видавництва, в файлах FormLab3.pas і Formlab3.dtm відповідно.

Повний текст всіх програмних модулів, що реалізовують розглянутий приклад для лабораторної роботи № 3, можна знайти в архіві, що знаходиться на веб-сайті видавництва, в підкаталогах LABS та COMMON (у підкаталог COMMON винесені ті програмні модулі, початковий текст яких не залежить від вхідної мови і завдання по лабораторній роботі). Головним файлом проекту є файл LAB3.DPR у підкаталозі LAB6. Крім того, текст модуля SyntSymb приведений в лістингу П3.7 в додатку 3.