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

1.5.4. Лабораторная работа " Синтаксический анализатор "

Составить программу, проверяющую синтаксическую правильность заданной конструкции языка Паскаль.

Рассмотрим методику поэтапного выполнения лабораторной работы.

Методические указания.

Этап 1. Разработка спецификации задачи.

  1. Задача. Провести синтаксический контроль конструкции

<описание процедуры>.

2. Входные данные.

 лит  ch - входной символ

ch

f

<ch><ch>...<ch>

файл

3. Выходные данные.

Выходная форма:

 Ошибок нет

 <Реакция на аномалии>

4. Метод. Выбор подмножества L2 языка Паскаль .

1) В синтаксической таблице БНФ выбрать начальный символ языка L2 ( на-

пример, <описание процедуры>) и порождающее правило:

<описание процедуры> ::= <заголовок>;<блок>.

2) Если порождающее правило громоздкое, то часть логических ветвей можно

отбросить (по указанию преподавателя).

3) Для каждого нетерминального символа из правой части правила

(<заголовок>, <блок>) записать порождающее правило.

4) Повторять п.3 для каждого нового правила до выполнения следующих ус -ловий:

- порождающее правило в правой части содержит только терминальные

символы языка Паскаль;

- если сложность программы С = m*n >30, где m - число порождающих правил, а n - общее число логических ветвей в правилах, то в целях ограничения программы использовать заглушки. Например, в рассматриваемой задаче во втором правиле оставляется ветвь «процедура без параметров» (отбрасывается ветвь описа- ния процедуры с параметрами), в третьем правиле при описании символа <блок> оставляем только «составной оператор» (отбрасывается раздел описаний) и <последовательность операторов> заменяется на <последовательность символов>.

Итак, метод для рассматриваемой задачи будет описан в виде синтаксических

правил (БНФ):

1) <описание процедуры> ::= <заголовок>;<блок>.

2) <заголовок> ::= procedure <имя>

3) <блок> ::= begin<последовательность операторов>end

4) <имя> ::= <буква><имя><буква><имя><цифра>

5) <буква> ::= ABDDEFGHIJKLMNOPQRSTUVWXYZ

6) <цифра> ::= 0123456789

7) <последовательность операторов> ::= <символ>

<последовательность операторов><символ>

8) <символ> ::= <любой символ кроме пробела>

5. Аномалии.

Ограничено использование пробелов:

- последовательность символов должна отделяться одним пробелом от оператор-

ных скобок begin, end.

- имени процедуры должен предшествовать один пробел.

Так как разбор каждого нетерминального символа представлен в виде процедуры, то анализ каждой конструкции и сообщения об ошибках локализованы в этой процедуре.

  1. Функциональные тесты

Исходные данные Ожидаемые результаты

procedure A12;begin p end; Ошибок нет

procedure A12;beginsl end Ошибка в последовательности операторов

proсedure A12;begin kd end; Ошибка в слове "procedure"

procedure 1a3;begin ad end; Имя начинается не с буквы

procedure A*4; Ошибка в имени

procedure D5;begin rty ; Нет слова "end"

Этап 2. Проектирование и отладка интерфейса программы.

На этом этапе описываются входные и выходные данные программы и разрабатывается интерфейс пользователя в виде программной оболочки, обеспечивающей удобный диалог для тестирования программы при различных исходных данных, размещенных в разных файлах.

Получаем сегмент С1 - корневой сегмент td-графа - структурной схемы программы.

В этом сегменте имеется только одна абстракция <Анализ описания процедуры>. Для отладки программы абстракцию раскрываем как заглушку ch := ‘;’ , оставляя абстракцию в виде комментария.

Этап 3. Синтаксический анализ первого правила.

Абстракцию раскрываем в виде процедуры без параметров. Она содержит две абстракции, соответствующие двум нетерминальным символам правой части правила 1.

Для отладки программы с этой процедурой надо в программе Analiz_Proced абстракцию <Анализ описания процедуры> заменить заглушку оператором процедуры Declare_Proced.

В процедуре Declare_Proced (Сегмент С2) абстракцию <Анализ заголовка> раскрываем в виде заглушки ch := ‘;’ , а <Анализ блока> в виде пустого оператора, оставляя абстракции в виде комментариев.

Этап 4. Переход от первого правила к следующим.

Раскрываем абстракцию <Анализ заголовка> и <Анализ блока> в виде

сегментов С3.1 и С3.2 (процедур без параметров Zagolovok и Block) в соответствии с правилами 2) и 3).

Е

procedure;

сли в процедуреZagolovok абстракцию <Анализ имени процедуры> заменить пустым оператором, то можно провести отладку теста

Этап 5. Выбор дальнейшего пути проектирования.

Соседние файлы в папке METOD2