ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Российской Федерации

Государственное образовательное учреждение

Высшего профессионального образования

Санкт-Петербургский государственный университет

Аэрокосмического приборостроения

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОГО ПРОЕКТА

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

 

 

Санкт-Петербург

  Рецензент: В.П.Попов  

Задание на курсовой проект

 

1. Спроектировать программную модель работы компилятора по построению таблиц идентификаторов для исходной программы, написанной на языке высокого уровня.

  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

 

Выполнение блока h Выполнение блока d

   

Выполнение блока p Выполнение блока d

Выполнение блока h Выполнение блока d

 

Выполнение блока p

  Результаты моделирования выполнения (последовательность состояний дисплея)  

Выполнение блока 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 Выполнение блока f Выполнение блока a

 

Выполнение блока f Выполнение блока a Выполнение блока f

Выполнение блока a Выполнение блока f Выполнение блока main

Выполнение блока a Выполнение блока main Выполнение блока a

Выполнение блока main

h Список псевдонимов
d -

Результаты моделирования выполнения (последовательность состояний центральной таблицы имен)

 

Выполнение блока main

Выполнение блока f

Выполнение блока a

Выполнение блока f

Выполнение блока a

Выполнение блока f

Выполнение блока a

Выполнение блока f

Выполнение блока main

Выполнение блока a

Выполнение блока main

Выполнение блока a

Выполнение блока main

Варианты задания

 

Код варианта задания определяется тремя компонентами:

- форма вывода результатов моделирования выполнения программы для статически определяемой области видимости (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