Un bloque básico es una combinación simple de sentencias. A excepción de la entrada y la salida, los bloques básicos no tienen ramificaciones como la entrada y la salida. Significa que el flujo de control entra por el principio y siempre sale por el final sin detenerse. La ejecución de un conjunto de instrucciones de un bloque básico siempre tiene lugar en forma de secuencia.
El primer paso es dividir un grupo de códigos de tres direcciones en el bloque básico. El nuevo bloque básico siempre comienza con la primera instrucción y continúa agregando instrucciones hasta llegar a un salto o una etiqueta. Si no se identifican saltos o etiquetas, el control fluirá de una instrucción a la siguiente en orden secuencial.
El algoritmo para la construcción del bloque básico se describe a continuación paso a paso:
Algoritmo: el algoritmo que se usa aquí divide el código de tres direcciones en bloques básicos.
Entrada: Una secuencia de códigos de tres direcciones será la entrada para los bloques básicos.
Salida: una lista de bloques básicos con cada tres instrucciones de dirección, en exactamente un bloque, se considera como salida.
Método: Comenzaremos identificando los líderes del código intermedio. Las siguientes son algunas pautas para identificar líderes:
- La primera instrucción en el código intermedio generalmente se considera como un líder.
- Las instrucciones que apuntan a una declaración de salto condicional o incondicional se pueden considerar como un líder.
- Cualquier instrucción que esté justo después de una declaración de salto condicional o incondicional puede considerarse como un líder.
El bloque básico de cada líder contendrá todas las instrucciones del líder hasta la instrucción justo antes del comienzo del siguiente líder.
Ejemplo de bloque básico:
Código de tres direcciones para la expresión a = b + c – d es:
T1 = b + c T2 = T1 - d a = T2
Esto representa un bloque básico en el que todas las sentencias se ejecutan en secuencia, una tras otra.
Construcción básica de bloques:
Entendamos la construcción de bloques básicos con un ejemplo:
Ejemplo:
1. PROD = 0 2. I = 1 3. T2 = addr(A) – 4 4. T4 = addr(B) – 4 5. T1 = 4 x I 6. T3 = T2[T1] 7. T5 = T4[T1] 8. T6 = T3 x T5 9. PROD = PROD + T6 10. I = I + 1 11. IF I <=20 GOTO (5)
Usando el algoritmo anterior, podemos identificar fácilmente el número de bloques básicos en el código de tres direcciones anterior:
Hay dos bloques básicos en el código de tres direcciones anterior:
- B1 – Declaración 1 a 4
- B2 – Declaración 5 a 11
Transformaciones en bloques básicos:
Las transformaciones en bloques básicos se pueden aplicar a un bloque básico. Durante la transformación, no necesitamos cambiar el conjunto de expresiones calculadas por el bloque.
Hay dos tipos de transformaciones de bloques básicos. Estos son los siguientes:
1. Transformaciones que preservan la estructura
Las transformaciones que conservan la estructura se pueden lograr mediante los siguientes métodos:
- Eliminación de subexpresiones comunes
- Eliminación de código muerto
- Cambio de nombre de variables temporales
- Intercambio de dos declaraciones adyacentes independientes
2. Transformaciones algebraicas
En el caso de la transformación algebraica, básicamente cambiamos el conjunto de expresiones en un conjunto algebraicamente equivalente.
Por ejemplo, y la expresión
x:= x + 0 or x:= x *1
Esto se puede eliminar de un bloque básico sin cambiar el conjunto de expresiones.
Gráfico de flujo:
Un gráfico de flujo es simplemente un gráfico dirigido. Para el conjunto de bloques básicos, un diagrama de flujo muestra el flujo de información de control. Se utiliza un gráfico de flujo de control para representar cómo se analiza el control del programa entre los bloques. Se utiliza un gráfico de flujo para ilustrar el flujo de control entre bloques básicos una vez que un código intermedio se ha dividido en bloques básicos. Cuando la instrucción inicial del bloque Y sigue a la última instrucción del bloque X, un borde puede fluir de un bloque X a otro bloque Y.
Hagamos el diagrama de flujo del ejemplo que usamos para la formación básica de bloques:
En primer lugar, calculamos los bloques básicos (que ya se hizo anteriormente). En segundo lugar, asignamos la información de control de flujo.