Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП. Вариант 18.doc
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
1.14 Mб
Скачать

Министерство образования РФ

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

электротехнический университет

<ЛЭТИ>

Кафедра МО ЭВМ

Пояснительная записка к курсовой работе

по дисциплине «Теория языков программирования»

Вариант №18

Преподаватель: Самойленко В.П.

Выполнили студенты группы 3341: Грачев Д.В.

Митягин С.А.

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

2006

1. Постановка задачи

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

Язык должен обеспечить операции над переменными и константами заданных базовых типов, а также над переменными и компонентами производного типа. В языке должна быть определена операция преобразования типов.

Язык должен допускать использование арифметических выражений, в состав которых могут входить константы и простые переменные базовых типов, компоненты структурного типа, круглые скобки и знаки операций: сложение, вычитание, умножение, деление. Язык должен допускать использование логических операций: И, ИЛИ, НЕ и в случае наличия в языке логического типа, константы переменные этого типа.

Исходные данные:

Базовый язык–Java

Базовые типы: целый, вещественный, символьный.

Структурированный тип: символьная строка.

Операции над строками: определение длины строки, конкатенация строк, замена подстроки в строке, поиск подстроки в строке, доступ к подстроке.

Дополнительные требования: функции, операторnew, операции++,--, условный оператор присваивания.

Оператор цикла– с предусловием.

Перегрузка операций– разрешается.

Эквивалентность типов– структурная.

Класс грамматик– грамматики операторного предшествования.

Промежуточный язык– триады.

Описание синтаксиса входного языка:

<программа>::=<главный класс>{<класс>}

<класс>::=<объявление пакета>;{<подключение класса>;} <объявление класса>{{<метод>|<объявление переменной>}}

<главный класс> ::=<объявление пакета>;{<подключение класса>;} <объявление класса>{{<метод>|<объявление переменной>}<метод main> {<метод>|<объявление переменной>}}

<объявление класса>::=class<иденитификатор>

<подключение класса>::=import<путь>.<идентификатор>

<объявление пакета>::=package<путь>

<путь>::=<латинская буква>{<латинская буква>|<цифра>}|

<путь>.<путь>

<объявление переменной>::=<тип><простая переменная>|<тип><операция присваивания>

<тип >:: =<идентификатор>

<идентификатор>:: =<буква языка>{ <буква языка>|<цифра>}

<простая переменная>:: =<идентификатор>

<операция присваивания>::=<простая переменная>= <значение>| <простая переменная>=<new>

<значение>::=<простая переменная>|<константа>|<операция>|<строковая операция>

<константа>::=<число>|<символьное значение>|<строка>

<константа без знака>::=<число без знака>|<символьное значение>|<строка>

<операция>::=<операция скобки>|<унарная операция>|<мультипликативная операция>|<аддитивная операция>|<условное присваивание>

<операция скобки>::=(<значение>)

<унарная операция>::=<левая часть унарной операции>++|<левая часть унарной операции>--<левая часть унарной операции>::=<простая переменная>|<константа без знака>|<строковая операция> |<унарная операция> |<операция скобки>

<мультипликативная операция>::=<левая часть мультипликативной операции>*<левая часть унарной операции> |<левая часть мультипликативной операции>/<левая часть унарной операции>

<левая часть мультипликативной операции>::=<левая часть унарной операции> | <мультипликативная операция>

<аддитивная операция>::=<левая часть аддитивной операции>+<левая часть мультипликативной операции> |<левая часть аддитивной операции>-<левая часть мультипликативной операции>

<левая часть аддитивной операции>::=<левая часть мультипликативной операции>|<аддитивная операция>

<условное присваивание>::=<логическое выражение>?<значение>:<значение>

<строковая операция>::=<длина строки>|<конкатенация строк>| <доступ к подстроке>| <замена подстроки в строке>|<поиск подстроки в строке>

<длина строки>:: =< строка> _length()

<конкатенация строк>:: =<строка>_concat(<строка>)

<доступ к подстроке>:: =<строка>_substring(<целое>[,<целое>])

<замена подстроки в строке>:: =<строка> _ replace(<строка>,<строка>)

<поиск подстроки в строке>:: =<строка> _ find(<строка>)

<блок кода>::={{<унарная операция>|<объявление переменной>|<операция присваивания>| <строковая операция> | <блок кода>|<цикл с предусловием>|<вызов метода>} }

<метод>::=<тип><идентификатор>([<тип><идентификатор>{,<тип><идентификатор>}])<блок кода>

<вызов метода>::=<простая переменная>.<идентификатор>([<значение>{,<значение>}])|<идентификатор>([<значение>{,<значение>} ])

<метод main>::=voidmain(String<идентификатор>)<блок кода>

<new>:: =new<тип>([<тип><идентификатор>{,<тип><идентификатор>}])

<цикл с предусловием>::=while(<логическое выражение>)<операция присваивания>|while(<логическое выражение>)|while(<логическое выражение>)<блок кода>

<условный оператор>::=if(<логическое выражение>)<блок кода>[else<блок кода>]

<логическое выражение> ::= <логическое выражение> || <правая часть логического выражения> |

<логическое выражение> && <правая часть логического выражения> | <правая часть логического выражения> |

! <правая часть логического выражения> |

<эквивалентность>|

<отношение>

<правая часть логического выражения>::= <логическое выражение> |<значение>

<эквивалентность>::=<левая часть эквивалентности>= =<левая часть отношения> |<левая часть эквивалентности>! =<левая часть отношения>

<левая часть эквивалентности>::=<левая часть отношения>|<эквивалентность>

<отношение>::=<левая часть отношения> > <значение>|<левая часть отношения> < <значение>|

<левая часть отношения> >= <значение>|

<левая часть отношения> <= <значение>

<левая часть отношения>::=<значение>|<отношение>

<отрицание>::=!<логическое выражение>