220 likes | 399 Views
Práctica 11. Analizadores semánticos: DDS y EDT. Analizador semántico con CUP. Primero vamos a explicar el analizador semántico cuya gramática es la siguiente: A ::= L ; A| L ; L ::= L and J | L or J| L nand J| L nor | L xor J| L xnor J| J
E N D
Práctica 11 Analizadores semánticos: DDS y EDT
Analizador semántico con CUP • Primero vamos a explicar el analizador semántico cuya gramática es la siguiente: • A ::= L ; A| L ; • L ::= L and J | L orJ| L nandJ| L nor| L xorJ| L xnorJ| J • J ::= ( L )| true| false| not ( L )| C • C ::= numero == numero • | numero != numero • | numero < numero • | numero > numero • | numero <= numero • | numero >= numero
Analizador semántico con CUP • Para la explicación utilizaremos la siguiente cadena como entrada: Numero > numero xor numero==numero nand true; • Y el árbol sintáctico es el que se muestra:
Analizador semántico con CUP • En primer lugar el analizador calcula las expresiones numéricas y el resultado lo almacena como un atributos sintetizados de C.
Analizador semántico con CUP • Posteriormente estos valores se propagan a J y L en cada caso.
Analizador semántico con CUP • Posteriormente estos valores se propagan a J y L en cada caso. • A continuación se hace el cálculo xor y se guarda en L.
Analizador semántico con CUP • Luego se hace la 2ª operación (nand). Y el valor se guarda en L.
Analizador semántico con CUP • Luego se hace la 2ª operación (nand). Y el valor se guarda en L. • Por último, A recoge el atributo sintetizado devuelto por L y lo imprime.
EDT con ANTLR • En esta segunda parte realizaremos el mismo proceso para entender de qué manera funciona nuestro analizador semántico con ANTLR. • La cadena de entrada para la explicación es la siguiente:8/4+2*5; • El árbol sintáctico es el siguiente:
EDT con ANTLR • Al igual que el analizador anterior, primero se guarda los lexemas en f como atributos sintetizados.
EDT con ANTLR • Al igual que el analizador anterior, primero se guarda los lexemas en f como atributos sintetizados. • A continuación se tiene que comunicar el dato a t1 para poder realizar la operación. Atributo Heredado.
EDT con ANTLR • En caso de ser una producción vacía simplemente devuelve el dato sin modificarlo.
EDT con ANTLR • Se realiza la operación en cada caso.
EDT con ANTLR • Se realiza la operación en cada caso. • Una vez calculado el resultado se le tiene que pasar al antecedente (t en este caso).
EDT con ANTLR • De esta manera se sigue realizando los pasos para calcular el resultado final. • e1 recoge el atributo heredado de t.
EDT con ANTLR • Como antes, si la producción es vacía, devuelve el resultado sin modificar como atributo sintetizado.
EDT con ANTLR • Se realiza la operación con el atributo heredado y con el sintetizado devuelto por t y e1.
EDT con ANTLR • Se realiza la operación con el atributo heredado y con el sintetizado devuelto por t y e1. • Por último el recoge el atributo sintetizado de e1*. *Con este e1 nos referimos a la producción de nivel superior.
EDT con ANTLR • Antes de realizarse la última reducción el analizador imprimirá el resultado final. • La producción a::= λ no se devuelve nada pues no tiene que calcular ningún valor.