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.
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 ‘+’.
Esta explicación ha sido aportada por Pranjul Ahuja.
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