- •Пояснительная записка
- •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 Тестирование дмп-процессора
2.2.2.Операции входного языка и их приоритет
Типы операндов операции должны быть совместимы. В результате операций над булевскими операндами получаем булевскую переменную, над векторами-вектор, над операндами целого типа – целое число, во всех других случаях – вещественное значение.
2.2.3.Конструкции входного языка
Оператор цикла с параметром for.
< оператор цикла с параметром>::=
for(<оператор присваивания>;<логическое выражение>;<оператор присваивания>)
<составной оператор>
Параметр цикла инициализируется первым оператором присваивания.
Вычисляется логическое выражение для текущего значения параметра цикла.
Если получившееся логическое выражение ИСТИНА:
Выполняется тело цикла.
Выполняется оператор присваивания над текущим значением параметра цикла.
Переход к пункту 1.
Если получившееся логическое выражение ЛОЖЬ:
6. Выход из цикла.
Значение параметра цикла при корректном завершении цикла определяется логическим выражением из описания цикла.
Оператор присваивания
<оператор присваивания >::=< переменная ><отношение присваивания>< выражение >
< отношение присваивания>::= = | += | -= | *= | /=
1.Вычисляется арифметическое выражение в правой части и, в случае соответствия типов, запоминается в переменной(для =), указанной в левой части. Если отношение операции отлично от =, то переменная в левой части модифицируется (согласно виду отношения присваивания) с учетом вычисленного арифметического выражения и сохраняется в переменной левой части.
Каждая переменная, используемая в программе, должна быть предварительно описана.
В одном блоке не может объявляться две переменных с одним именем.
Имя переменной не может совпадать с зарезервированными языком словами.
Оператор безусловного перехода goto.
<оператор безусловного перехода>::=goto <метка>
Выполняется переход на метку.
Метка должна встречаться в теле программы один раз.
Условный оператор if-else
< условный оператор >::= if (<логическое выражение>) <составной оператор1>
[else <составной оператор2> ]
Вычисляется значение логического выражения и результат помещается во временную переменную.
Если результат FALSE, то происходит переход на составной оператор2, в противном случае выполняется составной оператор1 и происходит переход в конец оператора if -else.
Условный оператор присваивания
< условный оператор присваивания>::=
(<логическое выражение>)?< выражение1>:< выражение2 >
Вычисляется значение логического выражение и результат помещается во временную переменную.
Если результат TRUE, то происходит присваивание значения выражения1, в противном случае выполняется присваивание значения выражения2 и происходит переход в конец оператора условного присваивания.
3 Описание этапа лексического анализа
На входе лексического анализатора находится последовательность ASCII символов представляющая программу на входном языке. Задача ЛА состоит в разделении этой последовательности на слова языка (лексемы).
чтение исходной программы и выделение из нее лексем;
построение таблиц идентификаторов и констант;
преобразование входной программы (поток символов) в поток токенов, в котором каждый токен представляет лексему.