PUERTA | PUERTA-CS-2006 | Pregunta 59

Considere el siguiente esquema de traducción.
S → ER
R → *E{imprimir(“*”);}R | ε
E → F + E {imprimir («+»);} | F
F → (S) | id {print(id.value);}
Aquí id es un token que representa un número entero e id.value representa el valor entero correspondiente. Para una entrada ‘2 * 3 + 4’, este esquema de traducción imprime
(A) 2 * 3 + 4
(B) 2 * +3 4
(C) 2 3 * 4 +
(D) 2 3 4+*

Respuesta: ( D)
Explicación: Antecedentes necesarios para resolver la pregunta: traducción dirigida por la sintaxis y
construcción del árbol de análisis sintáctico.

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.

Árbol de análisis:
parse-tree

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 ‘+’.

Evaluación :
syntax-directed-translation

Esta explicación ha sido aportada por Pranjul Ahuja.

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *