s10.4-analisis semantico-ejemplo.pdf

8
Análisis Semántico (ejemplo) Prof. Diego Mosquera @diegomosuz

Upload: natacharivera

Post on 24-Jan-2016

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: S10.4-Analisis semantico-ejemplo.pdf

Análisis Semántico (ejemplo)Prof. Diego Mosquera

@diegomosuz

Page 2: S10.4-Analisis semantico-ejemplo.pdf

• Esbozaremos las fases de análisis léxico y sintáctico de Comp1eg.

• Se escribe el código completo relacionado con el análisis semántico.

• Ver especificación de Comp1eg

Análisis Semántico - Ejemplo

Page 3: S10.4-Analisis semantico-ejemplo.pdf

• Análisis léxico (usando JLEX):

• Conforme se van leyendo los caracteres del archivo a procesar, se van suministrando los tokens, y se va guardando información del último tokenleído y la línea actual. Para esto se utiliza un objeto de la clase InformacionCodigo.

• Esto lo necesitamos para informar al programador en caso que hayan errores léxicos.

• Ver archivos InformacionCodigo.java y comp1eg.jlex

Análisis Semántico - Ejemplo

Page 4: S10.4-Analisis semantico-ejemplo.pdf

• Análisis sintáctico (usando CUP):

• En la sección parse code incluiremos algunos métodos que nos proporciona CUP para el manejo de errores y el método main que acepta un argumento con el nombre del programa a compilar (ver sección parse code del archivo comp1eg.cup). Algunos están sobrecargados.

• Se especifican los símbolos terminales y no-terminales que usará la gramática de Comp1eg.

• Se define la precedencia de los operadores según la especificación de Comp1eg (usaremos asociatividad por izquierda).

• A continuación se muestra la gramática de Comp1eg (ver archivo gramatica.txt).

Análisis Semántico - Ejemplo

Page 5: S10.4-Analisis semantico-ejemplo.pdf

• Análisis semántico:

• Para el análisis semántico es importante tener definida la clase que controla la tabla de tipos y la tabla de símbolos (ver archivos Tabla.java, Simbolo.java y Tipo.java).

• Recuerde que estas tablas asignan un código consecutivo a cada símbolo o tipo para colocarlo en la lista.

• También recuerde la inicialización de la tabla de tipos (con los tipos básicos del lenguaje).

• En la sección action code definimos el objeto que guarda las tablas, el cual debe instanciarse al iniciar el proceso de análisis (símbolo inicial de la gramática). Ver sección 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 sección parser code colocamos un método (error) para proporcionar por pantalla la salida de error correspondiente.

Análisis Semántico - Ejemplo

Page 6: S10.4-Analisis semantico-ejemplo.pdf

• Análisis semántico:

• Comprobación de no-duplicidad en la declaración de variables:

• En la sección action code definimos dos métodos (que luego usaremos en las acciones semánticas): el primero (boolean existeSimbolo) verifica la existencia de un símbolo en la tabla de símbolos, y el segundo (void addSimbolo) permite agregar el nuevo símbolos a la tabla de símbolos (en ambos casos usando las interfaces del objeto de la clase Tabla). Ver sección action code del archivo comp1eg.cup.

• Para comprobar la no-duplicidad se agrega la siguiente acción semántica para la producción correspondiente a la declaración de variables:

Análisis Semántico - Ejemplo

Page 7: S10.4-Analisis semantico-ejemplo.pdf

• Análisis semántico:

• Comprobación de declaración antes de uso:

• Para comprobar la existencia del símbolo antes de ser usado se agrega la siguiente acción semántica para la producción correspondiente a las expresiones y la asignación del lenguaje:

Análisis Semántico - Ejemplo

Page 8: S10.4-Analisis semantico-ejemplo.pdf

• Análisis semántico:• Comprobación del uso correcto de la

instrucción break• Se necesita un contador de instrucciones while que se incrementa cada vez que se lee un lexema while y decrementacuando sale del ciclo (por condición o por rompimiento).

• En la sección action code se declara e inicializa este contador. Ver sección action code del archivo Comp1eg.cup.

• Se agregan las siguientes acciones semánticas en la producción de la sentencia while e instrucción break:

Análisis Semántico - Ejemplo