Рубрики

ВОРОТА | GATE-CS-2003 | Вопрос 59

Рассмотрим синтаксически направленное определение, показанное ниже.

S → id : = E  {gen (id.place = E.place;);}
E → E1 + E2   {t = newtemp ( ); gen (t = El.place + E2.place;); E.place = t}
E → id     {E.place = id.place;} 

Здесь gen — это функция, которая генерирует выходной код, а newtemp — это функция, которая возвращает имя новой временной переменной при каждом вызове. Предположим, что ti — это временные имена переменных, сгенерированные newtemp.
Для оператора «X: = Y + Z» 3-адресная кодовая последовательность, сгенерированная этим определением, имеет вид
(A) X = Y + Z
(B) t1 = Y + Z; X = t1
(С) t1 = Y; t2 = t1 + Z; X = t2
(D) t1 = Y; t2 = Z; t3 = t1 + t2; X = t3

Ответ: (Б)
Объяснение: Должно быть B. Производственное E -> E + E используется только один раз, и, следовательно, генерируется только одна временная переменная.
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2003 | Вопрос 59

0.00 (0%) 0 votes