1 / 11

Animaciones PL-Práctica 12

Animaciones PL-Práctica 12. CUP. Análisis con CUP. Introducción. La expresión que va a ser analizada es la siguiente: Se utilizará la misma nomenclatura que en clase, atributos atributos .s para los sintetizados. No se tienen atributos .h pues nos encontramos ante DDS

hamish
Download Presentation

Animaciones PL-Práctica 12

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Animaciones PL-Práctica 12 CUP

  2. Análisis con CUP • Introducción. • La expresión que va a ser analizada es la siguiente: • Se utilizará la misma nomenclatura que en clase, atributos atributos .s para los sintetizados. No se tienen atributos .h pues nos encontramos ante DDS • Para trasladar el valor de los no terminales se han declarado estos como booleanos de manera que puedan ascender libremente en el árbol del analizador. Por lo tanto NT.s es un valor booleanos • Dado que para entender el funcionamiento se necesita una única expresión. Se omite en el gráfico la primera producción que da lugar a la posibilidad de introducir varias cadenas: A ::= L ; A | L ;

  3. Análisis con CUP Cuando realizamos el análisis con DDS todo lo que podemos es trabajar con atributos sintetizados, por lo tanto el esquema de ejecución queda como sigue.

  4. Análisis con CUP Tras comenzar el análisis las producciones se van desarrollando sin realizar ninguna acción semántica hasta llegar a reconocer el token número con valor 234. El valor 234 asciende hacia arriba.

  5. Análisis con CUP Lo mismo pasa con el token <num,12> . Este token también asciende para ponerse como atributo sintetizado de num.

  6. Análisis con CUP num1.lex = 234 num2.lex = 12 J = 234 == 12 = false Una vez que en tenemos los dos operandos, salta la acción semántica de J realizando la comparación de igualdad entre ambos números. En este caso la acción semántica que se dispara es: C ::= numero:num1 opigual numero:num2 {: int op1 = Integer.parseInt(num1); int op2 = Integer.parseInt(num2); RESULT = op1 == op2; :} Como se puede ver la acción semántica devuelve un true o un false al evaluar la condición

  7. Análisis con CUP L.s = false El valor de la evaluación sigue ascendiendo en forma de atributo sintetizado hacia arriba, hasta llegar a la L.s. En este caso se detiene pues esta L es un operando de una operación lógica.

  8. Análisis con CUP L.s = false Con el valor en L se procede a desarrollar la rama J del árbol, esperando a tener su valor para realizar la operación (recordemos que estamos con DDS) Por lo tanto evaluamos la rama J

  9. Análisis con CUP num1.lex = 120 num2.lex = 120 Lo primero que sucede es el reconomiento de los dos tokens numéricosen este caso 120 y 13. Al igual que en las diapositivas 4 y 5.

  10. Análisis con CUP num1.lex=120 num2.lex=13 J.h = num1 != num2 = true Una vez que tenemos los operandos de J realizamos su acción semántica, en este caso una comparación en la que el operando es un «≠» . La evaluación de esta operación ascenderá como atributo sintetizado a través del árbol hasta llegar a J. La producción semántica que hace esto es: C ::= numero:num1 opdist numero:num2 {: int op1 = Integer.parseInt(num1); int op2 = Integer.parseInt(num2); RESULT = op1 != op2; :}

  11. Análisis con CUP FALSE L.s=false J.s= true L = L.s and J.s = false Tenemos ahora la última expresión pendiente, la evaluación de L and J se realiza mediante la siguiente acción semántica. Su resultado se pasa como atributo sintetizado de L y termina la evaluación de la operación. L ::= L:op1 opand J:op2 {: RESULT = op1 && op2; :} Como se puede observar el resultado final de la operación es un false que se muestra por pantalla.

More Related