1 T RADUCTORES DDS CON CUP Práctica Optativa 12
2 CASO DE PRUEBA DDS CON CUP A continuación realizaremos una representación del árbol generado para la siguiente expresión lógica: (false and (74 >= 34)) xor 45 < 78 ;
3 A Comenzamos por el axioma:
4 A := L
5 L := L xor J
6 J := C
7 C := numero opmenor numero
8 L := J
9 J := apertura_parentesis L cierre_parentesis
10 L := L and J
11 J := apertura_parentesis L cierre_parentesis
12 L := J
13 J := C
14 C := numero opmayori numero
15 L := J
16 J := vfalse
17 {: Simbolo s=new Simbolo(); s.valor=false; RESULT = s; :} Evaluación de la expresión lógica mediante análisis ascendente del árbol sintáctico:
18 L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
19
20 C::= numero:n1 opmayori numero:n2 {: int v1=Integer.parseInt(n1); int v2=Integer.parseInt(n2); Simbolo s=new Simbolo(); s.valor=(v1 >= v2); RESULT = s; :}
21 J::=C:c {: Simbolo s=new Simbolo(); s.valor=c.valor; RESULT = s; :}
22 L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
23 J::=apertura_parentesis L:l cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=l.valor; RESULT = s; :}
24
25 L::=L:l opand J:j {: Simbolo s=new Simbolo(); s.valor=(l.valor && j.valor); RESULT = s; :}
26 J::=apertura_parentesis L:l cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=l.valor; RESULT = s; :}
27 L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
28
29 C::=numero:n1 opmenor numero:n2 {: int v1=Integer.parseInt(n1); int v2=Integer.parseInt(n2); Simbolo s=new Simbolo(); s.valor=(v1 < v2); RESULT = s; :}
30 J ::= C:c {: Simbolo s=new Simbolo(); s.valor=c.valor; RESULT = s; :}
31 L ::= L:l opxor J:j {: Simbolo s=new Simbolo(); s.valor=(l.valor != j.valor); RESULT = s; :}
32
33 A::=L:l semicolon {: System.out.println("\n\nExpresion logica correcta. Valor final: "+ l.valor +"\n\n"); :}; Resultado producido por la expresión: (false and (74 >= 34)) xor 45 < 78 ; APERTURA_PAR [(]FALSE [false] OPAND [and] APERTURA_PAR [(]NUMERO [74] OPMAYORI [>=] NUMERO [34]CIERRE_PAR [)]CIERRE_PAR [)] OPXOR [xor] NUMERO [45] OPMENOR [