Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по ТЯП. Вариант 5.doc
Скачиваний:
16
Добавлен:
01.05.2014
Размер:
975.87 Кб
Скачать

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

НоваяМетка – выдает адрес первой свободной позиции в таблице меток

НовыйИдентификатор – выдает адрес первой свободной позиции в таблице идентификаторов

НовыйТип выдает адрес первой свободной позиции в таблице пользовательских типов

НоваяСекция - выдает адрес первой свободной позиции в таблице секций

НовоеЗначение - выдает адрес первой свободной позиции в таблице промежуточных значений

Управляющие таблицы для ДМП-процессоров

  1. Грамматика описания программы

---- функция "перенос" ( количество элементов : 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

=====================================================