- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
S– атрибутный дмп процессор
В S-атрибутном ДМП-процессоре каждый магазинный символ имеет конечное множество полей для представления атрибутов. Магазинный символ сn-атрибутами представляется в магазинеn+1 ячейками памяти, верхняя из которых содержит имя символа, а остальные поля для атрибутов.
Поля магазинного символа заполняются значениями атрибутов в момент вталкивания символов в магазин и не изменяются до момента выталкивания его из магазина.
В S-атрибутном ДМП-процессоре операция переноса расширяется таким образом, что значения атрибутов переносимого входного символа помещаются с соответствующие поля вталкиваемого при переносе магазинного символа.
Когда выполняется операция свертки для правила с номером i, верхние символы магазина представляют правую часть i-го правила вывода входной грамматики, а поля магазинных символов содержат значения атрибутов соответствующих символов грамматики. Расширенная операция свертки использует эти значения для вычисления значений всех атрибутов операционных символов, связанных с правилом вывода транслирующей грамматики, и значений всех атрибутов нетерминала из левой части правой. Значения атрибутов операционных символов используются для выдачи результатов или выполнения других действий, определяемых этими символами
Пример атрибутного перевода для арифметических выражений
i5 + i7 * i2 -> {*}7,2,R1 {+}5,R1,R2
|
|
|
|
|
|
|
|
|
+ |
|
|
i |
P |
T |
AEX |
AEX | |||||
|
5 |
5 |
5 |
5 |
5 | |||||
|
|
|
|
|
|
+ i7 * i2 + i7 * i2 + i7 * i2 + i7 * i2 i7 * i2
|
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
2 | |||||
|
|
|
|
* |
* | |||||
|
i |
P |
T |
T |
T | |||||
|
7 |
7 |
7 |
7 |
7 | |||||
|
+ |
+ |
+ |
+ |
+ | |||||
|
AEX |
AEX |
AEX |
AEX |
AEX | |||||
|
5 |
5 |
5 |
5 |
5 | |||||
|
|
|
|
|
|
* i2 * i2 * i2 i2
|
P |
|
|
|
|
|
|
2 |
|
| |||
|
* |
|
| |||
|
T |
T |
| |||
|
7 |
R1 |
| |||
|
+ |
+ |
| |||
|
AEX |
AEX |
AEX | |||
|
5 |
5 |
R2 | |||
|
|
|
|
{*}7,2,R1 {*}5,R1,R2
Управляющая таблица подграмматики оператора
МАТРИЦА ПРЕДШЕСТВОВАНИЯ :
---- ( количество элементов : 22 * 22 ) :
=====================================================================
I IOP !LOP!OPS!GOT!IN !LIN!MAT!( !) != !; !: !, !id !got!scn!
=====================================================================
IOP I ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
ILOPI ! ! = ! < ! < ! ! < ! ! ! ! < ! ! ! < ! < ! < I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IOPSI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IGOTI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IIN I ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
ILINI ! ! ! ! ! ! ! ! = ! ! ! ! = ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IMATI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I( I ! ! ! ! !=< ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I) I ! ! ! ! ! ! ! ! ! ! = ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I= I ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I; I ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I: I ! ! ! ! ! ! ! ! ! ! > ! ! ! > ! > ! > I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I, I ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Iid I ! ! ! ! ! ! ! ! ! = ! = ! = ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IgotI ! ! ! ! ! ! ! ! ! ! ! ! ! = ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IscnI ! ! ! ! ! ! ! = ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IvarI ! ! ! ! ! ! ! ! > ! ! ! ! > ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
ImexI ! ! ! ! ! ! ! ! ! ! = ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IopnI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IsopI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IoutI ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! I
I---I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I + I ! < ! < ! < ! < ! ! < ! ! ! ! < ! ! ! < ! < ! < I
=====================================================================
=============================
I Ivar!mex!opn!sop!out!EpsI
=============================
IOP I ! ! ! ! ! I
I---I---+---+---+---+---+---I
ILOPI ! ! < ! < ! < ! I
I---I---+---+---+---+---+---I
IOPSI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
IGOTI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
IIN I ! ! ! ! ! > I
I---I---+---+---+---+---+---I
ILINI ! ! ! ! ! I
I---I---+---+---+---+---+---I
IMATI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
I( I < ! ! ! ! ! I
I---I---+---+---+---+---+---I
I) I ! ! ! ! ! I
I---I---+---+---+---+---+---I
I= I ! = ! ! ! ! I
I---I---+---+---+---+---+---I
I; I ! ! ! ! ! > I
I---I---+---+---+---+---+---I
I: I ! ! > ! > ! > ! I
I---I---+---+---+---+---+---I
I, I = ! ! ! ! ! I
I---I---+---+---+---+---+---I
Iid I ! ! ! ! ! I
I---I---+---+---+---+---+---I
IgotI ! ! ! ! ! I
I---I---+---+---+---+---+---I
IscnI ! ! ! ! ! I
I---I---+---+---+---+---+---I
IvarI ! ! ! ! ! I
I---I---+---+---+---+---+---I
ImexI ! ! ! ! ! I
I---I---+---+---+---+---+---I
IopnI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
IsopI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
IoutI ! ! ! ! ! > I
I---I---+---+---+---+---+---I
I + I ! ! < ! < ! < ! I
=============================
ФУНКЦИИ ТИПА "ПЕРЕНОС-СВЕРТКА" :
---- функция "перенос" ( количество элементов : 23 * 15 ) :
====================================================================
I I( !) != !; !: !, !id !got!scn!var!mex!opn!sop!out!EpsI
====================================================================
IOP IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
ILOP IОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ПЕР!ПЕР!ПЕР!ОШ !ОШ !ПЕР!ПЕР!ПЕР!ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IOPS IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IGOT IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IIN IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
ILIN IОШ !ПЕР!ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
IMAT IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I( IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I) IОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I= IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I; IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I: IОШ !ОШ !ОШ ! C !ОШ !ОШ ! C ! C ! C !ОШ !ОШ ! C ! C ! C !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I, IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Iid IОШ !ОШ !ПЕР!ПЕР!ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Igot IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Iscn IПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Ivar IОШ ! C !ОШ !ОШ !ОШ ! C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Imex IОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Iopn IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Isop IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
Iout IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I + IОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ПЕР!ПЕР!ПЕР!ОШ !ОШ !ПЕР!ПЕР!ПЕР!ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---+---+---+---I
I + OP IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ДОПI
====================================================================
---- функция "свертка" ( количество элементов : 22 * 15 ) :
=====================================================
I I1 !2 !3 !4 !5 !6 !7 !8 !9 !10!11!12!13!14!15I
=====================================================
IOP IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
ILOP IОШ!ОШ!3 !4 !5 !6 !7 !8 !9 !10!11!12!ОШ!ОШ!15I
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IOPS IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IGOT IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IIN IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
ILIN IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IMAT IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I( IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!13!14!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I) IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I= IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I; IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I: IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I, IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iid IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Igot IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iscn IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Ivar IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Imex IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iopn IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Isop IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iout IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I + I1 !2 !3 !4 !5 !6 !7 !8 !9 !10!11!12!ОШ!ОШ!15I
=====================================================
--- правила грамматики :
1) OP -> LOP OPS
2) OP -> OPS
3) LOP -> id :
4) OPS -> opn
5) OPS -> GOT
6) OPS -> IN
7) OPS -> out
8) OPS -> MAT
9) OPS -> sop
10) OPS -> ;
11) GOT -> got id ;
12) IN -> scn ( LIN ) ;
13) LIN -> var
14) LIN -> LIN , var
15) MAT -> id = mex ;
