
- •Теория языков программирования и методы трасляции
- •1. Цель работы
- •2. Основные понятия и термины
- •3. Описание и ввод грамматики
- •Проверка и трансляция набранной грамматики
- •Непроизводящие и недостижимые символы
- •Проверка синтаксиса грамматики
- •Трансляция грамматики и запуск g&a
- •Разбор цепочек по созданной грамматике
- •Подготовка к лабораторной работе
- •Порядок выполнения работы
- •Содержание отчета
- •Защита лабораторной работы
- •Контрольные вопросы
Какую работу нужно написать?
Разбор цепочек по созданной грамматике
Окно G&A (рис. 6) состоит из двух главных полей: правое поле – дерево разбора, левое – разбираемая цепочка.
Цепочку можно вводить в левое окно, используя клавиатуру, или открыть какой-нибудь текстовый файл, содержащий ее. Для загрузки цепочки из файла используется пункт меню Файл Открыть.
При вводе цепочки в леве окно в правом производится ее разбор по созданной грамматике и построение дерева. Если цепочка не соответствует грамматике, в правом окне появляется надпись «цепочка не распознана» (рис.6).
Словарь нетерминальных символов
После ввода цепочки, которая соответствует вашей грамматике, в правом окне можно посмотреть дерево разбора и конкретные нетерминальные символы, соответствующие конструкциям грамматики. При выделении некоторого элемента дерева разбора в правой панели слева выделяется соответствующая ему часть цепочки.
Рассмотрим пример разбора строки, приведенной в листинге 2 (разбор производится по грамматике, представленной в листинге 1).
Листинг 2. Строка для разбора.
if(x>=128)
if(z<4)
После ввода этой строки в левую панель справа будет построено дерево разбора. На верхнем уровне дерева (рис. 7) находится нетерминальный символ program, соответствующий всей рассматриваемой цепочке. Он представляет собой символ part_prog (см. строку [1] в листинге 1). В свою очередь, part_prog можно разложить на part (соответствует первой конструкции if в рассматриваемой цепочке) и снова символа part_prog (см. строку [2] в листинге 1).
Верхний уровень дерева разбора
В тоже время конструкция part (рис.8) представлена в данном выражении нетерминальным символом if (см. строку [6]), которая, в свою очередь, содержит в себе следующие нетерминальные символы (см. строку [8] в листинге 1):
Некоторая литера, участвующая в сравнении (liter).
Один из символов сравнения – логическая операция (logic).
Число, с которым производиться сравнение (number).
Разбор конструкции if
Символы liter и logic представляют собой последовательность терминальных символов (строки [47] и [11] соответственно), а number - последовательность цифр, которые раскладываются по правилам [9]-[10] из листинга 1 (рис. 9).
Разбор цепочки
Подготовка к лабораторной работе
В процессе подготовки к лабораторной работе студент должен изучить соответствующие главы курса, после чего необходимо построить для заданного языка грамматику. Для этого он должен:
Выписать несколько примеров цепочек, принадлежащих заданному языку.
Проанализировать структуру выделенных цепочек – выделить в них начало, конец, повторяющиеся части и символы.
Выделить простейшие структуры, обозначая структурные части с помощью вводимых нетерминальных символов.
Для каждой из выделенных структурных частей построить правила грамматики.
Объединить все правила в грамматику.
Порядок выполнения работы
В процессе выполнения лабораторной работы студенту необходимо:
Используя текстовый редактор создать файл с грамматикой.
Проверить грамматику на соответствие формальным правилам описания и транслировать ее.
Запустить G&A и выполнить разборы цепочек. Определить, принадлежат ли выбранные цепочки языку. Порожденные цепочки записать в файл, используя команду Сохранить.
Если получены цепочки, которые не принадлежат языку, то необходимо изменить грамматику и повторить вывод цепочек.
По окончании лабораторной работы файлы с грамматикой и выведенными цепочками необходимо сохранить в архиве.