
- •1. Формальная постановка задачи Задание 10.
- •2. Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Описание семантики входного языка
- •3 Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •Определение синтаксиса лексем.
- •Построение диаграммы лексического анализатора.
- •Функции лексического анализатора
- •Описание этапа синтаксического анализа.
- •4.1. Построение кс-грамматики входного языка.
- •Разбиение исходной грамматики на подграмматики.
- •Описание промежуточного языка.
- •4.4. Неформальное описание перевода.
- •4.5. Посторенние атрибутной транслирующей грамматики.
- •4.6. Построение атрибутного дмп-процессора.
- •4.7. Тестирование атрибутного дмп-процессора
Разбиение исходной грамматики на подграмматики.
Разбиение грамматики на подграмматики позволит использовать заданный метод синтаксического анализа, но усложнит описание и реализацию этого перевода, поскольку после разбиения перевод будет описываться с помощью нескольких взаимосвязанных атрибутных транслирующих грамматик.
При разбиении грамматики на подграмматики нужно учитывать следующее:
Совокупности выделенных из грамматики взаимосвязанных правил должна представлять собой КС-грамматику.
Основной символ подграмматики становится (специальным) терминальным символом исходной грамматики.
Если множество нетерминальных символов подграмматики и модифицированной исходной грамматики не пересекаются, то синтаксический анализ для каждой из них может быть реализован отдельного процессора с магазинной памятью.
Выделим следующие подграмматики:
Основная подграмматика.
Подграмматика выражений.
Подграмматика логических выражений.
Подграмматика операторов.
Подграмматика типов.
Подграмматика переменных.
Основная подграмматика
Таблица нетерминалов
Имя нетерминала |
Описание |
P |
Программа |
DVA |
Объявления переменных |
DVE |
Объявления векторов |
COP |
Составной оператор |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "1.TXT" .
ГРАММАТИКА 1.
Терминалы :
voi = void ; mai = main ; = ;
= ; ; = ; Dev = ;
Cop = ;
Нетерминалы :
P = prog 1 ; Dva = DeclarVar 3 ;
Dve = DeclarVector 2 ;
Правила :
1) P -> voi mai Dva
2) Dva -> Dev ; Dva
3) Dva -> Dve
4) Dva -> Cop
5) Dve -> Dev ; Dve
6) Dve -> Cop
Обработка грамматики возможна;
Конец.
Подграмматика выражений
Таблица нетерминалов
Имя нетерминала |
Описание |
EX |
Выражение |
SAE |
Последовательность слагаемых |
AE |
Слагаемое |
ME |
Множитель |
SME |
Последовательность множителей |
VEC |
Вектор |
VAR |
Переменная |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "2.TXT" .
ГРАММАТИКА 2.
Терминалы :
+ = ; - = ; ++ = ;
-- = ; ~ = ; Vec = ;
/ = ; ( = ; ) = ;
Var = ;
Нетерминалы :
EX = 1 ; Exs = 5 ;
Sae = 2 ; Ae = 1 ;
Sme = 2 ; Me = 2 ;
Правила :
1) EX -> Exs Sae
2) Exs ->
3) Exs -> ++ Ae
4) Exs -> -- Ae
5) Exs -> Ae
6) Exs -> ~ Vec
7) Sae -> + Ae Sae
8) Sae -> - Ae Sae
9) Ae -> Me Sme
10) Sme -> / Me Sme
11) Sme ->
12) Me -> ( EX )
13) Me -> Var
Обработка грамматики возможна;
Конец.
Подграмматика логических выражений
Таблица нетерминалов:
Имя нетерминала |
Описание |
LEX |
Логическое выражеие |
EXP |
Выражение |
С |
Конъюнкция |
SC |
Последовательность конъюнкций |
REL |
Отношение |
LM |
Логический множитель |
SLM |
Последовательность логических множителей |
REO |
Операция отношения |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "3.TXT" .
ГРАММАТИКА 3.
Терминалы :
or = ; ( = ; ) = ;
not = ; Exp = ; < = ;
> = ; == = ; <= = ;
>= = ; != = ;
Нетерминалы :
Lex = 2 ; Sc = 2 ;
C = 1 ; SLM = 1 ;
LM = 2 ; Rel = 1 ;
Reo = 6 ;
Правила :
1) Lex -> C Sc
2) Lex -> Rel
3) Sc -> or C Sc
4) Sc ->
5) C -> LM SLM
6) SLM ->
7) LM -> ( Lex )
8) LM -> not LM
9) Rel -> Exp Reo
10) Reo -> < Exp
11) Reo -> > Exp
12) Reo -> == Exp
13) Reo -> <= Exp
14) Reo -> >= Exp
15) Reo -> != Exp
Обработка грамматики возможна;
Конец.
Подграмматика для операторов
Таблица нетерминалов
Имя нетерминала |
Описание |
COP |
Составной оператор |
OP |
Оператор |
ULO |
Непомеченный оператор |
SOP |
Последовательность операторов |
EQO |
Оператор присваивания |
IFO |
Условный оператор |
LEX |
Логическое выражение |
VAR |
Переменная |
EQS |
Отношение присваивания |
EXP |
Выражение |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "4.TXT" .
ГРАММАТИКА 4.
Терминалы :
Var = ; got = ; ID = ;
if = ; L = ; els = ;
cin = ; >> = ; cou = ;
<< = ; = = ; E = ;
+= = ; -= = ; *= = ;
/= = ; ; = ; : = ;
( = ; ) = ; ? = ;
Нетерминалы :
ULO = 6 ; EQO = 1 ;
Lab = 1 ; Elo = 2 ;
EQS = 5 ; Sop = 2 ;
Cop = 1 ; op = 2 ;
Правила :
1) ULO -> EQO
2) ULO -> got Lab
3) ULO -> if ( L ) Cop Elo
4) ULO -> cin >> Var
5) ULO -> cou << Var
6) ULO -> L ? E : E
7) EQO -> Var EQS
8) Lab -> ID
9) Elo -> els Cop
10) Elo ->
11) EQS -> = E
12) EQS -> += E
13) EQS -> -= E
14) EQS -> *= E
15) EQS -> /= E
16) Sop -> op ; Sop
17) Sop ->
18) Cop -> Sop
19) op -> Lab : ULO
20) op -> ULO
Обработка грамматики возможна;
Конец.
Подграмматика типов
Таблица нетерминалов
Имя нетерминала |
Описание |
BAS |
Базовый тип |
DEV |
Объявление переменной |
LETTER |
Буква |
SNL |
Последовательность букв или цифр |
NUMBER |
Число |
DVE |
Объявление вектора |
D |
Размерность вектора |
NNUM |
Последовательность цифр |
NATNUM |
Натуральное число |
IDENT |
Индентификатор |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "5.TXT" .
ГРАММАТИКА 5.
Терминалы :
V = ; int = ; flo = ;
boo = ; vec = ; [ = ;
] = ; ; = ; CI = ;
Нетерминалы :
Dev = 1 ; bas = 3 ;
Dve = 2 ; D = 1 ;
Правила :
1) Dev -> bas V
2) bas -> int
3) bas -> flo
4) bas -> boo
5) Dve -> vec V [ D ] ; Dve
6) Dve ->
7) D -> CI
Обработка грамматики возможна;
Конец.
Подграмматика переменных
Таблица нетерминалов
Имя нетерминала |
Описание |
VAR |
Переменная |
IDE |
Идентификатор |
VEC |
Вектор |
ELE |
Элемент вектора |
SEL |
Последовательность элементов вектора |
SEN |
Запись индекса элемента, если он есть |
IND |
Значение индекса элемента |
CI |
Целое число |
CF |
Вещественное число |
Л А Б О Р А Т О Р Н А Я Р А Б О Т А # 2
" Ввод, преобразование и анализ КС-грамматик "
Студент : КИТАЕВА Н.А. , группа : 4342 .
Сеанс : 16.12.07 , 23:41 .
Файл : "6.TXT" .
ГРАММАТИКА 6.
Терминалы :
Ide = ; [ = ; ] = ;
, = ; CF = ; CI = ;
Нетерминалы :
var = 3 ; Sel = 2 ;
Ele = 2 ; Sen = 2 ;
Ind = 1 ;
Правила :
1) var -> Ide
2) var -> [ Ele Sel ]
3) var -> CI
4) Sel -> , Ele Sel
5) Sel ->
6) Ele -> Ide Sen
7) Ele -> CF
8) Sen -> [ Ind ]
9) Sen ->
10) Ind -> CI
Обработка грамматики возможна;
Конец.