- •Пояснительная записка
- •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)