- •1. Постановка задачи
- •Исходные данные:
- •Описание синтаксиса входного языка:
- •Описание семантики входного языка:
- •Объявления и области действия
- •Операции.
- •Лексический анализ
- •Определение синтаксиса лексем
- •49 Таблица констант
- •Тестирование лексического анализатора
- •Описание кс-грамматики входного языка
- •Разбиение на подграмматики
- •Описание языка триад
- •Построение атрибутной транслирующей грамматики
- •Построение атрибутного дмп – процессора
- •Организация взаимодействия дмп-процессоров
Министерство образования РФ
Санкт-Петербургский государственный
электротехнический университет
<ЛЭТИ>
Кафедра МО ЭВМ
Пояснительная записка к курсовой работе
по дисциплине «Теория языков программирования»
Вариант №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<блок кода>]
<логическое выражение> ::= <логическое выражение> || <правая часть логического выражения> |
<логическое выражение> && <правая часть логического выражения> | <правая часть логического выражения> |
! <правая часть логического выражения> |
<эквивалентность>|
<отношение>
<правая часть логического выражения>::= <логическое выражение> |<значение>
<эквивалентность>::=<левая часть эквивалентности>= =<левая часть отношения> |<левая часть эквивалентности>! =<левая часть отношения>
<левая часть эквивалентности>::=<левая часть отношения>|<эквивалентность>
<отношение>::=<левая часть отношения> > <значение>|<левая часть отношения> < <значение>|
<левая часть отношения> >= <значение>|
<левая часть отношения> <= <значение>
<левая часть отношения>::=<значение>|<отношение>
<отрицание>::=!<логическое выражение>