Bloque básico


En la construcción del compilador , un bloque básico es una secuencia de código de línea recta sin ramas excepto en la entrada y sin ramas fuera excepto en la salida. [1] [2] Esta forma restringida hace que un bloque básico sea muy susceptible de análisis. [3] Los compiladores suelen descomponer los programas en sus bloques básicos como primer paso en el proceso de análisis. Los bloques básicos forman los vértices o nodos en un gráfico de flujo de control .

En estas circunstancias, cada vez que se ejecuta la primera instrucción de un bloque básico, el resto de las instrucciones necesariamente se ejecutan exactamente una vez y en orden. [4] [5]

Esta definición es más general que la intuitiva en algunos aspectos. Por ejemplo, permite saltos incondicionales a etiquetas no objetivo de otros saltos. Esta definición incorpora las propiedades que hacen que sea fácil trabajar con bloques básicos al construir un algoritmo.

Los bloques a los que se puede transferir el control después de llegar al final de un bloque se denominan sucesores de ese bloque , mientras que los bloques de los que puede haber venido el control al ingresar a un bloque se denominan predecesores de ese bloque . Se puede saltar al inicio de un bloque básico desde más de una ubicación.

El algoritmo para generar bloques básicos a partir de una lista de código es simple: el analizador escanea el código y marca los límites de los bloques , que son instrucciones que pueden comenzar o finalizar un bloque porque transfieren el control o aceptan el control desde otro punto. Luego, el listado simplemente se "corta" en cada uno de estos puntos, y quedan los bloques básicos.

Tenga en cuenta que este método no siempre genera bloques básicos máximos , según la definición formal, pero generalmente son suficientes (los bloques básicos máximos son bloques básicos que no se pueden extender al incluir bloques adyacentes sin violar la definición de un bloque básico [6] ).