Descargar la presentación
La descarga está en progreso. Por favor, espere
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));
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.