- •Пояснительная записка
- •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.9 Тестовый пример
Входная цепочка
void main()
{ int a;
vector b[3];
a=5;
b=[2.0, a, 4.1];
if(b[1]==a)
cout >> a;
}
Таблицы лексического анализатора
В ходе разбора указанной цепочки будут созданы таблица(№24) идентификаторов вида
0 |
a |
1 |
b |
2 |
b1 |
3 |
b2 |
4 |
b3 |
таблица целочисленных констант(№25)
0 |
5 |
1 |
3 |
2 |
1 |
таблица вещественных констант (№26)
0 |
2.0 |
1 |
4.1 |
Представление в виде токенов
void main()
{ TypeBaseint ida ;
ida AssignRel = CI5 ;
vector idb [CI3];
idb AssignRel =[ CF2.0, ida, CF4.1];
if(idb [CI1] RelOperation == ida )
cout >> ida ;
}
Процесс формирования тетрад
Входная строка |
Изменение в таблицах |
Тетрада | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TypeBase Ident ; <int a;> |
|
2 0 – это индексы соответствующих сущностей в своих таблицах, то есть
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
VECTOR Ident[CI];
< vector b[3];> |
* указатель на 3- это указатель на размерность, то есть сколько последующих строк в таблице отводится под этот вектор
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ident AssignRel CI; <a=5; >
|
|
Что содержательно выглядит как
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ident AssignRel [CF,CF,CF];
< b=[2.0, a,4.1];> |
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IF(CF RelOperation Ident) COUT>>Ident;
<if(b[1]==a)> <cout >> a;>
|
|
*работа идет непосредственно со значениями переменных и чисел |
Таблицы синтаксического анализатора
Таблица идентификаторов(30)
индекс |
идентификатор |
тип |
значение |
0 |
A |
*int |
*5 |
1 |
B |
*vector |
|
2 |
|
|
*2.0 |
3 |
|
|
*a |
4 |
|
|
*4.1 |
5 |
|
|
*5 |
6 |
|
|
1 |
Таблица меток
Индекс |
Значение |
0 |
Lfalse |
Представление заданной программы в виде тетрад
= |
30(0) |
25(0) |
30(0) |
= |
30(2) |
26(0) |
30(2) |
= |
30(3) |
30(0) |
30(3) |
= |
30(4) |
26(1) |
30(4) |
SUBS |
30(1) |
1 |
30(5) |
== |
30(5) |
30(0) |
30(6) |
BF |
Lfalse |
30(6) |
|
COUT>> |
30(0) |
|
|
DEFL |
Lfalse |
|
|
Выводы
В ходе выполнения данной курсовой работы нами разработан некий язык программирования, являющийся подмножеством языка С. Мы научились задавать и описывать синтаксис и семантику рассматриваемого языка, получили первичные навыки по проектированию лексических анализаторов и построению транслирующих грамматик. Познакомились с основными методами транслирования и получили навыки по проектированию ДМП-процессоров заданной конфигурации.