Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования и методы трансляции.-1.pdf
Скачиваний:
14
Добавлен:
05.02.2023
Размер:
1.63 Mб
Скачать

116

же должна быть универсальной, т.е. должна позволять задавать любые пра-

вила для разбора структур/записей (и не только). Например, должны быть доступны изменения: ключевых слов, знаков пунктуации, правил разбора идентификаторов, а также добавление новых языковых конструкций и т.п.

Программа должна проанализировать имеющееся описание струк-

тур/записей и выдать результат проверки. Это может быть:

1.Сообщение о том, что грамматика во входном файле не является

LL(1)-грамматикой.

2.Сообщение о том, что описание корректное.

3.Сообщение о синтаксической ошибке. Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.

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

Кроме того, программа может быть написана на одном языке, но про-

верять правильность описания записей, структур и т.п. для другого языка.

3.4 ЛАБОРАТОРНАЯ РАБОТА №4

Тема задания – «Синтаксический анализ с использованием RL-

грамматик».

Цель – научиться применять на практике такие средства синтаксиче-

ского анализа, как контекстно-свободные грамматики типа LR(0) и LR(1).

Написанная программа должна читать входные данные и описание грамматики из текстовых файлов (например, имеющих имена «input.txt» и «grammar.txt» соответственно), и выдавать результат работы в текстовый файл (например, имеющий имя «output.txt»). Для ввода и вывода данных до-

117

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

лового ввода/вывода.

Вариант 1. На вход программы подается описание процедур и функ-

ций на выбранном языке (Pascal, C++), либо делегатов на языке C#, а также описание LR(0)- или LR(1)-грамматики. Необходимо проверить, является ли описание процедур/функций/делегатов корректным с точки зрения заданной грамматики и не содержатся ли в нем конфликты имен.

Таким образом, задание разбивается на две части:

1.Проверка синтаксиса.

2.Проверка семантики.

Семантика зависит от выбранного языка, и поэтому ее проверка жестко привязана к анализатору (в данном случае – Вашей программе). Грамматика же должна быть универсальной, т.е. должна позволять задавать любые пра-

вила для разбора процедур/функций/делегатов (и не только). Например,

должны быть доступны изменения: ключевых слов, знаков пунктуации, пра-

вил разбора идентификаторов, а также добавление новых языковых кон-

струкций и т.п.

Программа должна проанализировать имеющееся описание проце-

дур/функций/делегатов и выдать результат проверки. Это может быть:

1.Сообщение о том, что грамматика во входном файле не является

LR(0)- или LR(1)-грамматикой.

2.Сообщение о том, что описание корректное.

3.Сообщение о синтаксической ошибке. Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.

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

118

Кроме того, программа может быть написана на одном языке, но про-

верять правильность описания процедур, функций, делегатов и т.п. для дру-

гого языка.

Вариант 2. На вход программы подается описание структур (записей)

на выбранном языке (Pascal, C++, C#), а также описание LR(0)- или LR(1)-

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

Таким образом, задание разбивается на две части:

1.Проверка синтаксиса.

2.Проверка семантики.

Семантика зависит от выбранного языка, и поэтому ее проверка жестко привязана к анализатору (в данном случае – Вашей программе). Грамматика же должна быть универсальной, т.е. должна позволять задавать любые пра-

вила для разбора структур/записей (и не только). Например, должны быть доступны изменения: ключевых слов, знаков пунктуации, правил разбора идентификаторов, а также добавление новых языковых конструкций и т.п.

Программа должна проанализировать имеющееся описание струк-

тур/записей и выдать результат проверки. Это может быть:

1.Сообщение о том, что грамматика во входном файле не является

LR(0)- или LR(1)-грамматикой.

2.Сообщение о том, что описание корректное.

3.Сообщение о синтаксической ошибке. Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.

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

119

Кроме того, программа может быть написана на одном языке, но про-

верять правильность описания записей, структур и т.п. для другого языка.