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

13. Грамматика операторов над списком

Операционные символы

Имя символа

Семантика

Атрибуты

{ВЫЗОВ EQ}a, {ВЫЗОВV}a, {ВЫЗОВCondition}a

Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a

a-синтезированный

{ДОБАВИТЬ}list, val, n

В списке идентификаторов ищется значение переменной по адресу list. Еслиn= 1, то поиск по адресуvalпроизводится в таблице промежуточных значений, еслиn= 2 – в таблице идентификаторов. Далее, если типы значений по адресамlistиvalне совпадают, то ошибка, иначе в конец списка значений по адресуlistдобавляется один элемент, куда копируется значение из адресаval.

val,list– унаследованные,n– синтезированный

{КОНКАТЕНАЦИЯ}list1, list2

В таблице идентификаторов ищутся элементы по адресу list1 иlist2. Если эти переменные не списки или типы элементов этих списков не совпадают, то ошибка. Иначе список значений по адресуlist1 дополняется элементами спискаlist2

list1, list2– унаследованные

{УДАЛИТЬ ЭЛЕМЕНТ} list, ind

В таблице идентификаторов ищутся элементы по адресу listиind. Если переменная по адресуlistне список или переменная по адресуindне целая или отрицательная, то ошибка. Если количество элементов меньше заданного номера, ничего не удаляется. В противном случае из полученного списка удаляется элемент с полученным номером и перенумеровываются все элементы, с большими номерами (их номера уменьшаются на 1)

Правила

OList -> add ( Ida , Intb ) {ДОБАВИТЬ}list, val, 1

list <- a

val <- b

OList -> add ( Ida , Numb ) {ДОБАВИТЬ}list, val, 1

list <- a

val <- b

OList -> add ( Ida , Bb ) {ДОБАВИТЬ}list, val, 1

list <- a

val <- b

OList -> add ( Ida , V {ВЫЗОВ V}c ) {ДОБАВИТЬ}list, val, 2

list <- a

val <- с

OList -> add ( Ida , EQ {ВЫЗОВ EQ}c ) {ДОБАВИТЬ} list, val, 1

list <- a

val <- c

OList -> add ( Ida , Condition {ВЫЗОВ Condition}c) {ДОБАВИТЬ}list, val, 1

list <- a

val <- c

OList -> concat ( Ida , Idb ) {КОНКАТЕНАЦИЯ}list1, list2

list1 <- a

list2 <- b

OList -> remove ( Ida , Intb ) {УДАЛИТЬ ЭЛЕМЕНТ}list, ind

list <- a

ind <- b

14. Грамматика логических выражений

Входные символы

Имя

Семантика

Атрибуты (все синтезированы)

Conditiona

Логическое выражение, значение которого хранится в таблице промежуточных значений по адресу a

a

Z1a

Логическое слагаемое, значение которого хранится в таблице промежуточных значений по адресу a

a

Z2a

Логический множитель, значение которого хранится в таблице промежуточных значений по адресу a

a

Z3a

Логический терм, значение которого хранится в таблице промежуточных значений по адресу a

a

Z4a

Логический операнд, значение которого хранится в таблице промежуточных значений по адресу а

a

F1a

Остаток логической суммы, значение которого хранится в таблице промежуточных значений по адресу a

a

F2a

Остаток логического произведения, значение которого хранится в таблице промежуточных значений по адресу a

a

Signa

Знак сравнения. Его атрибут – адрес соответствующего знака (<, >=, <>) в таблице знаков операций

a

EQ

Арифметическое выражение

a

Операционные символы:

Имя символа

Семантика

Атрибуты

{ВЫЗОВ EQ}a, {ВЫЗОВV}a, {ВЫЗОВCondition}a

Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a

a-синтезированный

{НЕ}с, res

Генерируется триада NOTc, которая записывается в таблице триад под адресомres

С –унаследованный,res - синтезированный

{И}m1, m2, res

Генерируется триада ANDm1m2, которая записывается в таблице триад под адресомres

m1,m2 – унаследованные,

res– синтезированный

{ИЛИ}m1, m2, res

