Generación de código intermedio: Control de flujo.
Introducción
¡Hola!
¡Que bueno es encontrarte nuevamente! Eso indica tu gran dedicación y tenacidad. Te doy la bienvenida a la clase digital 16 del curso, te felicito por llegar hasta este punto y te exhorto a que sigas en este proceso formativo, pues prácticamente falta poco para completarlo.
En esta sesión aprenderemos sobre
¡Empecemos y buena suerte!
Desarrollo del tema
Las expresiones buleanas son: Expresiones que toman valor lógico true o false.
Las expresiones buleanas se usan para:
- Alterar flujo de control
Por ejemplo:
- Calcular valores lógicos.
- Calcular diferentes funciones.
El código intermedio para expresiones buleanas incluye etiquetas de salto.
Las expresiones buleanas son evaluadas usando: Evaluación de corto circuito.
Evaluación de Corto Circuito:
Es un método que genera saltos para evitar evaluación innecesaria
Código fuente:
Código intermedio con saltos:
El código intermedio para instrucciones de control de flujo involucra saltos a código que aún no ha sido generado.
La técnica backpatching sirve para: Evitar dar una segunda pasada al código generado para instrucciones de control de flujo.
Problema: El código generado para expresiones buleanas contiene etiquetas simbólicas de saltos hacia adelante
Por lo tanto, se requiere pasada adicional para asignarles direcciones apropiadas.
Solución: Usar la técnica de backpatching para evitar pasada adicional
El backpatching usa dos atributos lista:
- truelist: Para saltos en verdadero.
- falselist: Para saltos en falso.
y las siguientes funciones:
- makelist(i): crea una nueva lista conteniendo sólo i (dirección de una instrucción que hace salto).
- merge(p1, p2): concatena dos listas p1 y p2.
- backpatch(p, i): completa todos los saltos pendientes en la lista p con i (dirección de salto).
La ambigüedad de if…else se puede eliminar agregando un nuevo token y definiendo precedencias.
El backpatching requiere los atributos:
Listas falselist y truelist.
El atributo
nextinstr contiene la dirección de la siguiente instrucción a ser generada.
La generación de código intermedio para instrucciones de control de flujo requiere de los atributos: nextlist, breaklist, truelist y falselist.
La generación del código intermedio para las instrucciones de control de flujo requiere introducir nuevos símbolos no terminales.
Instrucciones de Control de Flujo:
Sirven para alterar el flujo secuencial del programa dependiendo de una condición o expresión buleana.
Instrucción IF:
B.code contiene el código generado para B
B.True es un salto en verdadero dentro de B
B.false es un salto en falso dentro de B
Instrucción IF…ELSE:
B.code contiene el código generado para B
B.True es un salto en verdadero dentro de B
B.false es un salto en falso dentro de BS.next es un salto hacia la siguiente instrucción
Instrucción WHILE:
B.code contiene el código generado para B
B.True es un salto en verdadero dentro de B
B.false es un salto en falso dentro de B
begin es un salto hacia el inicio de S
Instrucción FOR:
B.code contiene el código generado para B
B.True es un salto en verdadero dentro de B
B.false es un salto en falso dentro de B
begin es un salto hacia el inicio de S
incr es un salto hacia el incremento
E1.code contiene el código generado para E1
E2.code contiene el código generado para E2
S1.code contiene el código generado para S1
begin es un salto hacia el inicio del ciclo
next es un salto hacia la siguiente instrucción
Conclusión
Para recordar:
Finalizamos hasta este punto con los contenidos de esta lección 16. ¡Muchas felicidades por tu entrega y dedicación! Te pido que consultes el material incluido en las fuentes de información para ampliar y profundizar en el conocimiento de las lentes. Acude con tu asesor cuando surjan dudas. Te invito a cumplir en tiempo y forma con la entrega de la consigna correspondiente. Te encuentro en la próxima sesión.