You are on page 1of 8

Anlisis Semntico

(ejemplo)
Prof. Diego Mosquera
@diegomosuz

Anlisis Semntico - Ejemplo


Esbozaremos las fases de anlisis lxico y sintctico de Comp1eg.
Se escribe el cdigo completo relacionado con el anlisis semntico.

Ver especificacin de Comp1eg

Anlisis Semntico - Ejemplo


Anlisis lxico (usando JLEX):
Conforme se van leyendo los caracteres del archivo a procesar, se van
suministrando los tokens, y se va guardando informacin del ltimo token
ledo y la lnea actual. Para esto se utiliza un objeto de la clase
InformacionCodigo.
Esto lo necesitamos para informar al programador en caso que hayan errores lxicos.

Ver archivos InformacionCodigo.java y comp1eg.jlex

Anlisis Semntico - Ejemplo


Anlisis sintctico (usando CUP):
En la seccin parse code incluiremos algunos mtodos que nos proporciona
CUP para el manejo de errores y el mtodo main que acepta un argumento
con el nombre del programa a compilar (ver seccin parse code del archivo
comp1eg.cup). Algunos estn sobrecargados.
Se especifican los smbolos terminales y no-terminales que usar la gramtica
de Comp1eg.
Se define la precedencia de los operadores segn la especificacin de
Comp1eg (usaremos asociatividad por izquierda).
A continuacin se muestra la gramtica de Comp1eg (ver archivo
gramatica.txt).

Anlisis Semntico - Ejemplo


Anlisis semntico:
Para el anlisis semntico es importante tener definida la clase que controla la tabla
de tipos y la tabla de smbolos (ver archivos Tabla.java, Simbolo.java y Tipo.java).
Recuerde que estas tablas asignan un cdigo consecutivo a cada smbolo o tipo para colocarlo
en la lista.
Tambin recuerde la inicializacin de la tabla de tipos (con los tipos bsicos del lenguaje).

En la seccin action code definimos el objeto que guarda las tablas, el cual debe
instanciarse al iniciar el proceso de anlisis (smbolo inicial de la gramtica). Ver
seccin action code del archivo comp1eg.cup.
Por comodidad, para el tratamiento de errores (mensajes de error) crearemos una
clase que concentre todas las posibilidades (ver archivo Textos.java).
En la seccin parser code colocamos un mtodo (error) para proporcionar por pantalla la
salida de error correspondiente.

Anlisis Semntico - Ejemplo


Anlisis semntico:
Comprobacin de no-duplicidad en la declaracin de variables:
En la seccin action code definimos dos mtodos (que luego usaremos en las acciones
semnticas): el primero (boolean existeSimbolo) verifica la existencia de un smbolo en la
tabla de smbolos, y el segundo (void addSimbolo) permite agregar el nuevo smbolos a
la tabla de smbolos (en ambos casos usando las interfaces del objeto de la clase Tabla).
Ver seccin action code del archivo comp1eg.cup.
Para comprobar la no-duplicidad se agrega la siguiente accin semntica para la
produccin correspondiente a la declaracin de variables:

Anlisis Semntico - Ejemplo


Anlisis semntico:
Comprobacin de declaracin
antes de uso:
Para comprobar la existencia
del smbolo antes de ser usado
se agrega la siguiente accin
semntica para la produccin
correspondiente a las
expresiones y la asignacin del
lenguaje:

Anlisis Semntico - Ejemplo


Anlisis semntico:
Comprobacin del uso correcto de la
instruccin break
Se necesita un contador de instrucciones
while que se incrementa cada vez que se
lee un lexema while y decrementa
cuando sale del ciclo (por condicin o
por rompimiento).
En la seccin action code se declara e
inicializa este contador. Ver seccin
action code del archivo Comp1eg.cup.
Se agregan las siguientes acciones
semnticas en la produccin de la
sentencia while e instruccin break:

You might also like