Генерируется триада ORm1m2, которая записывается в таблице триад под адресомres

m1,m2 – унаследованные,

res– синтезированный

{СРАВНЕНИЕ}m1, m2, cod, res

Генерируется триада по таблице сравнений, приведенной далее

m1,m2,cod– унаследованные,

res– синтезированный

Таблица сравнений

Код операции (code)

Тип первого операнда m1

Тип второго операнда m2

Генерируемая триада

5 (=)

Типы совпадают и равны integer

=I m1 m2

5 (=)

Типы совпадают и равны real

=R m1 m2

5 (=)

Типы совпадают и равны boolean

=B m1 m2

5 (=)

Типы не совпадают

ОШИБКА

6 (<>)

Типы совпадают и равны integer

<>I m1 m2

6 (<>)

Типы совпадают и равны real

<>R m1 m2

6 (<>)

Типы совпадают и равны boolean

<>B m1 m2

6 (<>)

Типы не совпадают

ОШИБКА

7 (>)

Типы совпадают и равны integer

>I m1 m2

7 (>)

Типы совпадают и равны real

>R m1 m2

7 (>)

Типы совпадают и равны boolean

>B m1 m2

7 (>)

Типы не совпадают

ОШИБКА

8 (<)

Типы совпадают и равны integer

<I m1 m2

8 (<)

Типы совпадают и равны real

<R m1 m2

8 (<)

Типы совпадают и равны boolean

<B m1 m2

8 (<)

Типы не совпадают

ОШИБКА

9 (>=)

Типы совпадают и равны integer

>=I m1 m2

9 (>=)

Типы совпадают и равны real

>=R m1 m2

9 (>=)

Типы совпадают и равны boolean

>=B m1 m2

9 (>=)

Типы не совпадают

ОШИБКА

10 (<=)

Типы совпадают и равны integer

<=I m1 m2

10 (<=)

Типы совпадают и равны real

<=R m1 m2

10 (<=)

Типы совпадают и равны boolean

<=B m1 m2

10 (<=)

Типы не совпадают

ОШИБКА

Правила

Condition a -> Z1b F1c {ИЛИ}m1, m2, res

m1 <- b

m2 <- c

res = НоваяТриада

a <- res

Condition a -> Z1b

a <- b

Z1a -> Z2b F2 c {И}m1, m2, res

m1 <- b

m2 <- c

res = НоваяТриада

a <- res

Z1a -> Z2b

a<- b

Z2a -> Z3b

a <- b

Z3a -> not Z3b {НЕ}c, res

c <- b

res = НоваяТриада

a <- res

Z3a -> Z4b

a <- b

Z4a -> V {ВЫЗОВ V}c

c= Новая Триада

a<-c

Z4a -> Bb

a <- b

Z4a -> (EQ {ВЫЗОВ EQ}c1 Sgncd EQ {ВЫЗОВ EQ}c2 ) {СРАВНЕНИЕ}m1, m2, cod, res

m1 <- c1

m2 <- c2

cod <- cd

res = НоваяТриада

a <- res

Z4a -> (Condition {ВЫЗОВ Condition}c )

с = НоваяТриада

a <- c

Z4a -> ( Condition {ВЫЗОВ Condition}c1 Sgncd Condition {ВЫЗОВ Condition}c2) {СРАВНЕНИЕ}m1, m2, cod, res

с1, с2 = НоваяТриада

m1 <-c1

m2 <-c2

cod <- cd

res = НоваяТриада

a <- res

F1a -> or Z1b F1c {ИЛИ}m1, m2, res

m1 <- b

m2 <- c

res = НоваяТриада

a <-res

F1a-> or Z1b

a <- b

F2a -> and Z2b F2c {И}m1, m2, res

m1 <- b

m2 <- c

res = НоваяТриада

a <- res

F2a -> and Z2b

a <- b

Sgncd-> < code

cd <- code

Sgncd-> > code

cd <- code

Sgncd-> = code

cd <- code

Sgncd-> <> code

cd <- code

Sgncd-> <= code

cd <- code

Sgncd-> >=code

cd <- code