Date post: | 02-Jan-2016 |
Category: |
Documents |
Upload: | maia-dorsey |
View: | 40 times |
Download: | 1 times |
Práctica 11Práctica 11Traductor DSS con CUP
INTRODUCCIÓNINTRODUCCIÓNLa 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.
FUNCIONAMIENTOFUNCIONAMIENTOPara calcular el resultado de la
expresión booleana se ira calculando por los niveles del árbol sintáctico hasta llegar a la raíz.
FUNCIONAMIENTOFUNCIONAMIENTOA 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.
FUNCIONAMIENTOFUNCIONAMIENTOJ::=(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.
FUNCIONAMIENTOFUNCIONAMIENTO 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.
FUNCIONAMIENTOFUNCIONAMIENTOL:: L and J | L or J | L nand J | L nor J |L xor J | L xnor J | JSupuestamente, 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.
FUNCIONAMIENTOFUNCIONAMIENTOA ::= L ; A | L ;En esta apartado al terminar de
reconocer L aplicamos una acción semántica para imprimir el valor calculado anteriormente.
EJEMPLOSEJEMPLOS Reconocemos el valor False.
False
EJEMPLOSEJEMPLOS Transmitimos el valor reconocido a J
False
EJEMPLOSEJEMPLOS Reconocemos el valor true.
True
EJEMPLOSEJEMPLOS Transmitimos el valor reconocido a J
True
EJEMPLOSEJEMPLOS Transmitimos el valor de J a L
True
False
EJEMPLOSEJEMPLOS Transmitimos el valor de J a L y realizamos la
operación.
TrueFalse
EJEMPLOSEJEMPLOS Transmitimos el valor resultante a L
False
EJEMPLOSEJEMPLOS Realizamos la operación y trasmitimos el valor a C
True
45 78
EJEMPLOSEJEMPLOS Transmitimos el valor de C a J
False
True
EJEMPLOSEJEMPLOS Realizamos la operación y la transmitimos a L
False
True
EJEMPLOSEJEMPLOS Realizamos la operación y la transmitimos a L
True
EJEMPLOSEJEMPLOS Imprimimos el valor resultante
True
TRUE