- •1. Постановка задачи
- •Исходные данные:
- •Описание синтаксиса входного языка:
- •Описание семантики входного языка:
- •Объявления и области действия
- •Операции.
- •Лексический анализ
- •Определение синтаксиса лексем
- •49 Таблица констант
- •Тестирование лексического анализатора
- •Описание кс-грамматики входного языка
- •Разбиение на подграмматики
- •Описание языка триад
- •Построение атрибутной транслирующей грамматики
- •Построение атрибутного дмп – процессора
- •Организация взаимодействия дмп-процессоров
Организация взаимодействия дмп-процессоров
Для организации взаимодействия процессоров модифицируем стандартный алгоритм синтаксического анализа следующим образом:
- дополним таблицу терминальных символов специальными символами, которые вызывают соответствующий ДМП – процессор по имени. При этом вызывающий ДМП – процессор должен выполнить переход к вызываемому процессору.
- вызываемый ДМП – процессор работает со своим магазином, а результаты выполнения возвращаются в вызывающий процессор.
№ |
имя |
описание |
0 |
Prog |
Главный вызывающий ДМП-процессор |
1 |
MCls |
Переход к процессору “главный класс”. |
2 |
Cls |
Переход к процессору “класс”. |
3 |
DecCls |
Переход к процессору “объявление класса”. |
4 |
Adr |
Переход к процессору “путь”. |
5 |
ConCls |
Переход к процессору “подключение класса”. |
6 |
DecPak |
Переход к процессору “объявление пакета”. |
7 |
listValues |
Переход к процессору “список параметров”. |
8 |
N |
Переход к процессору “new”. |
9 |
SVar |
Переход к процессору “простая переменная”. |
10 |
FCon |
Переход к процессору “константа без знака”. |
11 |
Con |
Переход к процессору “константа”. |
12 |
BrOp |
Переход к процессору “операция скобки”. |
13 |
EqOp |
Переход к процессору “операция присваивание”. Возвращает результат выполнения операции |
14 |
DecVar |
Переход к процессору “объявление переменной”. |
15 |
Val |
Переход к процессору “значение”. |
16 |
LUOp |
Переход к процессору “левая часть унарной операции”. |
17 |
UOp |
Переход к процессору “унарная операция”. Возвращает результат выполнения операции |
18 |
LMOp |
Переход к процессору “левая часть мультипликативной операции”. |
19 |
MOp |
Переход к процессору “ мультипликативная операция”. Возвращает результат выполнения операции |
20 |
LAdOp |
Переход к процессору “левая часть аддитивной операции”. |
21 |
AdOp |
Переход к процессору “аддитивная операция”. Возвращает результат выполнения операции |
22 |
IEqOp |
Переход к процессору “условное присваивание”. |
23 |
StrL |
Переход к процессору “длина строки”. Возвращает результат выполнения операции |
24 |
ConStr |
Переход к процессору “конкатенация строк”. Возвращает результат выполнения операции |
25 |
AcToStr |
Переход к процессору “доступ к строке”. Возвращает результат выполнения операции |
26 |
ChStr |
Переход к процессору “замена подстроки в строке”. Возвращает результат выполнения операции |
27 |
FnStr |
Переход к процессору “поиск подстроки в строке”. Возвращает результат выполнения операции |
28 |
StrOp |
Переход к процессору “строковая операция”. Возвращает результат выполнения операции |
29 |
Op |
Переход к процессору “операция”. Возвращает результат выполнения операции |
30 |
Blc |
Переход к процессору “блок кода”. |
31 |
CMet |
Переход к процессору “вызов метода”. Возвращает результат выполнения операции |
32 |
Met |
Переход к процессору “метод”. |
33 |
MMet |
Переход к процессору “метод main”. |
34 |
Att |
Переход к процессору “отношение”. Возвращает результат выполнения операции |
35 |
Ecv |
Переход к процессору “эквивалентность”. Возвращает результат выполнения операции |
36 |
RLogExp |
Переход к процессору “правая часть логического выражения”. Возвращает результат выполнения операции |
37 |
LogExp |
Переход к процессору “логическое выражение”. Возвращает результат выполнения операции |
38 |
Cyc |
Переход к процессору “цикл с предусловием”. |
39 |
Opif |
Переход к процессору “условный оператор”. Возвращает результат выполнения операции |