200 likes | 339 Views
Práctica 11. Traductor DSS con CUP. INTRODUCCIÓN. La práctica nos pide realizar una definición dirigida por sintaxis a partir de una gramática que reconoce expresiones lógicas y con ayuda de CUP.
E N D
Práctica 11 Traductor DSS con CUP
INTRODUCCIÓN • La práctica nos pide realizar una definición dirigida por sintaxis a partir de una gramática que reconoce expresiones lógicas y con ayuda de CUP. • Cabe resaltar que CUP solo nos permite manejar atributos sintetizados en las acciones semáticas.
FUNCIONAMIENTO • Para calcular el resultado de la expresión booleana se ira calculando por los niveles del árbol sintáctico hasta llegar a la raíz. raíz Hay que transmitir el valor true (resultado) hasta el nodo raiz true or true
FUNCIONAMIENTO • A continuación, explicaré que acciones semánticas ejecuto en cada regla de la gramática. • Después utilizaré varios ejemplos para consolidar mi explicación.
FUNCIONAMIENTO • J::=(L) | not (L) | true | false | C • En la primera, se transmite el valor de L a J sin realizar ninguna operación sobre el valor. • En la segunda, se transmite también el valor de L a J aplicando el operador not sobre el valor (El valor true se transmitirá en false y viceversa). • En la tercera, se crea un objeto Boolean con el valor true, para transmitirlo a J. • En la cuarta, al igual que en la tercera, se crea el objeto Boolean con el valor false, para transmitirlo a J. • En la quinta, se transmite el valor contenido en C a J.
FUNCIONAMIENTO • C ::= numero == numero | numero != numero | numero < numero | numero > numero | numero <= numero | numero >= numero • A partir del lexema reconocido en el análisis léxico, los transformamos en números enteros (ya que no reconoce números decimales) y realizamos la comparación determinada y traspasamos el resultado a C.
FUNCIONAMIENTO • L:: L and J | L or J | L nand J | L nor J | L xor J | L xnor J | J • Supuestamente, L y J contienen los resultados de los nodos que tienen debajo. Así que cogemos los valores resultantes en L y J, aplicamos la operación sobre los valores, y transmitimos el valor resultante a L. En el caso de la L::=J se transmite el valor de J a L sin realizar ninguna operación sobre el valor.
FUNCIONAMIENTO • A ::= L ; A | L ; • En esta apartado al terminar de reconocer L aplicamos una acción semántica para imprimir el valor calculado anteriormente.
EJEMPLOS • Reconocemos el valor False. (falseandtrue) xor 45 < 78 ; J False False
EJEMPLOS • Transmitimos el valor reconocido a J (falseandtrue) xor 45 < 78 ; J False False
EJEMPLOS • Reconocemos el valor true. (falseandtrue) xor 45 < 78 ; J True True
EJEMPLOS • Transmitimos el valor reconocido a J (falseandtrue) xor 45 < 78 ; True J True
EJEMPLOS • Transmitimos el valor de J a L (falseandtrue) xor 45 < 78 ; L L and J True J False
EJEMPLOS • Transmitimos el valor de J a L y realizamos la operación. (falseandtrue) xor 45 < 78 ; L L and J True False J
EJEMPLOS • Transmitimos el valor resultante a L (falseandtrue) xor 45 < 78 ; False L L and J J
EJEMPLOS • Realizamos la operación y trasmitimos el valor a C (falseandtrue) xor45 < 78 ; True C NUM < NUM 45 78
EJEMPLOS • Transmitimos el valor de C a J (falseandtrue) xor 45 < 78 ; L L xor J False C True
EJEMPLOS • Realizamos la operación y la transmitimos a L (falseandtrue) xor 45 < 78 ; L L xor J True False C
EJEMPLOS • Realizamos la operación y la transmitimos a L (falseandtrue) xor 45 < 78 ; True L L xor J C
EJEMPLOS TRUE • Imprimimos el valor resultante (falseandtrue) xor 45 < 78 ; A L ; True