JFLEX
Es necesario tener:
-Reglas léxicas definidas para
definirlo archivo .flex
-Definiciones de Símbolos
- Importaciones
Pasos para instalar y empezar a operar:
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
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.*;
- package analizadorlexico;
- import static AnalizadorLexico.Token.*;
b. DEFINICIONES
Usas como
separador el “%%” de bloques
Señalas % :
- %class Lexer
- %class Lexer
- %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
-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
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;
-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
- 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:
-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