Вариант № 4. На вход программы подаются два текстовых
файла (с именами GRAMMAR.TXT и INPUT.TXT). Первый со-
держит LR(1)-грамматику, второй — описание структуры (запи-
си) на выбранном языке (Pascal, C++, C#). Необходимо прове-
рить, является ли описание структуры корректным с точки зрения
заданной грамматики и не содержатся ли в нем конфликты имен.
Таким образом, задание разбивается на две части:
1. Проверка синтаксиса.
2. Проверка семантики.
Семантика зависит от выбранного языка, и поэтому ее про-
верка жестко привязана к анализатору (в данном случае — Вашей
программе). Грамматика же должна быть универсальной, т.е.
должна позволять задавать любые правила для разбора структуры
(и не только структуры). Например, должны быть доступны из-
менения: ключевых слов, знаков пунктуации, правил разбора
идентификаторов, а также добавление новых языковых конст-
рукций и т.п.
Программа должна проанализировать имеющееся в тексто-
вом файле описание структуры и выдать (в текстовый файл
OUTPUT.TXT) результат проверки. Это может быть:
1. Сообщение о том, что грамматика во входном файле не
является LR(1)-грамматикой.
2. Сообщение о том, что описание корректное.
3. Сообщение о синтаксической ошибке. Указывать тип
ошибки не обязательно, требуется только указать строку
и позицию в строке входного файла, где наблюдается
ошибка. Достаточно находить только первую ошибку в
описании.
4. Сообщение о конфликте имен. В этом случае на выходе
программы необходимо указать конфликтующее имя, а
также строку и позицию в строке, где произошел кон-
фликт.