Analizadores semánticos: DDS y EDT 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 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
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
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.