- •Введение
- •2.1.2. Основная программа анализатора
- •2.1.3. Вспомогательные процедуры
- •2.1.4. Распознающие процедуры
- •2.2. Умножение многочленов
- •2.2.1. Постановка задачи
- •2.2.2. Умножение и вывод
- •2.2.3. Транслятор многочленов
- •2.2.4. Обработка ошибок при трансляции
- •2.3. Табличный ll(1) – анализатор
- •2.4. Табличный транслятор многочленов
- •2.5. Реализация стека
- •2.6. Ll(1) – драйвер
- •3. Порядок выполнения работы
- •Варианты заданий
- •4. Контрольные вопросы
- •Список литературы
- •450000, Уфа - центр, ул. К. Маркса, 12
3. Порядок выполнения работы
Построить синтаксические диаграммы для заданной конструкции.
Запрограммировать синтаксический анализатор методом рекурсивного спуска. Анализатор должен либо сообщать о том, что конструкция записана верно, либо выдавать сообщение об ошибке с указанием места ее обнаружения.
Построить синтаксическую таблицу и реализовать табличный LL(1) – анализатор.
Дополнить анализаторы семантическими процедурами, выполняющими содержательную обработку.
Варианты заданий
Арифметическое выражение. Элементами выражения являются имена переменных, вещественные числа, функции (названия функций произвольные), знаки арифметических операций, круглые скобки. Вычислить выражение.
Сумма – последовательность натуральных чисел и имен, разделенных знаками плюс и минус. Возможен знак перед первым слагаемым. Считая, что имена обозначают неизвестные запросить у пользователя их значения и вычислить сумму. Значение одной и той же переменной, встречающейся в выражении больше одного раза, должно запрашиваться только один раз.
Сумма вещественных чисел. Вычислить сумму.
Квадратное уравнение с целыми коэффициентами. Найти корни уравнения.
Сумма обыкновенных дробей. Вычислить сумму.
Произведение вида , где - целые числа. Программа запрашивает значение X и вычисляет произведение.
Мультипликативная функция переменных: , где - целая константа; - имена. Программа запрашивает вещественные значения входящих в выражение переменных и вычисляет значение функции. Значение каждой переменной вводится лишь однажды.
Сумма произведений – последовательность слагаемых, представляющих собой произведение нескольких операндов. Операнды – имена. Программа запрашивает вещественные значения, входящих в выражение переменных и вычисляет значение суммы. Значение каждой переменной вводится лишь однажды.
Последовательность, записанных через запятую элементов двухмерных массивов. Индексы – натуральные числа. Считается, что все массивы имеют размер 10*10, программа проверяет корректность задания индексов и формирует текст программы на Паскале, которая заполняет все массивы, имена которых встретились в выражении, случайными целыми числами; элементам, встретившимся в выражении должны быть присвоены нулевые значения. Сгенерированная программа должна распечатывать содержимое всех этих массивов.
Числовой ряд вида , где - натуральные числа. Вычислить точную сумму ряда. Результат представить в виде обыкновенной дроби.
Отношение Операнд Операнд, где Операнд – целое или имя; - знак отношения (<, >, =, <>, >=, <=). Полагая, что имена – это идентификаторы целочисленных переменных, программа запрашивает их значения и проверяет истинность отношения.
Бесскобочное арифметическое выражение с функциями. Все операнды – однобуквенные имена. Аргументы функций записываются в скобках. Спрашивая у пользователя вещественное значение каждой переменной и значение каждой функции при заданном числовом значении аргумента, программа – интерпретатор вычисляет выражение.