You are on page 1of 3

OTRAS REPRESENTACIONES INTERMEDIAS

Estrictamente hablando, cualquier forma entre el programa fuente y el


programa objeto podra ser llamada una representacin intermedia. El proceso
de optimizacin a menudo crea una representacin grfica conocida como
grafica de flujo de control. Hemos discutido los atributos solo de manera breve
pero un rbol de anlisis sintctico, o un rbol de atributos o rbol semntico
(Todava otra forma intermedia posible)
Una vez que ya hemos dotado a una gramtica de sus atributos y de las
acciones semnticas oportunas. Podemos darle la capacidad de detectar
errores semnticos. La deteccin de errores semnticos depende mucho de las
caractersticas del lenguaje del que vayamos a realizar el compilador y de la
implementacin elegida. Debido a esto, no vamos a explicar todas las posibles
caractersticas de todos los lenguajes que existan (lo cual es imposible), sino
que pondremos como ejemplo de lenguajes los lenguajes imperativos ms
comunes. Por ejemplo, Pascal, C o Java.
Estos lenguajes constan de declaracin de variables, tipos predefinidos, tipos
estructurados, subprogramas, etc. Nos centraremos en comprobar la validez
semntica a la hora de operar con variables de un determinado tipo, en si los
parmetros (si los hay) que se utilizan en un subprograma son adecuados a la
definicin del subprograma, si los tipos devueltos por una funcin son los
adecuados, si se utiliza una variable antes de ser inicializada, etc. Aparte de
estas comprobaciones, el programador tendr que hacer otras dependiendo del
lenguaje del que vaya a construir el compilador. En concreto, tendr que
impedir, o avisar del mal uso, de los elementos que existen en la definicin del
lenguaje. Lo ms comn es realizar las comprobaciones semnticas, avisar de
los errores que vayan ocurriendo e intentar que el anlisis contine para as
procesar todo el programa y darle al programador una lista de todos los errores
que aparezcan. Esto a veces no es posible ya que un error semntico puede
provocar una larga lista de otros errores, por lo que en estos casos, quizs sea
ms adecuado parar el anlisis y avisar del error para que sea modificado
antes de continuar.

ARREGLOS
Las referencias de arreglos a menudo se traducen a cdigo intermedio con un
operador de arreglo y dos hijos. El hijo izquierdo es el nombre del arreglo,
mientras que el hijo derecho es la expresin del subndice.
Temp := Lista [I]
Como un rbol sintctico abstracto se convertir en:

Y como cudruples (empleando la notacin de sentencias de asignacin) seria:


T1 := Lista [I]
Temp := T1
Utilizando esta notacin, el generador de cdigo tendra que calcular la
compensacin del arreglo para mquinas que no tiene un modo de
direccionamiento de ndice.
La alternativa es extender la representacin intermedia.
Empleando ( ) para expresar contenido de y direc para expresar
direccin de, los cudruples para Temp := Lista [i] seran :
T1 := direc ( Lista )
T2 := T1 + I
Temp := ( T2 )
En forma similar, si la referencia del arreglo se encuentra sobre el lado
izquierdo de la sentencia de asignacin como en Lista[ I ] := Temp , los
cudruples de najo nivel seran:
T1 := direc (Lista)
T2 := T1 + I
(T2) := TEmp
Incluso si una maquina tiene un modo de direccionamiento de ndice, la
traduccin de las referencias del arreglo en su formato de bajo nivel puede
permitirse optimizaciones ( por ejemplo, si la referencia de subndice fuera una
subxpresin comn)

Adicin de rutinas de AST al anlisis sintctico descendiente


recursivo
Un nodo de rbol sintctico abstracto consiste de un campo de informacin, y
varios campos de apuntador. Mostraremos un ejemplo para la gramtica de
expresin con sentencias de asignacin agregadas, y supondremos un rbol
binario, de tal modo que haya dos campos de apuntadores para un hijo
izquierdo y un derecho, adems del campo de informacin.

De este modo, si un noto AST se denomina Nodo, estos tres campos se


denotaran como info(Nodo), Izq(Nodo) y Der(Nodo) creara un nuevo nodo AST
vaci.
El mtodo consiste en agregar un parmetro a cada uno de los procedimientos
que llevaran el AST (parcial), de procedimiento en procedimiento, agregndolo
a l de manera propia.

You might also like