Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3338 / 384 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 12:

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

Задачи для самостоятельного решения

Задача 12.3. Докажите, что языки, порожденные двумя указанными грамматиками, совпадают:

a) G_0 и G_1 ;

b) G_0 и G_2 ;

c) G_0 и G_3.

Задача 12.4. Задайте с помощью грамматики следующие языки:

a) язык всех целых десятичных чисел;

b) язык всех целых неотрицательных восьмеричных чисел;

c) язык всех целых неотрицательных шестнадцатеричных чисел;

d) язык всех римских чисел от 1 до 3999;

e) язык всех допустимых идентификаторов в Java;

f) язык всех констант типа double в Java;

g) язык над алфавитом \Sigma = \{0, 1\}, состоящий из всех цепочек, в которых четное количество нулей и нечетное количество единиц;

h) язык над алфавитом \Sigma = \{0, 1\}, состоящий из всех цепочек, в которых количество нулей и единиц совпадают;

i) язык над алфавитом \Sigma = \{0, 1\}, состоящий из всех цепочек, инвариантных относительно операции инвертирования;

j) язык над алфавитом \Sigma = \{0, 1\}, состоящий из всех цепочек, начинающихся с нуля и заканчивающихся нулем, в которых и количество нулей и количество единиц нечетны.

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

a) все арифметические операции трактовались, как левоассоциативные;

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

c) в качестве имен переменных допускались произвольные идентификаторы языка Java;

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

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

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

g) компилировались формулы, запись которых состоит из нескольких строк;

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

i) компилировались формулы, содержащие бинарные битовые операции | и & ; в язык стекового компилятора при этом также добавляются операции | и & ;

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

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

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

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

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

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

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

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

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

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

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

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

Задача 12.7. Напишите программу (компилятор формул), которая для любой правильной арифметической формулы (элемента языка L(G_3) ), данной ей на вход, выдает семантически эквивалентную ей программу стекового калькулятора (элемент языка L(G_S) ).

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

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

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

c) в качестве имен переменных допускались произвольные идентификаторы языка Java;

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

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

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

g) компилировались формулы, запись которых состоит из нескольких строк;

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

i) компилировались формулы, содержащие бинарные битовые операции | и & ; в язык стекового компилятора при этом также добавляются операции | и & ;

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

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

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

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

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

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

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

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

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

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

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

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

Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева