考虑以下翻译方案。
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 提供。
这个问题的测验