Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные ТЯПиМТ.doc
Скачиваний:
18
Добавлен:
09.11.2019
Размер:
693.76 Кб
Скачать

2.5Перевод условных выражений в опз

Пусть имеется условие вида:

Это условие в языках программирования записывается как условное выражение вида:

y=if x=<0 then a+b else c*d;

В отличие от простых выражений, где порядок выполнения действий определяется старшинством операций или скобками и в процессе выполнения программы этот порядок не меняется, в условных выражениях он изменяется в зависимости от значения условия (в нашем примере x <= 0).

Таким образом, понятие условного выражения должно быть также введено в ОПЗ представления исходной программы. Для этого вводятся так называемые динамические деревья.

Рассмотрим ряд понятий и особенностей для динамических деревьев:

  • узлы и ветви деревьев могут помечаться метками;

  • пустой узел - это такой узел, в котором отсутствует операция. Из пустого узла может исходить любое количество ветвей. Пустой узел вводится для объединения нескольких последовательных действий или разветвления некоторого вычислительного процесса;

  • условный оператор перехода по значению 'ложь'. Оператор имеет следующее представление:

<условие> <метка> УПЛ

  • оператор безусловного перехода:

<метка> БП

С учетом введенных понятий ОПЗ выражения

y+(IF a>b THEN x+y ELSE x+2)

принимает следующий вид:

yab>M1 УПЛ x1+M2 БП М1: x2+M2:+

Для обобщения алгоритма Дейкстры на условные выражения требуется модифицировать таблицу приоритетов, исходя из следующих соображений. Нетрудно заметить, что IF играет роль открывающей скобки, а THEN и ELSE - запятых. Теперь с учетом данного обстоятельства модифицированная таблица приоритетов примет следующий вид (табл. 2.4).

Таблица 2.4

Входной элемент

Приоритет

IF ( [ АЭМ Ф

0

, ) ] THEN ELSE

1

V

2

&

3

¬

4

Отношения

5

+ -

6

* /

7

возведение в степень

8

Обработка символов операций будет дополнена правилами обработки ключевых слов условных выражений следующим образом:

  • символ IF из входной строки заносится в стек;

  • символ THEN выталкивает в выходную строку все операции из стека до ближайшего IF. В стеке к символу IF добавляется рабочая метка Мi и после этого в выходную строку записывается часть Мi УПЛ;

  • ELSE выталкивает из стека все символы до ближайшего IF Мi. IF Mi превращается в IF Mi+1 и в выходную строку выталкивается часть Мi+1 БП Мi:

  • Символ «)» указывает на конец условного выражения и выталкивает из стека все символы до ближайшего символа «(», при этом сам IF уничтожается, а в выходную строку помещается метка Мi+1: .

Например, для приведенного выражения процесс перевода в ОПЗ имеет вид:

Выходная строка

y

a

b

>

M1 УПЛ

x

1

+

M2 БП M1:

x

2

+

M2:

-

С Т Е К

-

(

IF

>

IF M1

+

IF M2

+

-

(

IF

(

IF M1

(

IF M2

-

-

(

-

(

-

-

-

Входная строка

y

-

(

IF

a

>

b

THEN

x

+

1

ELSE

x

+

2

)

Примечание. Описанная выше обработка условных выражений связана с правильной организацией передачи управления внутри объектного кода, что и составляет внутреннюю семантику обработки условных выражений в ОПЗ.