Articulo de referencia

Usos expuestos hacia arriba

En la teoría de compiladores , los usos expuestos hacia arriba o usos alcanzables [ 1 ] son ​​todos los usos de una variable que son alcanzables desde un punto en el programa. U...

En la teoría de compiladores , los usos expuestos hacia arriba o usos alcanzables [ 1 ] son ​​todos los usos de una variable que son alcanzables desde un punto en el programa. Un uso de una variable es un punto o instrucción donde se hace referencia a esa variable (se lee) pero no se modifica. Un uso de una variable A es alcanzable desde un punto p si existe una ruta de flujo de control en el grafo de flujo de control desde p hasta el uso sin que A esté definida en dicha ruta.

El análisis de usos alcanzables es un análisis de flujo de datos [ 1 ] que calcula todos los usos alcanzables de un programa. Es muy similar al análisis de vivacidad . Una variable está activa en un punto del programa si tiene uno o más usos alcanzables. En comparación con el análisis de vivacidad, el análisis de usos alcanzables proporciona información adicional sobre dónde se utiliza la variable.

Usos

Los usos expuestos hacia arriba ocurren en la etapa de propagación de copias de la compilación del programa . [ 2 ] Durante la etapa de propagación de copias, las instancias de un objetivo se reemplazan con asignaciones a sus valores. Durante este proceso, es necesario que el compilador comprenda a qué instancias de un objetivo se accede para que se pueda realizar la sustitución adecuada, relacionada con el concepto de definición de alcance en el análisis de alcance. [ 3 ] Esto se hace con el propósito de simplificar el código antes de la ejecución: si el número de usos expuestos hacia arriba de una asignación es cero, no contribuye al resultado final del código y se puede eliminar de forma segura. [ 1 ] Esto también es útil para mejorar la seguridad del código durante las etapas de compilación. [ 4 ]

Ejemplo

Considere el siguiente pseudocódigo:

x = 1y = zSi es falso :x = 0demás :x = y + 2

Es seguro asumir que la línea 5 nunca ocurrirá, como lo demuestra el hecho de que el número de usos expuestos hacia arriba para este punto es cero. Por lo tanto, esto se puede simplificar:

y = zx = z + 2

Esto conduce a un resultado menos complejo de compilar y más eficiente de ejecutar. [ 2 ] Esto también cumple con la definición de definición de alcance : En este contexto, el análisis de flujo ascendente fue la técnica utilizada para demostrar la necesidad de alcanzar la definición. Las técnicas adicionales permiten un análisis más complejo de problemas de flujo de control más profundamente entrelazados o complejos, como aquellos con diversas formas de bucles. [ 4 ]

Véase también

Referencias

  1. 1 2 3 Harrold, Mary Jean (otoño de 2009). "Análisis básico" (PDF) . Georgia Tech - Facultad de Informática . CS 6340: Análisis y pruebas de software. Atlanta, Georgia, EE. UU.: Instituto Tecnológico de Georgia . Archivado (PDF) del original el 20 de junio de 2020. Recuperado el 12 de junio de 2020 .
  2. 1 2 Aho, Alfred Vaino ; Lam, Monica Sin-Ling ; Sethi, Ravi ; Ullman, Jeffrey David (2006). Compiladores: Principios, técnicas y herramientas (2.ª ed.). Boston, Massachusetts, EE. UU.: Addison-Wesley . ISBN  0-321-48681-1OCLC 70775643 
  3. Kore, Aamod (2020). "Usos expuestos hacia arriba" . Toronto, Ontario, Canadá: Departamento de Ciencias de la Computación, Universidad de Toronto . Archivado del original el 20 de junio de 2020. Recuperado el 12 de junio de 2020 .
  4. 1 2 Bergeretti, Jean-Francois; Carré, Bernard A. (1985-01-02). "Análisis del flujo de información y del flujo de datos de programas while" . ACM Transactions on Programming Languages ​​and Systems . 7 (1). Association for Computing Machinery : 37–61 . doi : 10.1145/2363.2366 . S2CID 19682896 .