La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ANIMACIÓN Traductor DDT con CUP. En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint.

Presentaciones similares


Presentación del tema: "ANIMACIÓN Traductor DDT con CUP. En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint."— Transcripción de la presentación:

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; :}

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: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; :}

24

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; :}

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: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; :}

32

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


Descargar ppt "ANIMACIÓN Traductor DDT con CUP. En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint."

Presentaciones similares


Anuncios Google