Рубрики

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

Рассмотрим следующую схему перевода.
S → ER
R → * E {print («*»);} R | ε
E → F + E {print («+»);} | F
F → (S) | id {print (id.value);}
Здесь id — токен, представляющий целое число, а id.value — соответствующее целочисленное значение. Для ввода '2 * 3 + 4' эта схема перевода печатает
(А) 2 * 3 + 4
(Б) 2 * +3 4
(С) 2 3 * 4 +
(D) 2 3 4 + *

Ответ: (D)
Пояснение: Предпосылки, необходимые для решения вопроса — Синтаксис направленного перевода и
Разбор дерева.

Explanation : We are given L-Attributed Syntax Directed Translation as
semantic actions like printf statements are inserted anywhere on the 
RHS of production (R → *E{print(“*”);}R). After constructing the parse tree 
as shown below from the given grammar, we will follow depth first order left 
to right evaluation in order to generate the final output.

Разобрать дерево:

Just follow the arrows in the picture (This is actually Depth first 
left to right evaluation ) and the moment we take exit from any child 
which is printf statement in this question, we print that symbol which 
can be a integer value or ‘*’ or ‘+’.

Оценка:

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

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

0.00 (0%) 0 votes