Cambios varios2:

> Resuelto un problema en la verificación de tipos en asignaciones. YA VERIFICA
CUANDO SE ASIGNAN ARREGLOS DE DIFERENTES DIMENSIONES, WOOHOOO.

> Lista primera parte del problema "base[p.offset]", sólo en expID. Tenemos que
ver cómo hacerlo con arreglos y estructuras.

> MOSCA con generar_quads(), intente aplicarlo pero da segfault. Por qué no
los quads se van generando en cada nodo y ahí mismo se genera el código intermedio
en lugar de usar la lista de quads?

-Maik.
Iniciada la generación de Quads y CódigoIntermedio.

> Ya funcionan bien las generaciones de quads para:

>> Hojas del arbolito: Valores constantes (sin contar los arreglos constantes)
y variables.
>> Nodos del arbolito: Expresiones Unarias y Binarias.

> Se implementó una primera versión de la función 'gen' que toma una lista de
quads y genera el código intermedio asociado (en forma de cadena de String).
La función está en GuavaTree.cc bajo la firma Exp::gen().

> Se arreglaron unos cuantos detallitos.

-Maik.

P.D.: Las línas de la 1185 a la 1187 son para pruebas de la generación de quads
e impresión de código intermedio. :D
Listo Expresiones ID simṕle
Listo la parte de los records e unions
Realice una nueva implementacion del NewTemp espero que sea mejor.
Compila. Volviendo a hacer la regla de expID.
Listo la regla nueva + la revision de tipos faltan pruebas.
Programa de ejemplo básico.

-Maik.
Actualización:

Problemas resueltos:

- Declaraciones globales y dentro de estructuras: Antes declarar algo dentro de
una estructura no se permitia si el nombre ya había sido declarado en el scope
global. Ya se puede, :).

- Redeclaraciones de funciones, ya se verifica y se avisa cuando ocurre.

- No reconocer a los tipos UNION como un tipo con una tabla de símbolos
asociada.

- Verificación de argumentos en la llamada a funciones y los parámetros
esperados.

Problemas que aparecieron:

- Al momento de generar el temporal de código intermedio para atributos anidados
de una estructura, revisa la tabla de símbolos global y no la asociada a la
estructura padre.

Ejemplo:

declare {
    union R {
        integer a,
        record U {
            integer b;
        }
        U array c[5];
    }
    R union d;
}

...

d.c[1].b := 1
  ^
Aquí dice que el tipo de c (que es 'record U') no ha sido declarado en el
contexto actual. Lo que es falso porque es parte de la declaración de la
estructura padre R.

Estuve revisando la pila de ejecución para ver dónde da el error y va así:

Línea GuavaParser.yy:1320 en la regla expID '.' identificador lcorchetesExp
Aplicación de función revision_scope_id
|
Línea GuavaDriver.cc:807
Aplicación de función newtemp
|
Línea GuavaDriver.cc:515
Aplicación de función obtener_tipo <<<<<<<<<< AQUÍ DA EL ERROR

[Si te fijas, obtener tipo busca en la tabla de símbolos global y no la
asociada a la estructura padre de -en nuestro ejemplo- U, que es R.]

-Maik.
Pequeños cambios que me obligan para hacer pull
Merge branch 'master' of https://github.com/RubenSerradas/Guava

Conflicts:
	GuavaParser.yy
	GuavaTree.cc
Esto es tan solo es un merge.
Arreglado el bug de la tabla
Lista la funcion de obtener quads para las expresiones id.
Lo unico que falta son pruebas para cada una de las expresiones.
Listo la funcion de label y newlabels representadas
bajo la clase GuavaLabel
Comence a poner los quads de las instrucciones.
Modificaciones en GuavaQuads.
Listo generar quads para el if sencillo. Falta el otro.
Lista elgenerar_quads para if complejos.
Listo el lelseif