Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 12:

Проект "Компилятор формул"

Задача 12.10. Модифицируйте текст эталонного проекта "Стековый компилятор формул" так, чтобы:

a) формулы, содержащие унарные операции sin и cos, правильно компилировались на язык стекового калькулятора, расширенный операциями S и C, которые вычисляют синус и косинус элемента, расположенного на вершине стека, размещая результат там же;

b) формулы, содержащие операцию возведения в степень ^, которая правоассоциативна и имеет максимальный приоритет, правильно компилировались на язык стекового калькулятора, расширенный операцией ^ ;

c) формулы, содержащие операцию возведения в степень **, которая правоассоциативна и имеет максимальный приоритет, правильно компилировались на язык стекового калькулятора, расширенный операцией ^ ;

d) для коммутативных операций аргументы в программе для стекового компилятора появлялись в алфавитном порядке;

e) формулы, содержащие квадратные скобки [], обозначающие удвоение выражения, в них стоящего, компилировались на язык стекового калькулятора, расширенный операцией D (duplicate), которая извлекает верхний элемент из стека и записывает его обратно в стек дважды ;

f) формулы, содержащие фигурные скобки {}, обозначающие возведение в квадрат выражения, в них стоящего, компилировались на язык стекового калькулятора, расширенный операцией D (duplicate), которая извлекает верхний элемент из стека и записывает его обратно в стек дважды ;

g) перед обработкой каждого символа формулы печаталась ее откомпилированную часть, содержимое стека отложенных операций и необработанную еще часть формулы;

h) формулы, содержащие переменную a, значение которой следует считать равным нулю, компилировались в оптимизированные формулы, не содержащие лишних сложений и вычитаний;

i) формулы, содержащие переменную b, значение которой следует считать равным единице, компилировались в оптимизированные формулы, не содержащие лишних умножений и делений;

j) при компиляции неправильных формул выдавалась диагностика об ошибке и корректная часть исходной формулы.

Задача 12.11. Модифицируйте текст эталонного проекта "Стековый компилятор формул" так, чтобы:

a) формулы, содержащие переменные a и b, значение которых следует считать равным двойке, компилировались в оптимизированные формулы, в которых умножение заменено сложением;

b) результатом его работы была формула на входном языке, из которой удалены все лишние скобки;

c) результатом его работы была формула на входном языке, в которой каждое из выполняемых действий заключено в скобки;

d) результатом его работы было дерево вывода исходной формулы.

Задача 12.12. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:

a) деление трактовалось, как левоассоциативная операция;

b) приоритеты операций сложения и вычитания были выше, чем у операций умножения и деления;

c) в качестве аргументов допускались произвольные целые неотрицательные числа;

d) для группировки в формулах можно было использовать не только круглые, но также квадратные и фигурные скобки;

e) вычислялись значения выражений, содержащих операцию % (остаток от деления), с приоритетом, равным операциям умножения и деления;

f) вычислялись значения выражений, содержащих пробелы и комментарии двух видов: /* */ и // ;

g) вычислялись значения выражений, запись которых состоит из нескольких строк;

h) вычислялись значения выражений, содержащих унарные арифметические операции + и - ;

i) вычислялись значения выражений, содержащих бинарные битовые операции | и & ;

j) вычислялись значения выражений, содержащих унарную битовую операцию ^.

Задача 12.13. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:

a) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде восьмеричного числа;

b) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде шестнадцатеричного числа;

c) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде римского числа;

d) вычислялись значения формул, содержащих только восьмеричные числа (до 3999), а результат печатался в виде десятичного числа;

e) вычислялись значения формул, содержащих только восьмеричные числа (до 3999), а результат печатался в виде римского числа;

f) вычислялись значения формул, содержащих только шестнадцатеричные числа (до 3999), а результат печатался в виде десятичного числа;

g) вычислялись значения формул, содержащих только шестнадцатеричные числа (до 3999), а результат печатался в виде римского числа;

h) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде десятичного числа;

i) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде восьмеричного числа;

j) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде шестнадцатеричного числа.

Задача 12.14. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:

a) вычислялись значения формул, содержащих операцию возведения в степень ^, которая правоассоциативна и имеет максимальный приоритет;

b) вычислялись значения формул, содержащих операцию возведения в степень **, которая правоассоциативна и имеет максимальный приоритет;

c) вычислялись значения формул, содержащие квадратные скобки [], обозначающие удвоение выражения, в них стоящего;

d) вычислялись значения формул, содержащие фигурные скобки {}, обозначающие возведение в квадрат выражения, в них стоящего.

Задача 12.15. Модифицируйте текст эталонного проекта "Стековый компилятор формул", превратив его в аплет, который:

a) строит график функции y=f(x), где формула f(x) вводится с клавиатуры;

b) строит график функции, заданной в полярных координатах соотношением r=f(\varphi), где зависимость f(\varphi) вводится с клавиатуры (для обозначения переменной \varphi при этом следует использовать идентификатор t );

c) строит график функции, заданной параметрически соотношениями x=x(t), y=y(t), где зависимости x(t) и y(t) вводятся с клавиатуры.

Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия