T RADUCTORES DDS CON CUP Práctica Optativa 12
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 ;
A Comenzamos por el axioma:
A := L
L := L xor J
J := C
C := numero opmenor numero
L := J
J := apertura_parentesis L cierre_parentesis
L := L and J
J := apertura_parentesis L cierre_parentesis
L := J
J := C
C := numero opmayori numero
L := J
J := vfalse
{: 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:
L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
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; :}
J::=C:c {: Simbolo s=new Simbolo(); s.valor=c.valor; RESULT = s; :}
L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
J::=apertura_parentesis L:l cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=l.valor; RESULT = s; :}
L::=L:l opand J:j {: Simbolo s=new Simbolo(); s.valor=(l.valor && j.valor); RESULT = s; :}
J::=apertura_parentesis L:l cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=l.valor; RESULT = s; :}
L::=J:j {: Simbolo s=new Simbolo(); s.valor=j.valor; RESULT = s; :}
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; :}
J ::= C:c {: Simbolo s=new Simbolo(); s.valor=c.valor; RESULT = s; :}
L ::= L:l opxor J:j {: Simbolo s=new Simbolo(); s.valor=(l.valor != j.valor); RESULT = s; :}
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 [<] NUMERO [78] SEMICOLON [;] NUMERO [345] Expresión lógica correcta. Valor final: true