2.3 Esquema de Generación Código Intermedio

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 11

2.3 Esquema de generación.

2.3.1 Variables y constantes.

• Las declaraciones de variables no generan código.


• La declaración de una variable debe crear una entrada en la tabla de símbolos.
• Esta información incluye el identificador de la variable, el tipo de dato (que permite calcular su tamaño) y
su posición de memoria (desplazamiento respecto a una posición conocida)
• El compilador debe mantener un contador para asignar el desplazamiento de forma consecutiva.
• Las variables declaradas en distintos niveles de anidamiento se tratan como variables locales normales a la
hora de asignarles memoria. El analizador semántico debe garantizar que no se acceda a estas variables en
un ámbito diferente.
2.3.2 Expresiones.

• Para generar el código asociado a la expresión se utiliza una


función que genere variables temporales ( getNewTemp() ).
• Código asociado a una constante:
• (A) Lista de instrucciones vacía. La variable temp es el valor de la
constante.
• (B) Instrucción de asignación de la constante a una nueva variable
temporal.
• Código asociado a una variable:
• Lista de instrucciones vacía. La variable temp es la variable referenciada.
• Código asociado a una operación unaria:
• Se genera el código del operando
• Se crea una nueva variable temporal temp.
• Se añade la instrucción de asignación “temp = operador operando.temp”.
• Código asociado a una operación binaria:
• Se genera el código de los operandos
• Se crea una nueva variable temporal temp.
• Se añade la instrucción de asignación
“temp = operando1.temp op operando2.temp”
2.3.3 Instrucción de asignación.

• La sintaxis de la instrucción de asignación en el lenguaje fuente es:


• InstAsig -> id asig Expresión pyc

• Código asociado a una instrucción de asignación:


• generando el código de la expresión
• generar una instrucción “id = Expr.temp”
2.3.4 Instrucciones de control.

• Son expresiones booleanas que aparecen en los bucles e instrucciones condicionales.


• El código asociado debe generar un salto a dos posibles etiquetas:
• label_true, para el caso verdadero
• label_false, para el caso falso
• El código generado no escribe las etiquetas, sino que contiene saltos (condicionales o
incondicionales) a esas etiquetas.
• Las condiciones se pueden representar de forma aritmética o por medio de saltos.
• Representación aritmética:
• Números: (falso = 0, verdadero !=0), (falso<=0, verdadero>0)
• Las condiciones se transforman en expresiones aritméticas:
• c = a & b ; c=0 si a=0 ó b=0, c=1 si a!= 0 y b!=0
• c = a | b ; c=0 si a=0 y b=0, c=1 si a!=0 ó b!=0
• c = x > y ; c=0 si x<=y, c=1 si x>y
• El código se genera de forma idéntica al de las expresiones.
• Al final del código de la expresión se añaden los saltos a las etiquetas.
2.3.5 Funciones
• La sintaxis de la llamada a una función en el
lenguaje fuente es:
• InstCall -> identificador lparen ListaParametros rparen
• ListaParámetros -> [ Expresión ( comma Expresión )* ]
• La estructura del código generado es
2.3.6 Estructuras
• Instrucción if-then
• La sintaxis de la instrucción if-then
en el lenguaje fuente es:
• InstIf -> if Condición then Instrucción
• La estructura del código generado es

• Instrucción if-then-else
• La sintaxis de la instrucción if-then-
else en el lenguaje fuente es:
• InstIfElse -> if Condición then
Instrucción1 else Instrucción2
• La estructura del código generado es
• Instrucción switch-case
• La sintaxis de la instrucción switch-case en el
lenguaje fuente es:
• InstSwitch -> switch lparen Expresión
rparen BloqueSwitch
• BloqueSwitch -> lbrace ( SentenciaCase
)* [ SentenciaDefault ] rbrace
• SentenciaCase -> case Valor colon
( Instrucción )*
• SentenciaDefault -> default colon
( Instrucción )*
• Instrucción while
• La sintaxis de la instrucción while
en el lenguaje fuente es:
• InstWhile -> while Condición do
Instrucción

• Instrucción do-while
• La sintaxis de la instrucción de
do-while en el lenguaje fuente es:
• InstDoWhile -> do Instrucción while
Condición
• Instrucción for
• La sintaxis de la instrucción for en el
lenguaje fuente es:
• InstFor -> for lparen Instrucción1 semicolon
Condición semicolon
Instrucción2 rparen Instrucción3
• Instrucción break
• Representa un salto incondicional (goto) hacia la etiqueta
final de una instrucción switch, while, do-while o for.
• Requiere una pila de etiquetas, de manera que al entrar
en una de estas instrucciones, se almacena la etiqueta
final en la pila. Al salir de las instrucciones se desapila la
etiqueta.

• Instrucción continue
• Representa un salto incondicional (goto) hacia la etiqueta
inicial de una instrucción while, do-while o for.
• Requiere una pila de etiquetas, de manera que al entrar
en una de estas instrucciones, se almacena la etiqueta
inicial en la pila. Al salir de las instrucciones se desapila la
etiqueta.

También podría gustarte