La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Expresiones lógicas. Clase Simbolo public class Simbolo { boolean valor; public Simbolo(boolean valor) { this.valor = valor; } La clase Simbolo de java.

Presentaciones similares


Presentación del tema: "Expresiones lógicas. Clase Simbolo public class Simbolo { boolean valor; public Simbolo(boolean valor) { this.valor = valor; } La clase Simbolo de java."— Transcripción de la presentación:

1 Expresiones lógicas

2 Clase Simbolo public class Simbolo { boolean valor; public Simbolo(boolean valor) { this.valor = valor; } La clase Simbolo de java permite almacenar el valor asociado a una determinada producción. Para este traductor es suficiente con definirla de la siguiente manera:

3 Gramática en CUP terminal String semicolon, apertura_parentesis, cierre_parentesis, opand, opor, opnand, opnor, opxor, opxnor, opnot, opigual, opdist, opmenor, opmayor, opmenori, opmayori, vtrue, vfalse, numero; non terminalSimboloA, L, J, C; start with A; A ::= L:eval semicolon {: System.out.println("Valor final:" + eval.valor + "\n\n"); :} A | L:eval semicolon {: System.out.println("Valor final:" + eval.valor + "\n\n"); :} ; L ::=L:e1 opand J:e2 {: RESULT = new Simbolo(e1.valor && e2.valor); :} | L:e1 opor J:e2 {: RESULT = new Simbolo(e1.valor || e2.valor); :}

4 Gramática en CUP | L:e1 opnand J:e2 {: RESULT = new Simbolo(!(e1.valor && e2.valor)); :} | L:e1 opnor J:e2 {: RESULT = new Simbolo(!(e1.valor || e2.valor)); :} | L:e1 opxor J:e2 {: RESULT = new Simbolo(e1.valor ^ e2.valor); :} | L:e1 opxnor J:e2 {: RESULT = new Simbolo(!(e1.valor ^ e2.valor)); :} | J:eval {: RESULT = new Simbolo(eval.valor); :} ; J ::=apertura_parentesis L:eval cierre_parentesis {: RESULT = new Simbolo(eval.valor); :}

5 Gramática en CUP | vtrue {: RESULT = new Simbolo(true); :} | vfalse {: RESULT = new Simbolo(false); :} | opnot apertura_parentesis L:eval cierre_parentesis {: RESULT = new Simbolo(!eval.valor); :} | C:eval {: RESULT = new Simbolo(eval.valor); :} ; C ::=numero:n1 opigual numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) == Integer.parseInt(n2)); :} | numero:n1 opdist numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) != Integer.parseInt(n2)); :}

6 Gramática en CUP | numero:n1 opmenor numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) < Integer.parseInt(n2)); :} | numero:n1 opmayor numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) > Integer.parseInt(n2)); :} | numero:n1 opmenori numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) <= Integer.parseInt(n2)); :} | numero:n1 opmayori numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) >= Integer.parseInt(n2)); :} ;

7 En la animación siguiente se muestra el proceso de traducción que sigue la expresión lógica: (false and (74 >= 34)); En cada fotograma se muestra el árbol sintáctico en un determinado estado del traductor. En rojo aparece la producción que se está analizando y en verde las acciones semánticas relacionadas. Proceso de traducción

8 Primera producción a, reconoce la(s) expresión(es) que terminan en ;. Cadena involucrada en la producción (false and (74 >= 34)); a

9 Proceso de traducción a l ; Siguiente producción l, analiza y procesa la expresión completa Cadena involucrada en la producción (false and (74 >= 34));

10 Proceso de traducción a l ; j Siguiente producción j, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción (false and (74 >= 34));

11 Proceso de traducción a l ; jl ) ( Siguiente producción l, analiza y procesa la expresión completa Cadena involucrada en la producción (false and (74 >= 34));

12 Proceso de traducción a l ; jl ) ( Siguiente producción l, analiza y procesa la expresión completa Cadena involucrada en la producción (false and (74 >= 34)); and j l

13 Proceso de traducción a l ; jl ) ( and j lj Siguiente producción j, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción (false and (74 >= 34));

14 Proceso de traducción a l ; jl ) ( and j ljfalse Elemento terminal false, se devuelve un nuevo símbolo con el valor lógico del elemento terminal. Cadena involucrada en la producción (false and (74 >= 34)); false

15 Proceso de traducción a l ; jl ) ( and j ljfalse j devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción (false and (74 >= 34));

16 Proceso de traducción a l ; jl ) ( and j ljfalse Siguiente producción j, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción (false and (74 >= 34));

17 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( Siguiente producción l, analiza y procesa la expresión completa Cadena involucrada en la producción (false and (74 >= 34));

18 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( j Siguiente producción j, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción (false and (74 >= 34));

19 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( j Siguiente producción c, analiza y procesa comparaciones de números. Cadena involucrada en la producción (false and (74 >= 34)); c

20 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= Elementos terminales 74 >= 34, se devuelve un nuevo símbolo con el valor lógico del resultado de la operación lógica. Cadena involucrada en la producción (false and (74 >= 34)); true

21 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= true c devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción (false and (74 >= 34));

22 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= true j devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción (false and (74 >= 34));

23 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= true l devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción (false and (74 >= 34));

24 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= false (false and true) j devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción (false and (74 >= 34));

25 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= false l devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción (false and (74 >= 34));

26 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= false j devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción (false and (74 >= 34));

27 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= false l devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción (false and (74 >= 34));

28 Proceso de traducción a l ; jl ) ( and j ljfalse l ) ( jc>= Resultado= false Finalmente a recibe el valor de la expresión lógica calculada en la producción l y se muestra por pantalla. Cadena involucrada en la producción (false and (74 >= 34));


Descargar ppt "Expresiones lógicas. Clase Simbolo public class Simbolo { boolean valor; public Simbolo(boolean valor) { this.valor = valor; } La clase Simbolo de java."

Presentaciones similares


Anuncios Google