Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП. / готовый курсовик.doc
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
1.2 Mб
Скачать

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)