Analizador Lxico.
4 scanners:
2 implementados a mano (grupos 4 y 11) 1 implementado con Coco/R (grupo 3) 1 implementado con JFlex (grupo 1)
Analizador Lxico.
Tipos de tokens generados:
Palabras Reservadas Atributo: Puntero a la Tabla de Smbolos Ejemplos: FOR, IF, WITH Identificadores Atributo: Puntero a la Tabla de Smbolos Ejemplos: variable, nota, casa Operadores comparacin Atributo: Tipo Enumerado Ejemplos: <,<=,>,>=,!=,= Operador Asignacin Atributo: Nada Ejemplos: := Operador Unitario Atributo: Enumerado
Analizador Lxico.
Tipos de tokens generados:
Operadores Aditivos Atributo: Tipo Enumerado Ejemplos: +, Operadores Multiplicativos Atributo: Tipo Enumerado Ejemplos: *, / Nmero Entero (octal y hexadecimal) Atributo: Valor numrico Ejemplos: 1, 56 Nmero Real Atributo: Valor numrico Ejemplos: 1.2, 56.7893 EOF
Analizador Lxico.
Tipos de tokens generados:
Cadenas de caracteres Atributo: Puntero a la tabla de smbolos Ejemplos: "Hola mundo", "adios" Carcter (en octal) Atributo: Carcter Ejemplos: a, b, z, 3 Puntuacin Atributo: Tipo enumerado Ejemplos: ;, (, ] Funcin predefinida Atributo:Tipo enumerado Procedimiento predefinido Atributo:Tipo enumerado
Analizador Lxico.
Analizador Lxico.
Herramienta utilizada: JFlex.
JFlex es un generador de scanners para Java, implementado tambin en Java, que genera un analizador lxico de manera rpida y sencilla, independientemente de la plataforma que utilicemos a la hora de programar.
Genera AFD.
Analizador Lxico.
Herramienta utilizada: JFlex. Se utilizan: - PATRONES - ESTADOS - FUNCIONES - Cdigo Java empotrado
mod0 Lexema a Tipo INTEGE R Valor Conteni do null contine nte null N args 0 Tipo args Null Paso args Null Mod padre Null
mod0 Lexema a mod1 Tipo INTEGE R MODUL E Valor Conteni do null contine nte null Null N args 0 0 Tipo args Null Null Paso args Null Null Mod padre Null Null
mod0 Lexema a mod1 Tipo INTEGE R MODUL E Valor Null Conteni do Null Null contine nte null Null N args 0 0 Tipo args Null Null Paso args Null Null Mod padre Null Null
mod1 Lexema b c Increme ntar Tipo INTEGE R INTEGE R PROCE DURE Valor Null Null Null Conteni do Null Null contine nte Null Null Null N args 0 0 1 Tipo args Null Null {INTEG ER} Paso args Null Null {VALOR } Mod padre
En esta linea el compilador pondria como ambito actual el del modulo 1 En esta linea el compilador buscaria la variable b en la tabla del modulo 1 para guardar el valor de 1 + c. incrementar Lexema c Tipo INTEGE R Valor Null Conteni do Null contine nte N args 0 Tipo args Null Paso args Null Mod padre Null
mod1 Lexema b c Increme ntar Tipo INTEGE R INTEGE R PROCE DURE Valor Null Increme ntar(c) Null Conteni do Null Null contine nte Null Null Null N args 0 0 1 Tipo args Null Null {INTEG ER} Paso args Null Null {VALOR } Mod padre
Lexema a mod1 c
Valor Valor de c
Null
Busca_Clave(String)
Busca la cadena que se le pasa como parmetro en la tabla de smbolos
^TS CierraTabla(^TS):
Devuelve un puntero a la nueva tabla activa, que ser la que era continente de la del parmetro ^TS
Diagrama de clases
Analizador sintctico.
Especificacin y diseo del Parser. Analizador descendente predictivo tabular. Herramienta de generacin Slk. Sintaxis particular de slk muy prxima a la notacin EBNF. Se obtiene un cdigo que implementa el Parser.
Analizador sintctico.
Gramtica.
Factorizada y sin recursin por la izquierda, LL(1). Sigue unas reglas de notacin que ayudan al mejor entendimiento y legibilidad de la misma: -No terminales siguen el estilo de los identificadores de Java. Ejemplo: noTerminal, otroNoTerminal. -Los identificadores de los smbolos terminales aparecen con todas sus letras en maysculas Ejemplo: TERMINAL, OTROTERMINAL -Cada produccin debe ir en una nueva lnea. Las producciones con distinta parte izquierda deben estar separadas por al menos un salto de lnea. -El smbolo vaco se representa por _epsilon_
Analizador sintctico.
Herramientas consideradas y eleccin
Un analizador sintctico descendente predictivo tabular es ms eficiente debido a que no se apoya en la recursin. Se ha elegido la herramienta SLK ya que simplifica diseo e implementacin al comprobar que la gramtica es LL(1) y al generar la tabla de anlisis. Inconvenientes: - no tener control sobre el cdigo generado. SLK toma como entrada una gramtica LL(1) en formato EBNF. Genera clases con cdigo propio y otras que el usuario debe desarrollar, como SlkAction o SlkLog.
Analizador sintctico.
Clases generadas por SLK.
SlkParser: Clase principal del analizador. SlkConstants: traduccin de los smbolos de la gramtica. SlkToken: Clase proporcionada por el usuario, nexo de unin entre el analizador sintctico y el analizador lxico. SlkError: un mtodo por cada tipo de error sintctico: Mismatch, No Entry, Input left. SlkString: transformar los cdigos que utiliza el parser en sus descripciones. SlkAction: acciones semnticas. SlkLog: trace, trace_production, trace_action.
Diagrama de clases
Analizador semntico.
Especificacin y diseo del analizador semntico.
- Fase donde relacionamos la informacin que calculamos con el significado del programa. - Determinar la informacin que no puede ser descrita por las GIC. - Asociamos la informacin a las construcciones del lenguaje de programacin proporcionando atributos a los smbolos de la gramtica. - Los valores de los atributos se calculan mediante reglas semnticas asociadas a las producciones gramaticales. - Completar la informacin de los smbolos que tenemos en la TS.
Analizador semntico.
- Se distinguien dos tipos de anlisis semntico: - Esttico - Comprobacin de tipos - Comprobaciones asociadas al flujo del control - Comprobaciones de unicidad - Comprobaciones relativas a nombres - Dinmico - Recorreremos en un determinado orden y calcularemos en cada nodo la informacin semntica necesaria. (1 sola pasada) Evaluacin de los atributos mediante mtodos basados en reglas.
Analizador semntico.
Herramientas utilizadas
- No ha sido necesaria considerar otras. - SLK. Se ha elegido la herramienta SLK ya que fue la utilizada para el anlisis sintctico, de modo que la salida de esta fase se convierte en la entrada de la fase del anlisis semntico. Inconvenientes: - No tener control sobre el cdigo generado. SLK toma como entrada una gramtica LL(1) en formato EBNF. Las clases que debemos implementar para esta fase es la SLKAction, adems de otras propias.
Analizador semntico.
Clases generadas por SLK.
SlkAction: contiene todos los mtodos que determinan la accin a realizar en cada caso segn su anlisis semntico (80). Nodo: estructura que contiene toda la informacin recogida en cada accin semntica. PilaNodos: pila para almacenar los nodos con la informacin que se completa en cada accin semntica. TipoSemantico: clase enumerado que contiene todos los tipos semnticos considerados. As, como la utilizacin de la propia TS y el GE.
Analizador semntico.
Relaciones mas importantes entre el semntico y el sintctico. Se omiten las relaciones con la TS y el GE.