- •Пояснительная записка
- •1 Формальная постановка задачи
- •2 Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Семантика входного языка
- •2.2.1.Встроенные типы данных входного языка
- •2.2.2.Операции входного языка и их приоритет
- •2.2.3.Конструкции входного языка
- •3 Описание этапа лексического анализа
- •3.1 Описание типов лексем
- •3.2 Функции лексического анализатора
- •3.3 Тестирование лексического анализатора
- •4 Описание этапа синтаксического анализа
- •4.1 Исходная порождающая кс-грамматика
- •4.2 Разбиение исходной грамматики на подграмматики
- •4.3. Разработка дмп-процессора, порожденного исходной грамматикой
- •4.3.1 Алгоритм разбора для ll(1)-грамматик
- •4.3.2 Взаимодействие дмп-процессоров
- •4.3.3 Алгоритм работы дмп-процессора
- •4.3.4 Управляющие таблицы дмп-процессоров
- •4.3. Описание перевода во внутренний язык
- •4.3.1 Формат тетрады
- •4.3.2 Формат тетрад для представления основных операторов
- •4.3.3 Представление основных операторов(описанных в разделе семантики) с помощью тетрад
- •4.4.4 Взаимодействие атг с имеющимися таблицами лексического анализатора
- •4.4.5 Разработка атрибутной транслирующей грамматики
- •4.4.6 Описание используемых операционных символов
- •4.4.7 Атрибутный перевод дляLl(1)-грамматик
- •4.4.8 Атрибутный дмп-процессор
- •4.4.9 Тестовый пример
- •Список литературы
- •Приложение 1 Тестирование дмп-процессора
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Пояснительная записка
к курсовой работе по дисциплине
«Теория языков программирования и методов трансляции».
Проверила: Опалёва Э.А.
Выполнили: Зубарев П.С.
Татаренкова Е.А.
гр.3305
Санкт-Петербург, 2006
Содержание
1 Формальная постановка задачи 3
2 Описание входного языка 4
2.1. Синтаксис входного языка 4
2.2. Семантика входного языка 5
2.2.1.Встроенные типы данных входного языка 5
2.2.2.Операции входного языка и их приоритет 5
2.2.3.Конструкции входного языка 6
3 Описание этапа лексического анализа 7
3.1 Описание типов лексем 7
3.2 Функции лексического анализатора 13
3.3 Тестирование лексического анализатора 13
4 Описание этапа синтаксического анализа 15
4.1 Исходная порождающая КС-грамматика 16
4.2 Разбиение исходной грамматики на подграмматики 17
4.3. Разработка ДМП-процессора, порожденного исходной грамматикой 21
4.3.1 Алгоритм разбора для LL(1)-грамматик 21
4.3.2 Взаимодействие ДМП-процессоров 22
4.3.3 Алгоритм работы ДМП-процессора 22
4.3.4 Управляющие таблицы ДМП-процессоров 24
4.3. Описание перевода во внутренний язык 36
4.3.1 Формат тетрады 36
4.3.2 Формат тетрад для представления основных операторов 36
4.3.3 Представление основных операторов(описанных в разделе семантики) с помощью тетрад 37
4.4.4 Взаимодействие АТГ с имеющимися таблицами лексического анализатора 38
4.4.5 Разработка атрибутной транслирующей грамматики 39
4.4.6 Описание используемых операционных символов 45
4.4.7 Атрибутный перевод для LL(1)-грамматик 47
4.4.8 Атрибутный ДМП-процессор 47
4.4.9 Тестовый пример 49
Выводы 52
Список литературы 52
Приложение 1 Тестирование ДМП-процессора 54
1 Формальная постановка задачи
Базовый язык – Си.
Базовые типы: целый, вещественный, булевский.
Структурированный тип – вектор с вещественными компонентами.
Операции над векторами: определение длины вектора, сумма и разность векторов, Скалярное произведение векторов, умножение вектора на число.
Дополнительные требования: операции ++, --, условный оператор присваивания, операторы присваивания +=, *=, -=, /=.
Оператор цикла – с параметром.
Перегрузка операций – разрешается.
Эквивалентность типов – структурная.
Класс грамматик – LL(1)-грамматики.
Промежуточный язык – тетрады.
В процессе выполнения курсовой работы необходимо разработать язык программирования, являющийся подмножеством заданного языка, и транслятор с этого языка в промежуточный язык, тип которого определяется вариантом индивидуального задания. Метод синтаксического анализа также определяется заданием. Язык должен обеспечивать операции над переменными и константами заданных базовых типов, а также над переменными и компонентами производного типа, которые определяются вариантом задания. Состав операций должен включать как предусмотренные базовым языком, так и перечисленные в варианте задания. В языке должна быть определена операция преобразования типов при структурной или именной эквивалентности типов. В языке должна быть предусмотрена возможность создания пользовательских типов. Язык должен допускать использование арифметических выражений, в состав которых могут входить константы и простые переменные базовых типов, компоненты производного типа, круглые скобки и знаки операций: сложение, вычитание, умножение и деление. Приоритет операций - обычный. Язык должен допускать использование логических выражений, в состав которых могут входить отношения, круглые скобки и знаки логических операций: И, ИЛИ, НЕ и, в случае наличия в языке логического типа, константы и переменные этого типа. Приоритет операций - обычный.
Операции над переменными производного типа определяется вариантом задания. Состав операторов языка: - оператор присваивания; - оператор ввода; - оператор вывода; - составной оператор; - оператор безусловного перехода; - условный оператор, условие в котором задается логическим выражением; - оператор цикла, условие в котором задается логическим выражением.
Конкретный вид операторов определяется вариантом задания. Программа на входном языке комментариев не содержит.