domingo, 27 de agosto de 2017

Analizador Semántico

JFLEX
Es necesario tener:
                -Reglas léxicas definidas para definirlo archivo .flex
                -Definiciones de Símbolos
                - Importaciones
Pasos para instalar y empezar a operar:
        1.      Link de descarga -> http://jflex.de/download.html 




        2.      una vez descargado, para instalarlo debes seguir los sgtes pasos:
               a.      Entrar al netbeans
               b.      Ir al a la pestaña Tools/herramientas
               c.       Ir a Libraries/librerías
               d.      Ubicas el botón ADD JAR/Folder
               e.      Ubicas la ruta donde se almacena archivo JFlex
               f.        Una vez agregado se le da un nombre o se deja por default

       3.      Una vez agregada la librería, creas un proyecto donde deberás incluir el archivo JFlex y  crear clases y frames esenciales:
               a.      JClass Analizador Léxico:
                Crear un generarLexema (String path),
         donde se usara para crear la ruta       
               b.      JFrame para analizar el léxico
               c.       JEnum donde se escribirán todos los Tokens
               d.      JClass Archivo donde se ejecute la comprobación si se lee el Token
            e.      Documento en blanco para crear tu lex.flex que este creará un JClass Lexer cuando se ejecute Analizador Léxico

         4.      Para el lex.flex tiene una distribución en el doc. En blanco de la siguiente manera:
               a.      IMPORTACIONES
               Ej:
                  - package analizadorlexico;
                  - import static AnalizadorLexico.Token.*;

               b.      DEFINICIONES
               Usas como separador el  “%%” de bloques
                  Señalas % :
                     - %class Lexer
                     - %class Lexer
           Creas tus expresiones regulares  basándote en los siguientes ejemplos:
                                   - L=[a-zA-Z_] (referencia al abecedario)
                                   -D=[0-9] (referencia a los dígitos)
                                   -S=[< <= > >= ;] (referencia a algunos símbolos)

            Creas tu variable lexeme de la siguiente forma:
                %{
                Public String lexeme;
                %}

                c.       REGLAS DE EXPRESIONES REGULARES
                 Basados en una sentencia For simple
                 Ejemplos:
                                               -{L}({L}|{D})* {lexeme=yytext(); return ID;}(Aquí defines Token ID)
                                               -{D}({D})* {lexeme=yytext(); return INT;} (Aquí defines Token INT)
                                               -"<=" {lexeme=yytext(); return menori;} (Aquí defines Token MENORIGUAL)
                                               -{white} {/*Ignore*/} (Aquí los espacios se ignoran)
                                                - . {return ERROR;} (Siempre indicar para saber el error lanzando una excepción)

JCUP
Es necesario:
              Descargar el CUP y CUP RunTime
               -Importaciones
               -Parser code
               -Declaración de terminales, no terminales y una gramática
        1.      DESCARGAR EL CUP Y CUP RunTime
       Link: https://www.cs.princeton.edu/~appel/modern/java/CUP/ 
y aplicar el mismo proceso explicado en el JFlex para adicionar en forma de librería

        2.      IMPORTACIONES
                          -package A_FLEX_CUP;
                          -import java_cup.runtime.Symbol;

        3.      PARSER CODE
Tenemos
             Método al que se llama automáticamente para algún error
                          public void syntax_error(Symbol s) {    }
                         Método al que se llama en el momento en que ya no es posible recuperación de errores
                          public void unrecovered_syntax_error (Symbol s) throws java.lang.Exception {    }

        4.      ACTION CODE
       Tenemos
         -Código que ejecute el parser que será usado posteriormente
        -Funciones:
  -Limpiar vector
  -Agregar variables
  -verificar existencias
  -obtener tabla de símbolos
  -comparar tipo de dato

5. DECLARACIÓN DE TERMINALES Y NO TERMINALES
Ejemplos:
        -          terminal String INT;
        -          terminal String REAL;
        -          non terminal procREPEAT,procLECTURA,procESCRITURA,cadenaA;
        -          non terminal String val,tipodedato,operacionyasignacion;

6. ESCRIBIMOS TODA LA GRAMÁTICA REQUERIDA
Ejemplos:
        -          Se empieza con start with (expresión con la cual inicia tu gramática);
        -          inicio::= p declaracion1 declaracion2;
        -          p::= inicioPascal ID pycoma | inicioPascal ID pycoma u ;
        -          u::= palabraReservadauses ID pycoma ;


SEMANTICO
-Usamos la funciones adicionadas en el Action code del archivo .cup
-Establecemos la gramática y hacemos un seguimiento de errores

                                                                 INTERFAZ


ABRIR ARCHIVO


COMPILAR Y TABLA DE SIMBOLOS


COMPILACIÓN Y ERROR


COMPILACIÓN Y ERROR SEMÁNTICO