- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
Перечисление лексем
Все лексемы разделены на следующие классы:
ключевые слова
однолитерные терминалы
двулитерные терминалы
идентификаторы
числовые константы
Таблица ключевых слов(0): Однолитерные символы(1): Двулитерные символы(2):
-
0
void
0
(
0
>=
1
main
1
)
1
<=
2
print
2
[
2
==
3
scan
3
]
3
!=
4
if
4
{
5
else
5
}
6
for
6
*
7
goto
7
/
8
const
8
+
9
int
9
-
10
float
10
;
11
fmatr
11
,
12
det
12
=
13
transpose
13
!
14
>
15
<
16
:
В процессе работы лексического анализатора строится таблица идентификаторов и таблицы числовых констант (таблица целых констант и таблица вещественных констант):
Таблица идентификаторов(3): Таблица целых констант(4): Таблица веществ. констант(5):
|
Номер идентификат. |
Символьное значение |
|
Номер |
Числовое значение |
|
Номер |
Числовое значение |
|
0 |
|
0 |
|
|
0 |
| |
|
1 |
|
1 |
|
|
1 |
| |
|
2 |
|
2 |
|
|
2 |
| |
|
… |
|
… |
|
|
… |
|
Максимальная длина идентификаторы ограничена 32 литерами. Числовые константы могут быть целого и вещественного типов (intиfloat).
Допускается вид вещественного числа:
с точкой в начале
с точкой в конце
в экспотенциальной форме.
Каждая лексема кодируется следующем образом:
|
тип лексической единицы |
адрес |
Тип - номер таблицы, адрес - номер в таблице.
Синтаксический анализ и перевод во внутреннюю форму
В процессе синтаксического анализа, строятся и модифицируется следующие таблицы:
Таблица идентификаторов (3)
|
Номер идентиф. |
Класс идентиф. |
Тип |
Ссылка |
|
0 |
|
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
… |
|
|
|
Классы идентификаторов:
1 – переменная
2 – константы
3 – метка
Типы:
1 – целый (int)
2 – вещественный (float)
3 – матрица (fmatr)
4 – массив целых чисел
5 – массив вещественных чисел
Ссылка: для переменных, это ссылка на таблицу переменнных, для констант – на таблицу констант, для меток на таблицу меток.
Таблица меток (7)
|
Номер метки |
Номер тетрады |
|
0 |
|
|
1 |
|
|
… |
|
Таблица переменных (6)
|
№ |
Тип |
Атрибут |
Размер (в байтах) |
Адрес памяти |
Cмещение |
|
0 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
.. |
|
|
|
|
|
Таблица переменных содержит информацию о распределении памяти. Поле “Адрес памяти” хранит адрес переменной, относительно начала сегмента данных. “Смещение” служит для индексации элементов матриц и массивов (содержит ссылку на переменную, значение которой нужно прибавить к текущему адресу для доступа к элементу матрицы или массива). Поле “Атрибут” содержит информацию о размерностях массива и матриц.
