Está en la página 1de 61

Lenguajes y Autómatas I

Analizadores léxico y sintáctico


Uso de
JFlex y CUP

En Eclipse IDE
Índice
• Introducción
• Instalación
• Implementación
• Estructura
• Compilación
• Ejemplo

2
INTRODUCCIÓN

3
Introducción
• Un analizador sintáctico o parser es una de las
partes de un compilador que transforma su entrada
en un árbol de derivación.

• El análisis sintáctico convierte el texto de


entrada en otras estructuras (comúnmente árboles),
que son más útiles para el posterior análisis y
capturan la jerarquía implícita de la entrada.

4
¿Qué es el CUP?
Cup es un generador de analizadores sintácticos
LALR en Java, el cual recibe de entrada un
archivo con la estructura de la gramática y su
salida es un parser escrito en Java listo para
usarse.

5
¿Qué es el JLex?
• Jlex es un generador de analizadores léxicos en Java,
el cual toma una cadena como entrada una cadena de
caracteres, y lo convierte en una secuencia de token.

6
INSTALACIÓN

7
Descargar JFlex y CUP
Paso 1: Descargar JFLex y CUP de los siguientes
enlaces:

CUP:

http://www2.cs.tum.edu/projects/cup/

JFlex:

http://www.jflex.de/download.html

8
Instalación
Paso 2: Descomprimimos los archivos y
tendremos dos carpetas así:

9
Instalación
Paso 3: Movemos ambas carpetas a la raíz de
nuestro disco duro:

10
Instalación
Paso 4: Configuramos las dos carpetas para
crearlos como variables de ambiente en Windows.
Para el JFlex vamos a la ubicación y
encontraremos dos archivos JFlex:

11
Instalación
Abrimos el archivo jflex.bat como un archivo de
texto y lo editamos de la siguiente manera:

@echo off

set JFLEX_HOME=C:\jflex-1.6.1 REM Aqui ingresamos la


dirección de nuestra carpeta JFLEX
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121 REM Aqui
ingresamos la dirección de
nuestra carpeta JDK que normalmente es la anterior

Java -Xmx128m -jar %JFLEX_HOME\lib\jflex-1.6.1.jar %1 %2 %3 %4 %5


%6 %7 %8 %9

Nota: No olvidar borrar los campos de color verde


12
Instalación
Nos vamos a la carpeta java_cup y creamos una
nueva carpeta llamada bin:

13
Instalación
Dentro de la carpeta bin creamos un nuevo archivo
tipo bat llamado cup.bat

14
Instalación
Editamos el archivo cup.bat de la siguiente manera:

@echo off

set JFLEX_HOME=C:\jflex-1.6.1 REM Aqui ingresamos la dirección de nuestra


carpeta JFLEX
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121 REM Aqui ingresamos la
dirección de
nuestra carpeta JDK que normalmente es la anterior

xcopy /s /i %CUP_HOME% %cd%\java_cup


java java_cup/Main %1 %2 %3 %4 %5 %6 %7 %8 %9
RD /S /Q %cd%\java_cup

Nota: No olvidar borrar los campos de color verde


15
Instalación
Ahora nos dirigimos
al ambiente de
variables para ello
damos click derecho
en mi pc >
propiedades

16
Instalación
Configuración avanzada del sistema

17
Instalación
Variables de ambiente

18
Instalación
Damos doble
click en el
directorio path

19
Instalación
E ingresamos
nuestras dos nuevas
direcciones desde el
bin:

20
IMPLEMENTACIÓN

21
Implementación
El siguiente procedimiento consta de implementar
nuestro analizador sintáctico CUP a nuestra
plataforma de programación en este caso es el
siguiente :

Eclipse IDE for Java Developers:

Eclipse Neon.3 Release (4.6.3)

22
Implementación
Instalamos el plugin de java cup en Eclipse IDE
accediendo a la pestaña Ayuda > Install Software Nuevo

23
Implementación
Instalación del plugin Java CUP

24
Implementación

25
Implementación

26
Implementación

27
Implementación

28
Implementación

29
Implementación
Ahora creamos un
nuevo proyecto en
Eclipse IDE:

30
Implementación

31
Implementación
Creamos un nuevo paquete llamado analizador

32
Implementación
Creamos una nueva clase main que será llamada Main

33
Implementación
Creamos un archivo nuevo llamado sintáctico.cup
que contendrá el código de nuestro analizador
sintáctico:

34
Implementación
Creamos un archivo nuevo llamado sintáctico.cup
que contendrá el código de nuestro analizador
sintáctico:

