b) a 2+b / b 4*+ при a = 4, b = 3 ;
c) a b not and a or not при a = b = true ;
d) x y*0 > y 2 x - < and при x = y = 1 .
66. Записать в ПОЛИЗе следующие операторы языка Си и, используя стек,
выполнить их при указанных начальных значениях переменных:
а) if (x != y) x = x+1 ; при x = 3 ;
b) if (x > y) x = y ; else y = x ; при x = 5, y = 7;
c) while (b > a) b = b-a; ; при a = 3, b = 7;
*d) do {x = y; y = 2*y;} while (x < k); при y = 2; k = 15;
e) S = 0; for (i = 1; i <= k; i = i + 1) S = S + i*i; при k = 3 ;
f) switch (k) {
case 1: a = not a; break;
case 2: b = a or not b ;
case 3: a = b ;
}
при k = 2, a = b = false .
*67. Используя стек, выполнить следующие действия, записанные в ПОЛИЗе,
при x = 9, y = 15 (считаем,что элементы ПОЛИЗа перенумерованы с 1).
z, x, y, *, :=, x, y, <>, 30, !F, x, y, <, 23, !F, y, y, x, -, :=, 28, !, x, x, y, -, :=, 6, !, z, z,
x, /, :=
Описать заданные действия на Си, не используя оператор goto.
68. Предложить ПОЛИЗ для следующих операторов. Вставить в грамматику
действия для ее порождения ( генерация происходит во время синтаксического
анализа методом рекурсивного спуска).
a) for I := E1 to E2 do S (оператор цикла в Паскале)
b) case E of (оператор выбора в Паскале)
c1: S1; c2: S2; ... cn: Sn
end
c) repeat S1; S2; ... ;Sn until B (оператор цикла в Паскале)
*d) вставить в грамматику действия для порождения ПОЛИЗа оператора
goto.
P program D; S { S } end
D ...
S L: S’ | S’
S’ ... | goto L | ...
L - идентификатор
*e) if ( E ) S
1
; S
2
; S
3
семантика этого оператора такова: вычисляется значение выражения Е; если его
значение меньше 0, то выполняется оператор S
1
;
если равно 0 - оператор S
2
, иначе -
оператор S
3
*f) choice ( S
1
; S
2
; S
3
), E
семантика этого оператора такова: вычисляется значение выражения Е; если его
значение равно i, то выполняется оператор S
i
для i = 1, 2, 3; иначе оператор choice
эквивалентен пустому оператору.