compiler-construction language-agnostic intermediate-language compiler-design intermediate-code

compiler construction - ¿Qué significa Backpatching?



compiler-construction language-agnostic (7)

Algunas afirmaciones, como sentencias condicionales, while, etc. se representarán como un grupo de sintaxis "if" y "goto" al generar el código intermedio. El problema es que estas instrucciones "goto" no tienen una referencia válida al principio (cuando el compilador comienza a leer el código fuente línea por línea, AKA primer pase ). Pero, después de leer todo el código fuente por primera vez, se determinan las etiquetas y las referencias a las que apuntan estos "goto".

El problema es que podemos hacer que el compilador pueda completar la X en las declaraciones "goto X" en una sola pasada o no? La respuesta es sí.

Si no utilizamos backpatching, esto se puede lograr mediante un análisis de 2 pasos en el código fuente. Pero, backpatching nos permite crear y mantener una lista separada que está diseñada exclusivamente para declaraciones "goto". Como se realiza en una sola pasada, la primera pasada no llenará la X en las declaraciones "ir a X" porque el comapilador no sabe dónde está la X a primera vista. Pero, almacena la X en esa lista exclusiva y después de recorrer todo el código y encontrar que X , la X es reemplazada por esa dirección o referencia.

¿Qué significa backpatching ? Por favor ilustra con un simple ejemplo.


Backpaching es el proceso de dejar entradas en blanco para la instrucción goto donde la dirección de destino no se conoce en la transferencia hacia adelante en el primer pase y llenar estos desconocidos en el segundo pase.


Backpatching: la definición dirigida por la sintaxis se puede implementar en dos o más pasadas (tenemos atributos sintetizados y atributos heredados).

Construye el árbol primero.

Camina por el árbol en el orden de profundidad en primer lugar.

La principal dificultad con la generación de código en una sola pasada es que no podemos conocer el objetivo de una rama cuando generamos código para el flujo de instrucciones de control

Backpatching es la técnica para evitar este problema. Generar instrucciones de bifurcación con destinos vacíos Cuando se conoce el destino, complete la etiqueta de las instrucciones de bifurcación (backpatching).


El parche posterior generalmente se refiere al proceso de resolver ramas hacia adelante que se han plantado en el código, por ejemplo, en declaraciones ''if'', cuando se conoce el valor del objetivo, por ejemplo, cuando se encuentra la llave de cierre o la coincidencia ''else''.


En la etapa de generación de código intermedio de un compilador, a menudo necesitamos ejecutar instrucciones de "salto" a lugares en el código que aún no existen. Para tratar con este tipo de casos, se inserta una etiqueta de destino para esa instrucción. Un marcador no terminal en la regla de producción hace que la acción semántica se levante.


Volver a aplicar parches es la actividad de llenar la información no especificada de las etiquetas mediante el uso de la expresión semántica adecuada durante el proceso de generación de código.

Está hecho por:

  1. expresión booleana.
  2. flujo de declaración de control.

backpatching es un proceso en el que el campo de operando de una instrucción que contiene una referencia directa se deja en blanco inicialmente. la dirección del símbolo de referencia hacia delante se coloca en este campo cuando se encuentra su definición en el programa.