- •Задание на курсовую работу
- •1. Описание входного языка.
- •1.2.3. Конструкции входного языка.
- •Если результат false, то происходит переход на оператор2, в противном случае выполняется оператор1 и происходит переход в конец оператора if-then-else. Лексический анализатор.
- •Представление основных операторов в полиз
- •Операционный символ { вычислить адрес }p, n, r
- •Операционный символ {сложить}p, q, r
- •Операционный символ {вычесть}p, q, r
- •Операционный символ { умножить }p, q, r
- •Операционный символ { делить }p, q, r
- •Операционный символ { общий знаменатель }p, q, r
- •Операционный символ { дизъюнкция }p, q, r
- •Операционный символ { конъюнкция }p, q, r
- •Операционный символ { отрицание }p, q
- •Операционный символ { меньше }p, q, r
- •Операционный символ { отношение }q1, q2, q3, r
- •Операционный символ { id }n
- •Операционный символ { init }n, V, r
- •Операционный символ { нач_ц }q1, q2, q3, m1, m2, r2
- •Операционный символ { кон_ц } q4, q5, m1, m2
- •Операционный символ { присвоить }p, q
- •Операционный символ { имя }q, r
- •Операционный символ { последовательность имён }p, q, r
- •Операционный символ {индекс}p, r
- •Операционный символ {массив}t, q, r
- •Операционный символ { последовательность индексов }p, q, r
- •Операционный символ {диапазон}p, q, r
- •Операционный символ {создать метку}p, r
- •Описание типа
- •Структуры данных дмп-процессора
- •Структура символа
- •Магазин дмп процессора
- •Часть 1 :
- •Часть 2 :
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Разработка дмп-процессора
Начальная конфигурация L-атрибутного ДМП-процессора следующая:
P |
|
В случае замены нетерминала X в верхушке магазина в соответствии с управляющей таблицей M(X, ) = (, y) L-атрибутный ДМП-процессор вталкивает в магазин цепочку символов из правой части распознаваемого правила и выдает цепочку операционных символов y. При этом вычисляются атрибуты операционных символов, не вталкиваемых в магазин, и заполняются поля атрибутов магазинных символов и символов цепочки , вталкиваемых в магазин.
Примечание:
В случае, когда верхний символ магазина X – операционный символ, то операция выдача ВЫДАЧА(Х) ДМП-процессора расширяется следующим образом:
1)
Значения унаследованных атрибутов извлекаются из соответствующих полей верхнего
магазинного символа и используется затем при выдаче символа в выходную цепочку.
2)
Значение синтезированных атрибутов вычисляются по правилам вычисления атрибутов, связанных с данным операционным символом, после чего значение каждого синтезированного атрибута помещаются во все поля из списка полей, на который указывает соответствующее поле верхнего магазинного символа.
Взаимодействие дмп-процессоров
Поскольку перевод описан 7-ю транслирующими атрибутными грамматиками, то он должен быть реализован при помощи 7-и взаимосвязанных ДМП-процессоров
Вызывающий ДМП-процессор.
В основе этого процессора лежит АТГ, в которой основной символ грамматики – специальный терминальный символ. Когда этот символ находится наверху магазина, данный процессор должен выполнить переход к вызываемому процессору
Вызываемый ДМП-процессор.
Поскольку каждый процессор должен работать со своим магазином, то в глобальный магазин вталкивается символ “дно магазина” и анализ начинается так, как если бы магазин был пуст.
Алгоритм работы дмп-процессора
Описание алгоритма:
1) Затолнуть в стек символ “дно стека”
2) Затолнуть в стек символ начальный символ основной грамматики P(без атрибутов)
3) while TRUE do
4) | распознать входной символ (i)
5) | распознать символ стека (j)
6) | if (j = 0) then {операционный символ}
7) | | вызов соответствующей операционному символу функции
8) | | передать данные по ссылкам вниз
9) | | удалить символ из стека
10) | else
11) | case команда(i, j) of
12) | “Замена”:
13) | произвести замену по правилу(код команды(i, j))
14) | “Выброс”:
15) | | посмотреть на тип верхнего символа стека и присвоить 16) | | атрибутам непосредственные значения
17) | | протолкнуть данные по ссылкам вниз
18) | | удалить из стека
19) | “Ошибка”:
20) | выйти с ошибкой(код ошибки - код команды(i,j))
21) | “Вызов”:
22) | | поместить “дно стека” после первого элемента в
23) | | зависимости от кода команды(i, j)
24) | | вызвать функцию, соответствующую ДМП-процессору
25) | “Возврат”:
26) | | удалить верхний символ “дно стека”
27) | | выйти из функции ДМП-процессора
28) end