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

“Системное программное обеспечение”

Методы трансляции

 

Вариант N

Цель работы: практическое применение теоретических основ проектирования трансляторов с языков программирования; освоение средств автоматизации построения трансляторов; разработка элементов транслятора для учебного языка.

 

 I. Содержание работы

 

1.     Разработать описание лексики, синтаксиса и семантики заданного варианта языка. Написать простую тестовую программу (программы), содержащую все заданные элементы и конструкции языка. Вручную выполнить интерпретацию программы. Эту программу (программы) использовать впоследствии для проверки элементов разрабатываемого транслятора.

2.     Разработать систему регулярных выражений, определяющую лексику заданного варианта языка. Используя пакет Вебтранслаб, построить автоматную реализацию лексического акцептора. Убедиться в работоспособности акцептора.

3.     Разработать совокупность действий, т.е. расширение системы регулярных выражений, реализующую:

- поиск в таблицах идентификаторов / констант и пополнение таблиц;

- формирование лексем,

и построить лексический анализатор. Проверить его работоспособность.

4.     Разработать формальную грамматику класса LL(1), определяющую синтаксис заданного языка. Используя пакет Вебтранслаб, построить автоматную реализацию нисходящего синтаксического акцептора, проверить его работоспособность.

5.     Разработать формальную грамматику класса не выше, чем LALR(1). Используя пакет Вебтранслаб, построить автоматную реализацию восходящего синтаксического акцептора, проверить его работоспособность.

6.     Разработать расширение синтаксического акцептора (по собственному выбору – нисходящего или восходящего) для преобразования последовательности лексем в постфиксную запись (или в абстрактное синтаксическое дерево).

7.     Разработать семантический анализатор и преобразователь ПФЗ в псевдокод (последовательность тетрад, триад, пентад, …).

8.     Разработать интерпретатор псевдокода.

9.     Оформить (в электронном виде) расчетно-пояснительную записку следующего содержания:

-       Данное задание;

-       Оглавление;

-       Введение;

-       Описание заданного варианта языка;

-       Тестовая программа (программы).

-       По каждому из пунктов 2, 4, 5:

-       система регулярных выражений ( п.2 ) или формальная грамматика ( п.п. 4,5 );

-       фрагменты управляющих таблиц конечных автоматов, построенные Вебтранслаб’ом. Пояснить содержание фрагментов, приведенных в записке.

-       примеры результатов работы автоматов с тестовыми примерами; объяснение и анализ этих результатов.

-       По каждому из пунктов 3, 6, 7, 8:

-       полное описание разработанного алгоритма, тексты разработанных программ (в случае их большого объема включать в записку фрагменты, содержащие наиболее важные части алгоритма; описание алгоритма можно не включать, если программы приводятся полностью и имеют детальные комментарии).

-       примеры результатов работы компонент транслятора с правильными и ошибочными входными программами; объяснение и анализ этих результатов.

-       Заключение.

Объем записки не должен превышать 25-30 страниц.


II. Неформальное определение учебного языка, варианты заданий.

Лексика, синтаксис и семантика учебного языка основаны на языках типа Java и C#. Любые конструкции, не оговоренные явно в задании, можно заимствовать из этих языков или определять самостоятельно.

Ключевые слова (в задании выделены жирным шрифтом, например: long, when, case, …) должны быть нечувствительны к регистру. Обозначения:

[...]             – необязательная часть

              – часть, повторяющаяся произвольное количество раз

< >             – описание конструкции:

<Б>|<Ц>|<пБ>|<пЦ>|<пБЦ>           – одна буква | одна цифра | непустая последовательность букв | непустая последовательность цифр | возможно пустая последовательность букв и/или цифр

<И>                                         Имя переменной / объекта

<В>                                         произвольное Выражение

<ЛВ>                                       – Логическое Выражение

<ОБ>                                      – Оператор или Блок (<О> – одиночный оператор )

<К>                                          – Константа

Расшифровка цифр варианта задания:

II.1     Идентификаторы и константы

Вариант:

1

2

3

4

Идентификаторы

<пБ><Ц>

<пБ><пЦ>

<Б><пБЦ>

_<пБЦ><Б>

Константы

целые, в том числе 8-ричные

вещественные

символьные

целые, в том числе 4-ричные

вещественные

символьные

целые, в том числе двоичные

вещественные

символьные

целые, в том числе 16-ричные

вещественные

символьные

 

II.2     Объявления примитивных типов (целое, вещественное, символьное, булево):

Вариант:

1

2

3

4

 

long

double

sym[b[o[l]]]

card[i[n[a[l]]]]

float

char

num[b[e[r]]]

double

sign

int[e[g[e[r]]]]

real

litera

 

II.3     Объявления объектов и создание/уничтожение экземпляров

Вариант:

1

2

3

4

Классов

object

entity

class

bundle

Экземпляров

set / drop

create / kill

new / delete

build / destroy

 

II.4     Оператор присваивания:

Вариант:

1

2

3

4

 

<И> = <В>;

set <В> to <И>;

<И> := <В> ;

 <И> <– <В> ;

 

II.5     Условный оператор:

В-т:

1

2

3

4

 

? (<ЛВ>) :<ОБ> [: <ОБ>]

by <ЛВ> do <ОБ> [else <ОБ>]

for <ЛВ> then <ОБ> [else <ОБ>]

if (<ЛВ>) <ОБ> [else<ОБ>]

 

 

II.6     Оператор цикла:

В-т:

4

1

2

3

 

foreach <И> in <К> … <К> exec <ОБ>

while(<ЛВ>) loop <ОБ>

cycle([<О>];[<ЛВ>];[<О>]) <ОБ>

repeat <ОБ> when <ЛВ>

II.7     Оператор переключателя

В-т:

3

1

2

4

 

select <В> case (<К>) <ОБ> [escape]end

with <В> {?<К>:<ОБ> [off]}

case <В> {when <К> then <ОБ> [break]}

switch <В> { by <К> do <ОБ> [break]}