- •Описание атрибутно-транслирующих грамматик
- •1.Грамматика раздела описания программы
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
- •4. Грамматика раздела описания типов
- •5. Грамматика раздела описания переменных
- •8. Грамматика описания операторов
- •9. Грамматика видов операторов
- •10. Грамматика операторов ввода и вывода
- •11. Грамматика оператора присваивания
- •12. Грамматика операторов цикла, условного оператора и оператора безусловного перехода
- •13. Грамматика операторов над списком
- •14. Грамматика логических выражений
- •15. Грамматика арифметических выражений
- •16. Грамматика вызовов функций
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
16. Грамматика вызовов функций
Входные символы :
Имя |
Семантика |
Атрибуты |
CallFunc a |
Результат вызова функции |
a – синтезированный |
Vb |
Переменная из таблицы идентификаторов |
b– синтезированный |
Idс |
Идентификатор из таблицы идентификаторов |
с – синтезированный |
Intc |
Целое из таблицы промеж. значений |
с – синтезированный |
Numс |
Вещественное из таблицы промеж. значений |
с – синтезированный |
Bc |
Булевское из таблицы промеж. значений |
с – синтезированный |
Операционные символы
Имя символа |
Семантика |
Атрибуты |
{ВЫЗОВ EQ}a, {ВЫЗОВV}a, {ВЫЗОВCondition}a |
Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a |
a-синтезированный |
{ПОРЯДКОВЫЙ НОМЕР}p,q,r |
По адресу pв таблице идентификаторов находится переменная. Если она не перечислимого типа, то ошибка. Иначе в таблице перечислимых значений данного перечислимого типа ищется значениеq. Если оно найдено, то результат записывается в таблицу триад по новому адресуr |
p,q– унаследованные,r– синтезированный |
{ОБЪЕМ СПИСКА}p, q |
По адресу pв таблице идентификаторов находится переменная. Если она не является списком, то ошибка. В противном случае в таблицу промежуточных значений по адресуqзаносится количество элементов этого списка и поле «тип» помечается как «целое» |
p – унаследованный,q –синтезированный |
{ ПО НОМЕРУ В СПИСКЕ}p,q,r |
По адресу pв таблице идентификаторов ищется переменная. Если она не является списком, то ошибка. По адресуqв таблице констант ищется номер элемента, который нужно найти. Если тип этого номера – не целый или целый, но отрицателен, то ошибка. Если ошибок нет, в таблице найденного списка ищется элемент с заданным номером. В случае, когда к-во элементов меньше заданного номера – ошибка, иначе по адресуrв таблицу промежуточных значений записывается найденное значение. Тип промежуточного значения устанавливается как тип элементов списка |
p,q– унаследованные,r– синтезированный |
{ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}f,g,p,q |
Если f= 0, то в таблице идентификаторов ищется переменная и находится ее значение, а еслиf= 1, то в таблице констант ищется значение по адресуp. Далее если g= 0, то полученное значение преобразуется к целому типу, еслиg= 1- к вещественному. Схема преобразования указана в таблице. Полученное значение записывается в таблицу промежуточных значений по адресуr. Тип промежуточного значения в этой таблице устанавливается в зависимости от атрибутаg |
f,g– синтезированные,p– унаследованный,q- синтезированный |
{НАЙТИ ЗНАЧЕНИЕ}list,n, val,ind |
По адресу listв таблице идентификаторов ищется переменная. В зависимости от атрибутаnадресvalподходящего значения находится в таблице идентификаторов (n= 2) или промежуточных значений (n= 1). Далее генерируется триадаFNDlistvalи полученный результат записывается по адресуindв таблице промежуточных значений |
list,val– унаследованные,n,ind- синтезированные |
Таблица преобразований
Тип начального значения -> |
integer |
real |
Преобразовать к целому |
В качестве результата берется исходное значение |
Генерируется триада RTOI p |
Преобразовать к вещественному |
Генерируется триада ITOR p |
В качестве результата берется исходное значение |
Правила:
CallFunc a -> ord ( V {ВЫЗОВ V}с ) {ПОРЯДКОВЫЙ НОМЕР}p, q, r
p, q<-c
q<-c
r = НовоеЗначение
a<-r
CallFunc a -> qua ( Idb ) {ОБЪЕМ СПИСКА}p, q
p <- b
q = НовоеЗначение
a <- q
CallFunc a -> cou ( Idb , Intc ) {НОМЕР В СПИСКЕ}p, q, r
p <-b
q <-c
r =НовоеЗначение
a <- r
CallFunc a -> integer ( V {ВЫЗОВ V}c ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}0, 0, p, q
p <- c
q = НовоеЗначение
a <- q
CallFunc a -> real ( V {ВЫЗОВ V}c ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}0, 1, p, q
p <- c
q = НовоеЗначение
a <- q
CallFunc a -> integer ( Intc ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}1, 0, p, q
p <- c
q = НовоеЗначение
a <- q
CallFunc a -> integer ( Numc ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}1, 0, p, q
p <- c
q = НовоеЗначение
a <- q
CallFunc a -> real ( Intc ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}1, 1, p, q
p <- c
q = НовоеЗначение
a <- q
CallFunc a -> real ( Numc ) {ПРЕОБРАЗОВАТЬ ЗНАЧЕНИЕ}1, 1, p, q
f , g <- 1
p <- c
q = НовоеЗначение
a <- q
CallFunca -> find ( Idb , Intc ) {НАЙТИ ЗНАЧЕНИЕ}list, 1, val, ind
list <- b
val <- c
ind = НовоеЗначение
a <- ind
CallFunca -> find ( Idb , Numc ) {НАЙТИ ЗНАЧЕНИЕ}list, 1, val, ind
list <- b
val <- c
ind = НовоеЗначение
a <- ind
CallFunca -> find ( Idb , Bc ) {НАЙТИ ЗНАЧЕНИЕ}list, 1 , val, ind
list <- b
val <- c
ind = НовоеЗначение
a <- ind
CallFunca -> find ( Idb , V {ВЫЗОВ V}c ) {НАЙТИ ЗНАЧЕНИЕ}list, 2, val, ind
list <- b
val <- c
ind = НовоеЗначение
a <- ind
НоваяМетка – выдает адрес первой свободной позиции в таблице меток
НовыйИдентификатор – выдает адрес первой свободной позиции в таблице идентификаторов
НовыйТип выдает адрес первой свободной позиции в таблице пользовательских типов
НоваяСекция - выдает адрес первой свободной позиции в таблице секций
НовоеЗначение - выдает адрес первой свободной позиции в таблице промежуточных значений
Управляющие таблицы для ДМП-процессоров
Грамматика описания программы
---- функция "перенос" ( количество элементов : 17 * 12 ) :
ФУНКЦИИ ТИПА "ПЕРЕНОС-СВЕРТКА" :
---- функция "перенос" ( количество элементов : 17 * 12 ) :
========================================================
I Ibeg!end!. !; !prg!id !OpD!LbD!CsD!TpD!VrD!EpsI
========================================================
IS IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
IPrN IПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ПЕР!ПЕР!ПЕР!ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
IObD IПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ПЕР!ПЕР!ПЕР!ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
IObj IОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
Ibeg IОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
Iend IОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
I. IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
I; I C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C ! C ! C ! C !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
Iprg IОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
Iid I C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C ! C ! C ! C !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
IOpD IОШ !ПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
ILbD IОШ !ОШ !ОШ ! C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
ICsD IОШ !ОШ !ОШ ! C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
ITpD IОШ !ОШ !ОШ ! C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
IVrD IОШ !ОШ !ОШ ! C !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
I ┴ IПЕР!ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ !ПЕР!ПЕР!ПЕР!ПЕР!ОШ I
I------I---+---+---+---+---+---+---+---+---+---+---+---I
I ┴ S IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ДОПI
========================================================
---- функция "свертка" ( количество элементов : 16 * 15 ) :
=====================================================
I I1 !2 !3 !4 !5 !6 !7 !8 !9 !10!11!12!13!14!15I
=====================================================
IS IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IPrN IОШ!ОШ!ОШ!ОШ!5 !6 !ОШ!ОШ!ОШ!10!11!12!13!14!15I
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IObD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!12!13!14!15I
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IObj IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Ibeg IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iend IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I. IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I; IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iprg IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
Iid IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IOpD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
ILbD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
ICsD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
ITpD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
IVrD IОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШ!ОШI
I------I--+--+--+--+--+--+--+--+--+--+--+--+--+--+--I
I┴I1 !2 !3 !4 !5 !6 !7 !8 !9 !10!11!12!13!14!15I
=====================================================