PUERTA | PUERTA-CS-2005 | Pregunta 85

Considere la siguiente expresión gramatical. Las reglas semánticas para el cálculo de expresiones se indican junto a cada producción gramatical.

 E → number 	 E.val = number. val
    | E '+' E 	 E(1).val = E(2).val + E(3).val
    | E '×' E	 E(1).val = E(2).val × E(3).val

La gramática anterior y las reglas semánticas se envían a una herramienta yacc (que es un generador de analizador LALR (1)) para analizar y evaluar expresiones aritméticas. ¿Cuál de los siguientes es verdadero acerca de la acción de yacc para la gramática dada?
(A) Detecta la recurrencia y elimina la recurrencia
(B) Detecta el conflicto de reducción-reducción y resuelve
(C) Detecta el conflicto de cambio-reducción y resuelve el conflicto a favor de un cambio sobre una acción de reducción
(D) Detecta el cambio -reduce el conflicto, y resuelve el conflicto a favor de una acción de reducción sobre cambio

Respuesta: (C)
Explicación:  


La resolución de conflictos de yacc en segundo plano
se realiza utilizando las siguientes reglas: se prefiere cambiar a reducir mientras cambia/reduce el conflicto.
Primero se prefiere reducir sobre otros, mientras que reduce/reduce el conflicto.

Puede responder a esta pregunta directamente construyendo la tabla de análisis LALR(1), aunque es un proceso que toma tiempo. Para responder más rápido, uno puede ver intuitivamente que esta gramática seguramente tendrá un conflicto shift-reduce. En ese caso, dado que se trata de una pregunta de opción única, la opción (C) será la respuesta correcta.

Una explicación infalible sería generar la tabla de análisis LALR(1), que es un proceso largo. Una vez que tenemos la tabla de análisis con nosotros, podemos ver claramente que
i. reducir/reducir el conflicto no surgirá en la gramática anterior
ii. El conflicto shift/reduce se resolverá dando preferencia a shift, por lo tanto, haciendo que la calculadora de expresiones sea asociativa a la derecha.

Según las conclusiones anteriores, la única opción correcta parece ser (C).

Referencia:

http://dinosaurio.compilertools.net/yacc/

Esta solución es aportada por .
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 *