- •Пояснительная записка
- •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 Тестирование дмп-процессора
4.4.6 Описание используемых операционных символов
Операционный символ |
Атрибуты |
Комментарий |
{AddVar}p,name |
p – тип переменной name- имя переменной |
Добавление переменной в таблицу идентификаторов |
{AddLabel}v2 |
v2 – адрес идентификатора или целого в соответствующей таблице лексического анализатора |
Добавляет в таблицу меток метку с указанным именем |
{AddVec}q,p,d |
p – тип переменной name- имя переменной d - размерность |
Добавление вектора в таблицу идентификаторов, его размерность записывается в графе «значение» этой таблицы |
{REL}p1, p2, p3, r |
r - адрес рез-та, устанавливается тип boolean p1 - код операции1 p2 - 1-ый операнд p3 - 2-ой операнд |
код операции соответствует типу операции сравнения |
{ASS}p1, p2, p3 |
p1 - код операции p2 - 1-ый операнд и адрес результата p3 - 2-ой операнд |
код операции соответствует типу операции присваивания |
{ADD}p1, p2, p3,p4 |
p1- 1-ый операнд p2- 2-ой операнд p3- адрес результата p4- тип операции
|
Формирование тетрады + или – в зависимости от кода операции |
{MUL}p1, p2, p3,p4 |
p1- 1-ый операнд p2- 2-ой операнд p3- адрес результата p4- тип операции |
Формирование тетрады * или / в зависимости от кода операции |
{DEFL}b |
b – номер метки в таблице |
Если данная метка существует в таблице меток, то формируется соответствующая тетрада DEFL
|
{BLR}b |
b – номер метки в таблице |
Если данная метка существует в таблице меток, то формируется соответствующая тетрада BLR |
{begin_cycle} m1, m2, p1, p2, p3, p4 |
m1 - метка начала цикла m2 - метка конца цикла p1 - имя переменной цикла p2 - начальное значение p3 - шаг цикла p4 - граничное значение |
Формирует тетрады на присваивание переменной цикла начального значения, проверку граничного значения этой переменной, обеспечение перехода по той или иной метке в случае выполнения/невыполнения условий проверки |
{end_cycle}p1, p2, p3, p4
|
p1 - имя переменной цикла p2 - шаг p3 - метка начала цикла p4 - метка конца цикла |
Изменяет значение переменной цикла в соответствии с заданным циклом и совершает переход на начало цикла. После этого формируется метка выхода из цикла. |
{BF}m, v
|
m – номер метки в таблице v – значение типа boolean |
Формирует тетраду BF, если в таблице меток есть m, а v имеет значение boolean |
{OR}p1, p2, r
|
p1 – 1-й операнд p2 – 2-й операнд r – результат типа boolean |
Формируется тетрада OR, если операнды булевского типа |
{AND}p1, p2, r |
p1 – 1-й операнд p2 – 2-й операнд r – результат типа boolean |
Формируется тетрада AND, если операнды булевского типа |
{NOT}p1, r
|
p1 – адрес операнда r - адрес результата, устанавливается тип boolean |
Формируется тетрада NOT, если операнд булевского типа |
{++}p1 |
p1 – 1-ый операнд и адрес результата |
Формируется тетрада ++ |
{--}p1 |
p1 – 1-ый операнд и адрес результата |
Формируется тетрада -- |
{~}p1, p2, |
p1- адрес вектора в таблице идентификаторов p2-адрес результата-значения длины вектора |
Формируется тетрада LEN для вычисления длины вектора |
{CIN} p1 |
p1- 1-ый операнд |
Формируется тетрада CIN |
{COUT} p1 |
p1- 1-ый операнд |
Формируется тетрада COUT |
{SUBS} name, ind, r |
name - имя вектора ind – индекс элемента в векторе r- элемент name[ind] |
Формируется тетрада SUBS |
Введем соглашение о том, что если у операционного символа все атрибуты равны 10, то такой операционный символ тетрады не порождает.