- •Пояснительная записка
- •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.2 Разбиение исходной грамматики на подграмматики
Подграмматика для переменной
Подграмматика для выражения
Подграмматика для логического выражения
Подграмматика для операторов
Подграмматика для типов
Основная грамматика
Подграмматика для переменной
Таблица нетерминалов
|
Имя нетерминала |
Описание |
|
VAR |
Переменная |
|
IDENT |
Идентификатор |
|
VEC |
Вектор |
|
EL |
Элемент вектора |
|
SELEM |
Последовательность элементов вектора |
|
SEND |
Запись индекса элемента, если он есть |
|
INDEX |
Значение индекса элемента |
|
CI |
Целое число |
|
CF |
Вещественное число |
VAR → IDENT (1)
VAR → [ ELEM SELEM] (2)
SELEM → , ELEM SELEM (3)
SELEM → (4)
ELEM → IDENT SEND (5)
SEND → [ INDEX ] (6)
SEND → (7)
ELEM → CF (8)
INDEX → CI (9)
VAR →CI ( 10 )
Подграмматика для выражения
Таблица нетерминалов
|
Имя нетерминала |
Описание |
|
EXP |
Выражение |
|
SAE |
Последовательность слагаемых |
|
AE |
Слагаемое |
|
ME |
Множитель |
|
SME |
Последовательность множителей |
|
VEC |
Вектор |
|
VAR |
Переменная |
EXP -> EXPS SAE (1)
SAE -> + AE SAE (2)
SAE -> - AE SAE (3)
SAE -> (4)
EXPS ->++ AE (5)
EXPS -> -- AE (6)
EXPS -> AE (7)
EXPS -> ~ VEC (8)
AE -> ME SME (9)
SME -> * ME SME (10)
SME -> / ME SME (11)
SME -> (12)
ME -> ( EXP ) (13)
ME -> VAR (14)
Подграмматика для логического выражения
Таблица нетерминалов:
|
Имя нетерминала |
Описание |
|
LEX |
Логическое выражеие |
|
EXP |
Выражение |
|
С |
Конъюнкция |
|
SC |
Последовательность конъюнкций |
|
REL |
Отношение |
|
LM |
Логический множитель |
|
SLM |
Последовательность логических множителей |
|
REO |
Операция отношения |
LEX →C SC (1) REL→EXP REO (10)
SC→or C SC (2) REO→ < EXP (11)
SC→ (3) REO→ > EXP (12)
LEX→REL (4) REO→ == EXP (13)
C→LM SLM (5) REO→ <= EXP (14)
SLM→and LM SLM (6) REO→ >= EXP (15)
SLM→ (7) REO→ != EXP (16)
LM→( LEX ) (8)
LM→not LM (9)
Подграмматика для операторов
Таблица нетерминалов
|
Имя нетерминала |
Описание |
|
COP |
Составной оператор |
|
OP |
Оператор |
|
ULO |
Непомеченный оператор |
|
LPR |
Оператор цикла с параметром |
|
SOP |
Последовательность операторов |
|
EQO |
Оператор присваивания |
|
JMP |
Оператор безусловного перехода |
|
IFO |
Условный оператор |
|
CAO |
Условный оператор присваивания |
|
IOP |
Оператор ввода |
|
OOP |
Оператор вывода |
|
LEX |
Логическое выражение |
|
VAR |
Переменная |
|
EQR |
Отношение присваивания |
|
EXP |
Выражение |
COP → SOP (1) EQRS → /=EXP (19)
SOP → OP; SOP (2) ULO → (LEX)? (EXP) : (EXP ) (20)
SOP → (3)
OP → LABEL: ULO (4)
OP → ULO (22)
ULO →for(EQO; LEX; EQO) COP (5)
ULO → EQO (6)
EQO →VAR EQRS (7)
ULO → goto LABEL (8)
LABEL → IDENT (9)
ULO → if(LEX) COP ELO (10)
ELO → else COP (11)
ELO → (12)
ULO → cin>>VAR (13)
ULO →cout <<VAR (14)
EQRS → =EXP (15)
EQRS → +=EXP (16)
EQRS → -=EXP (17)
EQRS → *=EXP (18)
Подграмматика для типов
Таблица нетерминалов
|
Имя нетерминала |
Описание |
|
BASE |
Базовый тип |
|
DECVAR |
Объявление переменной |
|
LETTER |
Буква |
|
SNL |
Последовательность букв или цифр |
|
NUMBER |
Число |
|
DECVAR |
Объявление вектора |
|
DIM |
Размерность вектора |
|
NNUM |
Последовательность цифр |
|
NATNUM |
Натуральное число |
|
IDENT |
Индентификатор |
DECVAR -> BASE VAR (1)
BASE -> int (2)
BASE -> float (3)
BASE -> bool (4)
DECVEC -> vector VAR [ DIM] ; DECVEC (5)
DECVEC -> (6)
DIM -> CI (7)
Основная грамматика
Таблица нетерминалов
|
Имя нетерминала |
Описание |
|
P |
Программа |
|
DVAR |
Объявления переменных |
|
DVEC |
Объявления векторов |
|
COP |
Составной оператор |
P → void main() { DVAR } (1)
DVAR → DECVAR; DVAR (2)
DVAR → DVEC (3)
DVAR → COP (4)
DVEC → DEVEC; DVEC (5)
DVEC →COP (6)
