1 / 28

Traductor DDS en CUP

Traductor DDS en CUP. Expresiones lógicas. 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;

sissy
Download Presentation

Traductor DDS en CUP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 Stringsemicolon, 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; startwith 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 = newSimbolo(e1.valor && e2.valor); :} | L:e1 opor J:e2 {: RESULT = newSimbolo(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); :} | opnotapertura_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 • 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 • Siguiente producción  “l”, analiza y procesa la expresión completa • Cadena involucrada en la producción  (false and (74 >= 34)); l a ;

  10. Proceso de traducción • 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)); l j a ;

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

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

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

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

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

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

  17. Proceso de traducción • Siguiente producción  “l”, analiza y procesa la expresión completa • Cadena involucrada en la producción  (falseand (74 >= 34)); ( l j false l j l and ( a ; ) j l )

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

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

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

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

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

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

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

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

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

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

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

More Related