Monday, May 22, 2006

Culminando el Análisis Semántico...
Muy buen día amigos, espero que estén todos bien, esperando ansiosos el inicio de la copa del mundo, el cual es el máximo evento futbolístico en todo el planeta. En lo particular, les comento que soy un amante al fútbol, y cada cuatro años espero este grandioso momento, para ver sobre un terreno de juego a las mejores 32 selecciones a nivel mundial, disputándose el trofeo mas anhelado para todo futbolista.

Después de este momento tan placentero, entramos también a otro, muchísimo más placentero, claro, adivinaron, nuestro compilador micro-C. Gracias a Dios ya hemos culminado la parte correspondiente al análisis semántico, el cual se nos hizo bastante extenso. Recién en blogs pasados, les comentábamos algunos de los avances que habíamos tenido en este respecto. La verdad, no hemos avanzado lo que esperábamos, por la presión de las otras asignaturas, pero ya miramos que se está acercando el día D, por lo que tenemos que apresurar la marcha.

En relación a los aspectos recientemente validados podemos mencionar los siguientes:

En el llamado a una función el número y tipo de parámetros sea igual a los declarados.
En el llamado a una función el número y tipo de parámetros sea igual a los definidos.
Que solo dentro de los statements while y repeat, se permiten la aparición de statements continue y break. En cualquier otro lado es un error semántico.
Que el tipo de retorno de una función sea igual al que se especificó en la declaración o definición de la misma.
Que una función que retorna un valor, tenga obligatoriamente un return.
Que después de un return no deba existir ninguna otra instrucción, ya que ésta nunca llegaría a ejecutarse.

Uno de los ítems en el cual trabajamos mas en su validación, fue en el tipo de retorno de una expression, ya que esta involucra operaciones aritméticas, relacionales, llamados a funciones, entre otras cosas más. Por lo que teníamos que validar todo eso, para el caso, en las operaciones relacionales validábamos que no se compararan variables de diferentes tipos, ya que esto no tendría sentido; también en operaciones aritméticas, no multiplicar variables de diferentes tipos, y cosas por el estilo.
Todo esto fue un trabajo muy laborioso el cual nos consumió un gran porcentaje del tiempo invertido en esta etapa.

Para la realización del análisis semántico, construimos las siguientes clases:

cExpression: Esta clase es una representación de una expresión, tiene atributos como tipo, valor, número de línea y nuúmero de columna. En donde tipo puede tener los valores como:

var=variable, funcArg=función con argumentos, funcSArg=función sin argumentos.

cParametro: Clase que representa un parámetro de una función. Contiene los atributos de tipo y nombre.

cStatement: Clase que representa un statement de nuestro lenguaje. Los atributos son los siguientes:

Tipo, Establece el tipo del statement. El cual puede ser: ret=return ;, retExp=return expression, while=while, if=if, break=break, continue=continue, exp=expression, stmtList=statement_list
ifelse=if-else, repeat=repeat-until

Tipo de Expression, en caso de que el statement sea un return entonces en este atributo se almacenará el tipo de retorno del return.
numeroLinea
numeroColumna
Lista de statements, esto es porque un statement puede tener en su interior otra lista de statements.
Una expression, esta es la expression de un statement return expression, y nos fué de mucha utilidad para validar el tipo de retorno de una función.

cInfoHeaderFunction: Nos mantiene la información del encabezado de una función. Y sus atributos son: El Tipo de Retorno y el Id de la función.

Las clases anteriores nos fueron de extrema utilidad para realizar nuestro análisis semántico.

Después del análisis semántico, lo que viene es la generación del código intermedio, utilizando para ello los Quads.
Para esto tenemos pensado crear una clase llamada cQuad, la cual va a tener cuatro o más atributos según se requiera, para ir colocando las instrucciones en código intermedio que posteriormente serán traducidas a código MIPS.

Esto es todo por hoy, espero platicarles más, la semana que entra.
Saludos.

0 Comments:

Post a Comment

<< Home