35
Implementación
Creamos un archivo
nuevo llamado
léxico.lex que
contendrá el código de
nuestro analizador
léxico:

36
ESTRUCTURA

37
Estructura
Ahora, nuestro proyecto encontraremos los
archivos .lex y .cup. Y a cada uno le corresponde
una estructura

Estructura del archivo .cup:

• Sección de Código de Usuario.


• Sección de Método Main.
• Sección de Variables.
• Sección de Reglas de Gramática.

38
Estructura Archivo .cup
La sección de código de usuario
La sección de código de usuario se
utiliza para incluir cualquier
declaración java (paquete, importación
o clase) que sea necesario para
compilar.

39
Estructura Archivo .cup
La sección de método Main
Esta Sección consta de método
Main Y método error. El método
Main nos ayuda a que el análisis
léxico se realice y el segundo es
para indicar errores durante el
análisis sintáctico.

40
Estructura Archivo .cup
Sección de variables

Esta Sección se declaran las


Variables Terminales y No
Terminales, Donde las variables
Te r m i n a l e s s o n N u e s t r o s
tokens.

41
Estructura Archivo .cup
La sección de gramática
Esta sección se declaran las reglas de
producción o reglas gramaticales,
donde nuestras variables no
terminales pueden generar
producciones compuestas por
variables

42
Estructura
Estructura del archivo .lex:

• Sección de Código de Usuario.

• Sección de Directivas.

• Sección de Reglas de Patron.

43
Estructura Archivo .lex
La sección de código de usuario

La sección de código de usuario se utiliza


para incluir cualquier declaración java
(paquete, importación o clase) que sea
necesario para compilar.

44
Estructura Archivo .lex
Sección de directivas
En esta secciones se declaran nuestras
directivas y nuestros tokens o también
conocidos como macros.

45
Estructura Archivo .lex
Sección de reglas de patrón
En esta sección es las mas importante Por
que definimos las reglas de nuestros
patrones léxicos. Donde nos regresara un
token.

46
COMPILACIÓN

47
Compilación
Para la compilación de los archivos .lex y .cup
seguir las siguientes instrucciones:
Nos dirigimos a la carpeta donde se encuentran esos
archivos

48
Compilación
Y presionando shift
+ click derecho nos
iremos al command
prompt:

49
Compilación
Y escribiremos el
siguiente comando:

cup nombre_archivo_cup.cup

Que nos arrojará


estos resultados:

50
Compilación
Y veremos que nos creará los siguientes dos
archivos parser.java y sym.java:

51
Compilación
Ahora en el command prompt escribimos lo
siguiente que nos arrojará este resultado:

52
Compilación
Veremos que se creó el archivo Lexer.java

Cambiar el nombre del archivo Lexer.java por


Yylex.java
53
Compilación
Finalmente estas clases las copiamos a nuestro proyecto
en Eclipse IDE y listo ya tendremos nuestros
analizadores.

Listo para poder trabajar. !

Nota: Cada vez que realicemos cambios a nuestro


archivo.cup debemos compilar de nuevo para guardar los
cambios realizados.

54
EJEMPLO

55
Ejemplo
El siguiente ejemplo es una analizador sintáctico de
sentencias SQL , donde en caso de existir símbolos
incorrectos deberá señalar en donde se encuentran.

Considerando la estructura de las sentencias en SQL


donde acepta palabras reservadas como : SELECT, FROM,
WHERE, ORDER BY, INNER JOIN, LEFT JOIN, RIGHT JOIN
y símbolos como : “ ) ,( , *, ; , =, <, > ”

56
Ejemplo
Posteriormente realizando todos los pasos anteriores
nuestro proyecto en Eclipse IDE quedaría de la siguiente
forma:

57
Ejemplo
Para poder iniciar nuestro analizador sintáctico es
importante darle un archivo de entrada que pueda
analizar y lo hacemos de la siguiente forma en nuestra
clase Main:

58
Ejemplo
Al ejecutar el programa se analizará el contenido del
archivo .txt, en caso de no encontrar un error se mostrará
lo siguiente:

En caso contrario:

59
Ejemplo
El ejemplo anterior se puede descargar en:

https://drive.google.com/file/d/
0B_ndMbWB4KQvZUVHUVhSMzg5emM/view?
usp=sharing

60
Lenguajes y Autómatas I
Alumnos:

Miguel Ángel Arciniega Loaiza


Jissel Becerra Rodríguez
Elpidio Daniel González Montejano
🤓
Gabriela Vázquez Aguilar
Docente:

Carlos Alberto López Castellanos


61

También podría gustarte