- •Пояснительная записка
- •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.3. Описание перевода во внутренний язык
После синтаксического анализа программа представляется в форме набора тетрад.
4.3.1 Формат тетрады
Код операции |
Операнд1 |
Операнд2 |
Результат |
+ |
a |
b |
r1 |
Или в форме БНФ:
<код операции>,<операнд1>,<операнд2>,<результат>
,где <операнд1>,<операнд2> специфицируют аргументы, а <результат> -временное имя для хранения результата выполнения операции.
Операнды одной тетрады должны быть одинаково типа, так как соответствие типов в нашем языке структурное, то неодинаковые типы преобразуются к одинаковому автоматически .
Для доступа к элементу массива необходимо использовать тетраду
SUBS, a,i,t , которая будет интерпретирована как операция доступаa[i].
4.3.2 Формат тетрад для представления основных операторов
Тетрада |
Семантика тетрады | |||
= |
b |
|
a |
a:=b |
DEFL |
L |
|
|
Определение метки L |
BRL |
I |
|
|
Безусловный переход к тетраде с меткой I |
BF |
I |
E |
|
Переход к тетраде с меткой I, если значение выражения Е равно “ложь” |
BR |
m |
|
|
Безусловный переход к тетраде с номером m |
BZL(BPL,BML) |
m |
E |
|
Переход к тетраде с меткой m, если значение выраженияE= нулю (больше нуля, меньше нуля) |
BE(BL,BG) |
m |
E1 |
E2 |
Переход к тетраде с меткой m, если значение выраженияE1 равно(меньше, больше) значения выраженияE2 |
+ |
a |
b |
E |
Сложение E=a + b |
- |
a |
b |
E |
Вычитание E=a – b |
* |
a |
b |
Е |
Умножение Е=a * b |
/ |
a |
b |
Е |
Деление Е a / b |
OR |
a |
b |
Е |
В Е хранится булевская переменная, соответствующая логическому ИЛИ aиb |
AND |
a |
b |
Е |
В Е хранится булевская переменная, соответствующая логическому И aиb |
NOT |
a |
|
Е |
В Е хранится НЕ а |
< |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a<b |
<= |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a<=b |
> |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a>b |
>= |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a>=b |
== |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a==b |
!= |
a |
b |
Е |
В Е хранится результат вычисления логического выражения a!=b |
SUBS |
a |
i |
Е |
чтение из a[i]. Результат-новое значение Е=a[i] |
LEN |
a |
|
Е |
В Е хранится длина вектора Е |
+= |
a |
b |
a |
Сложение a+=b |
*= |
a |
b |
a |
Умножение a*=b |
/= |
a |
b |
a |
Деление a/=b |
-= |
a |
b |
a |
Вычитание a-=b |
++ |
a |
1 |
a |
Инкремент а |
-- |
a |
1 |
a |
Декремент а |
CIN |
|
|
a |
Ввод из потока значения а |
COUT |
a |
|
|
Вывод в поток значения переменной а |
Для представления элементов используется тетрада SUBS,a,i,E, которая интерпретируется как операция доступаa[i] и позволяет выбрать элемент вектора, так как размер элемента вектора одно слово, тоn-мерный вектор представляется в памяти в видеnпоследовательно расположенных слов, а индекс элемента есть его смещение в данном представлении(начиная с нуля).