stringtranslate.com

Usos expuestos hacia arriba

En la teoría de compiladores , los usos expuestos hacia arriba o los usos alcanzables [1] son ​​todos los usos de una variable a los que se puede llegar desde un punto en el programa. Un uso de una variable es un punto o una declaración en el que se hace referencia a esa variable (se lee) sin modificarla. Un uso de una variable A es alcanzable desde un punto p si existe una ruta de flujo de control en el gráfico de flujo de control desde p hasta el uso sin una definición de A en la ruta.

Un análisis de usos alcanzables es un análisis de flujo de datos [1] para calcular todos los usos alcanzables de un programa. Es muy similar al análisis de vida . 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 vida, 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 copia de la compilación del programa . [2] Durante la etapa de propagación de copia, 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 está accediendo para que pueda ocurrir la sustitución apropiada, 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 manera 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 hacia arriba expuestos para este punto es cero. Por lo tanto, esto se puede simplificar:

y  =  zx  =  z  +  2

Esto conduce a un resultado que es menos complejo de compilar y más eficiente de ejecutar. [2] Esto también cumple con la definición de alcanzar la definición : en este contexto, el análisis de flujo ascendente fue la técnica utilizada para demostrar las necesidades 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 varias formas de bucles. [4]

Véase también

Referencias

  1. ^ abc Harrold, Mary Jean (otoño de 2009). «Basic Analysis» (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) desde el original el 20 de junio de 2020. Consultado el 12 de junio de 2020 .
  2. ^ ab Aho, Alfred Vaino ; Lam, Monica Sin-Ling ; Sethi, Ravi ; Ullman, Jeffrey David (2006). Compilers: Principles, Techniques, and Tools (2.ª edición). Boston, Massachusetts, EE. UU.: Addison-Wesley . ISBN 0-321-48681-1.OCLC 70775643  .
  3. ^ Kore, Aamod (2020). «Usos de Upwards Exposed». Toronto, Ontario, Canadá: Departamento de Ciencias de la Computación, Universidad de Toronto . Archivado desde el original el 20 de junio de 2020. Consultado el 12 de junio de 2020 .
  4. ^ ab Bergeretti, Jean-Francois; Carré, Bernard A. (2 de enero de 1985). "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.