ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Российской Федерации
Государственное образовательное учреждение
Высшего профессионального образования
Санкт-Петербургский государственный университет
Аэрокосмического приборостроения
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОГО ПРОЕКТА
ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ
Задание на курсовой проект
1. Спроектировать программную модель работы компилятора по построению таблиц идентификаторов для исходной программы, написанной на языке высокого уровня.
Предусмотреть возможность функционирования вышеуказанных моделей для двух вариантов организации областей видимости символических имен: статического и динамического; полагая, что характерными структурами исходной программы для них являются соответственно:
- блочная структура, позволяющая зафиксировать области видимости для подпрограмм на этапе компиляции с учетом вложенности блоков;
- структура, при которой подпрограммы не могут быть вложенными, и, следовательно, позволяющая определить области видимости только на этапе выполнения программы.
Требования к организации входных данных
Входные данные следует представить в виде файла с текстом исходной программы, состоящей из нескольких подпрограмм. Подпрограмма может иметь параметры, раздел описаний переменных и подпрограмм, а также – раздел операторов. Поскольку целью имитации выполнения программы является только построение областей видимости для подпрограмм, множество типов операторов допустимо ограничить вызовами подпрограмм, исключив рекурсивные вызовы. Для описания исходной программы следует воспользоваться синтаксисом языка Pascal или C, в зависимости от варианта задания на курсовую работу. Допускается введение дополнительных ограничений к правилам образования имен переменных и подпрограмм.
Требования к организации выходных данных
Выходные данные следует представить двумя файлами:
- файл результатов моделирования работы компилятора,
- файл результатов моделирования выполнения программы.
Результаты моделирования работы компилятора представить множеством списков идентификаторов для множества подпрограмм.
Предусмотреть диагностику исходной программы на наличие в ней ошибок двух типов:
- двойное описание имени,
- использование неописанного имени.
Ошибки первого типа могут быть обнаружены на этапе компиляции для программы со статически определяемой областью видимости, и на обоих этапах моделирования (компиляции и выполнения) – для программы с динамически определяемой областью видимости. Ошибки второго типа обнаруживаются на этапе моделирования выполнения программы.
Результаты моделирования выполнения программы для статически определяемой области видимости в зависимости от варианта задания представить:
- последовательностью состояний стека времени выполнения с указателями статической цепи(SCP);
- последовательностью состояний дисплея.
Для динамически определяемой области видимости результаты моделирования выполнения программы в зависимости от варианта задания представить:
- последовательностью состояний стека времени выполнения;
- последовательностью состояний центральной таблицы имен.
Кроме того, каждая порция информации (состояние стека, дисплея или таблицы) о выполнении подпрограммы должны сопровождаться списком псевдонимов для выполняющейся подпрограммы.
Тестовый пример
Входные данные
1) Программа блочной структуры
program p;
var a,b,c:integer;
procedure d(var e:integer; f:integer);
var a,g:integer;
procedure h;
var b,i:integer;
begin
end;
begin
h;
end;
begin
d(a,c);
d(b,c);
end.
2) Программа, не имеющая вложенных блоков
int a(int& b; int c)
{ int d,e;
}
int f(int g,h)
{ int i,j;
a(i,j);
a(i,i);
a(h,i);
}
int main()
{ int d,h;
f(d,h);
a(d,d);
a(h,h);
}
Выходные данные
Программа 1 в условиях статически определяемой области видимости имен
Результаты компиляции
Таблица имен программы p Таблица имен программы d
a integer e integer
b integer f integer
c integer a integer
d:procedure g integer
b integer
c integer
h:procedure
Таблица имен программы h
b integer
i integer
a integer
g integer
e integer
f integer
c integer
Результаты моделирования выполнения (последовательность состояний стека)
Выполнение блока p Выполнение блока d
Ссылка на данные блока p Ссылка на данные блока p
Ссылка на данные блока d
Список псевдонимов Список псевдонимов
- -
Выполнение блока h Выполнение блока d
Ссылка на данные блока p Ссылка на данные блока p
Ссылка на данные блока d Ссылка на данные блока d
Ссылка на данные блока h
Список псевдонимов Список псевдонимов
- -
Выполнение блока p Выполнение блока d
Ссылка на данные блока p Ссылка на данные блока p
Ссылка на данные блока d
Список псевдонимов Список псевдонимов
- b,e
Выполнение блока h Выполнение блока d
Ссылка на данные блока p Ссылка на данные блока p
Ссылка на данные блока d Ссылка на данные блока d
Ссылка на данные блока h
Список псевдонимов Список псевдонимов
- b,e
Выполнение блока p
Ссылка на данные блока p
Список псевдонимов
-
Программа 2 в условиях динамически определяемой области видимости имен
Результаты компиляции
Таблица имен программы a
b адрес int
c int
d int
e int
Таблица имен программы f
g int
h int
i int
j int
Таблица имен программы main
d int
h int
Результаты моделирования выполнения (последовательность состояний стека)
Выполнение блока main
h | Список псевдонимов |
d | - |
Результаты моделирования выполнения (последовательность состояний центральной таблицы имен)
Варианты задания
Код варианта задания определяется тремя компонентами:
- форма вывода результатов моделирования выполнения программы для статически определяемой области видимости (S – состояния стека, D – состояния дисплея);
- форма вывода результатов моделирования выполнения программы для динамически определяемой области видимости (S – состояния стека, T – состояния таблицы);
- синтаксис языка исходной программы (P –Pascal, C - C).
Таблица вариантов
№ вар. | ||||||||
Код вар. | STP | STC | DTP | DTC | SSP | SSC | DSP | DSC |
Содержание пояснительной записки
Введение
1.Постановка задачи
2.Описание программной модели
2.1.Структура программы
2.2.Алгоритмы функционирования блоков
2.3.Описание структур данных программы
2.4.Интерфейс программной модели
3.Результаты тестирования программы
Заключение
Литература
Приложение
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Вирт Н. Алгоритмы и структуры данных. - М.: Мир,1989. - 360с.
2. Подбельский В.В. Язык С++. – М.: Финансы и статистика, 2003.-560с.
3. Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. – СПб.: Питер, 2002. -688с.
4. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. - М.: «Нолидж», 1997. - 616с.
СОДЕРЖАНИЕ
1. Задание на курсовой проект. 2
2. Тестовый пример. 2
3. Варианты задания. 2
4. Содержание пояснительной записки. 2
5. Пояснения к используемой терминологии. 2
6. Рекомендации по методике проектирования. 2
7. График выполнения курсового проекта. 2
БИБЛИОГРАФИЧЕСКИЙ СПИСОК.. 2