1 Analizadores semánticos: DDS y EDTPráctica 11 Analizadores semánticos: DDS y EDT
2 Analizador semántico con CUPPrimero 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
3 Analizador semántico con CUPPara 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:
4 Analizador semántico con CUP
5 Analizador semántico con CUPEn primer lugar el analizador calcula las expresiones numéricas y el resultado lo almacena como un atributos sintetizados de C.
6 Analizador semántico con CUPPosteriormente estos valores se propagan a J y L en cada caso.
7 Analizador semántico con CUPPosteriormente 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.
8 Analizador semántico con CUPLuego se hace la 2ª operación (nand). Y el valor se guarda en L.
9 Analizador semántico con CUPLuego 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.
10 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:
11 EDT con ANTLR
12 EDT con ANTLR Al igual que el analizador anterior, primero se guardalos lexemas en f como atributos sintetizados.
13 EDT con ANTLR Al igual que el analizador anterior, primero se guardalos 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.
14 EDT con ANTLR En caso de ser una producción vacía simplementedevuelve el dato sin modificarlo.
15 EDT con ANTLR Se realiza la operación en cada caso.
16 EDT con ANTLR Se realiza la operación en cada caso. Una vez calculadoel resultado se le tiene que pasar al antecedente (t en este caso).
17 EDT con ANTLR De esta manera se sigue realizandolos pasos para calcular el resultado final. e1 recoge el atributo heredado de t.
18 EDT con ANTLR Como antes, si la producción es vacía,devuelve el resultado sin modificar como atributo sintetizado.
19 EDT con ANTLR Se realiza la operación con el atributo heredadoy con el sintetizado devuelto por t y e1.
20 EDT con ANTLR Se realiza la operación con el atributo heredadoy 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.
21 EDT con ANTLR Antes de realizarse la última reducciónel analizador imprimirá el resultado final. La producción a::= λ no se devuelve nada pues no tiene que calcular ningún valor.