📜  门| GATE-CS-2006 |第 59 题

📅  最后修改于: 2021-09-25 07:08:53             🧑  作者: Mango

考虑以下翻译方案。
S → ER
R → *E{print(“*”);}R | ε
E → F + E {print(“+”);} | F
F → (S) | id {打印(id.value);}
这里id是一个token,代表一个整数,id.value代表对应的整数值。对于输入’2 * 3 + 4’,这个翻译方案打印
(一) 2*3+4
(B) 2 * +3 4
(C) 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 ‘+’.

评估 :
语法定向翻译

此解释由Pranjul Ahuja 提供。
这个问题的测验