Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAnbessa Lamora Modificado hace 9 años
1
ANIMACIÓN Traductor DDT con CUP
2
En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint. Previamente realizado a mano. En cada paso (derivación/reducción), se ha especificado la producción aplicada en el caso de la construcción del árbol. Posteriormente se ha construido la evolución que sigue el traductor CUP para evaluar el resultado de la expresión. El caso de prueba a analizar es: (false and (74 >= 34)) xor 45 < 78 ; Este es el que aparece en el enunciado de la práctica, y el resultado es el siguiente:
3
A Partiendo desde el axioma construiremos el árbol correspondiente:
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
J:=vfalse {: Simbolo s=new Simbolo(); s.valor=false; RESULT = s; :} Ahora que hemos construido el árbol sintáctico, se procede a evaluarlo de manera ascendente:
18
L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}
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:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}
22
L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}
23
J::=apertura_parentesis L:eval cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=(eval.valor); RESULT = s; :}
25
L::=L:ev1 opand J:ev2 {: Simbolo s=new Simbolo(); s.valor=(ev1.valor && ev2.valor); RESULT = s; :}
26
J::=apertura_parentesis L:eval cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=(eval.valor); RESULT = s; :}
27
L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}
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:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}
31
L::= L:ev1 opxor J:ev2 {: Simbolo s=new Simbolo(); s.valor=(ev1.valor ^ ev2.valor); RESULT = s; :}
33
A::=L:eval semicolon {: System.out.println("\n\nExpresion logica correcta. Valor final: "+ eval.valor +"\n\n"); :}; El resultado que imprime por pantalla es: 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] Expresion logica correcta. Valor final: true
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.