La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Traductor DDS en CUP Expresiones lógicas.

Presentaciones similares


Presentación del tema: "Traductor DDS en CUP Expresiones lógicas."— Transcripción de la presentación:

1 Traductor DDS en CUP Expresiones lógicas

2 Clase Simbolo 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: public class Simbolo { boolean valor; public Simbolo(boolean valor) this.valor = valor; }

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 terminal Simbolo A, L, J, C; start with A; A ::= L:eval semicolon {: System.out.println("Valor final:" + eval.valor + "\n\n"); :} A | L:eval semicolon {: :} ; 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 {:

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 Proceso de traducción 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.

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

9 Proceso de traducción l a ; 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 l j a ; 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 ( l j l a ; ) 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 ( l l j l and a ; ) j Siguiente producción  “l”, analiza y procesa la expresión completa Cadena involucrada en la producción  (false and (74 >= 34));

13 Proceso de traducción ( l j l j l and a ; ) 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));

14 Proceso de traducción false ( l j false l j l and a ; ) j 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));

15 Proceso de traducción false ( l j false l j l and a ; ) j “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 ( l j false l j l and a ; ) 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));

17 Proceso de traducción ( l j false l j l and ( a ; ) j 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 ( l j false l j l and ( a ; ) j 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 ( l j false l j l and ( a ; ) j l j c ) Siguiente producción  “c”, analiza y procesa comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

20 Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= ) 34 true 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));

21 Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “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 ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “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 ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “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 ( l j false l j l and ( 74 a ; ) j l j c >= false (false and true) ) 34 “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 ( l j false l j l and ( 74 a false ; ) j l j c >= ) 34 “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 ( l j false l j l and ( 74 a false ; ) j l j c >= ) 34 “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 ( l j false false l j l and ( 74 a ; ) j l j c >= ) 34 “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 ( l j false Resultado= false l j l and ( 74 a ; ) j l j c >= ) 34 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 "Traductor DDS en CUP Expresiones lógicas."

Presentaciones similares


Anuncios Google