1 / 219

Análisis de Flujo de Datos

Análisis de Flujo de Datos. Resumen. Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA. Un grafo muy grande Crear Bloques Básicos

Jims
Download Presentation

Análisis de Flujo de Datos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Análisis de Flujo de Datos

  2. Resumen • Overview de análisis de control de flujo • Expresiones disponibles • Algoritmo para calcular expresiones disponibles • Bit sets • Formulando un problema de análisis de flujo de datos • Cadenas DU • Forma SSA

  3. Un grafo muy grande • Crear Bloques Básicos • Un Grafo de Control de Flujo (CFG) conecta los Bloques Básicos Representando el control de flujo del progama • Forma un grafo

  4. Grafo de Control de Flujo (CFG) • Control-Flow Graph G = <N, E> • Nodos(N): Bloques Básicos • Edges(E): (x,y)  E ssi la primera instrucción en el bloque básico y sigue a la última instrucción en el bloque básico x

  5. bb1 bb2 bb3 bb4 bb5 bb6 Identificando loops de estructuras recursivas • Identificar aristas de retorno • Encontrar los nodos y aristas en el loop dado por la arista de retorno • Aparte de la arista de retorno • Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno • Una arista saliente del bloque básico a la cola de la arista de retorno • ¿Cómo encontramos las aristas de retorno?

  6. Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios

  7. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1}

  8. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  9. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  10. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  11. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  12. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  13. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  14. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  15. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6

  16. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb4 bb5 bb6

  17. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb4 bb5 bb6

  18. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  19. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  20. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  21. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  22. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  23. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  24. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  25. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb3 bb5 bb1 bb2 bb3 bb5 bb6

  26. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb3 bb5 bb6

  27. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb3 bb5 bb6

  28. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  29. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  30. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  31. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  32. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  33. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  34. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  35. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  36. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  37. bb1 bb2 bb3 bb4 bb5 bb6 Computando Dominators • Algoritmo • Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo • Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos • Visitar los nodos en cualquier orden • Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual • Repetir hasta que no hayan cambios {bb1} bb1 bb2 bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb5 bb1 bb2 bb5 bb6

  38. Computando Dominators • Lo que acabamos de ver fue un algoritmo iterativo de análisis de flujo de datos en acción • Inicializar todos los nodos a un valor dado • Visitar los nodos en algún orden • Calcular el valor del nodo • Repetir hasta que no haya cambios

  39. Análisis de Flujo de Datos • Análisis Local • Analizar el efecto de cada instrucción • Componer efectos de instrucciones para derivar información desde el principio del bloque básico a cada instrucción • Análisis de Flujo de Datos • Iterativamente propagar la información del bloque básico sobre el grafo de control de flujo hasta que no hayan cambios • Calcular el valor final al principio del bloque básico • Propagación Local • Propagar la información desde el principio del bloque básico a cada instrucción

  40. Resumen • Overview de análisis de control de flujo • Expresiones disponibles • Algoritmo para calcular expresiones disponibles • Bit sets • Formulando un problema de análisis de flujo de datos • Cadenas DU • Forma SSA

  41. Ejemplo: Expresiones Disponibles • Una expresión está disponible ssi • Todos los caminos que llegan al punto actual pasan a través del punto donde se definió la expresión • Ninguna variable usada en la expresión fue modificada entre el punto en que se definió la expresión y el punto actual

  42. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d Ejemplo: Expresiones Disponibles

  43. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? Sí!

  44. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? Sí!

  45. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? No!

  46. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? No!

  47. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? No!

  48. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? Sí!

  49. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d ¿Está la expresión disponible? Sí!

  50. a = b + c d = e + f f = a + c b = a + d h = c + f g = a + c j = a + b + c + d Uso de Expresiones Disponibles

More Related