00:00:00
bien en este vídeo vamos a trabajar con
00:00:03
el jf lab una herramienta didáctica muy
00:00:07
útil para aprender
00:00:09
gramáticas autómatas y otros elementos
00:00:12
que se utilizan en el análisis de
00:00:14
lenguajes y en el aprendizaje de
00:00:16
computadores y traductores
00:00:19
el hot efe lav está acá
00:00:23
se lo pueden descargar también de la
00:00:25
página oficial
00:00:33
la página oficial es
00:00:45
y desde acá se pueden descargar también
00:00:48
el jd pero tienen que llenar un pequeño
00:00:52
formulario con algunas preguntas para
00:00:55
que les dé el enlace de lujo está de
00:00:57
felap
00:00:58
pinel jf lab está basado en java
00:01:00
necesita java así es que no tienen java
00:01:02
les va a parecer así como un hard que se
00:01:05
lee con un comprimido es que lo primero
00:01:08
que hay que hacer antes de utilizarlo es
00:01:10
instalar java
00:01:12
el que rápidamente vamos a instalar java
00:01:24
[Música]
00:01:44
bien en este ejemplo está instalando la
00:01:47
versión jdk aquí de desarrollo de java
00:01:50
que incluye también el java runtime
00:01:53
environment
00:01:56
[Música]
00:02:02
[Música]
00:02:43
en medio de la instalación del jd acá
00:02:45
nos va a aparecer el asistente para
00:02:47
instalar
00:02:50
environment el cual también sólo le
00:02:53
vamos a dar siguiente
00:02:54
[Música]
00:03:00
viene una vez que el asistente instalado
00:03:05
siempre es una buena práctica configurar
00:03:08
la dirección de java en las variables de
00:03:10
entorno
00:03:11
[Música]
00:03:17
vamos a la ruta de instalación de java a
00:03:20
la carpeta bean
00:03:21
[Música]
00:03:25
y agregamos esa ruta a las variables de
00:03:29
entorno del sistema
00:03:30
[Música]
00:03:45
pegamos al final de las variables de
00:03:47
entornos separado con un punto y coma
00:03:49
[Música]
00:03:54
y ya tenemos listo java para poder
00:03:57
utilizar el jfk
00:04:00
entonces para utilizar el jf lab ya que
00:04:03
tenemos java instalado esta vez
00:04:05
solamente habrá que hacer doble clic y
00:04:08
nos va a aparecer
00:04:10
la interfaz principal el jf la
00:04:14
tenemos muchas opciones en cuestión de
00:04:17
herramientas para poder trabajar en
00:04:19
lenguajes y en análisis de lenguajes
00:04:22
vamos a empezar con las gramáticas esta
00:04:25
opción de calamar
00:04:29
y tenemos acá inicialmente el editor de
00:04:32
gramáticas
00:04:34
y vamos a crear un par de gramáticas
00:04:36
simples para ver cómo se utiliza el hot
00:04:38
efe lab y qué opciones nos ofrece para
00:04:41
ir aprendiendo lenguajes
00:04:44
pero vamos a crear sencillito una
00:04:48
gramática que me genere los lenguajes o
00:04:51
un lenguaje compuesto por las cadenas
00:04:54
puede ser a b c
00:04:58
abede y ave
00:05:01
una gramática que me genere estas tres
00:05:04
cadenas
00:05:05
si analizamos las cadenas vemos que la
00:05:09
ave se repite en las tres cadenas
00:05:12
y esta parte de acá
00:05:14
es variable
00:05:17
muchas formas de construir
00:05:21
y una gramática para generar estas
00:05:23
cadenas
00:05:24
por ejemplo las gramáticas siempre deben
00:05:28
empezar con la letra s esa es la
00:05:29
variable inicial podemos hacer qué
00:05:32
[Música]
00:05:34
clave sea parte de una variable y
00:05:38
podemos mostrar estas terminales de
00:05:41
forma directa
00:05:43
entonces tendríamos acá a la variable a
00:05:46
utilizó la variable a seguida de
00:05:49
la terminal c
00:05:53
ese también podría iniciar
00:05:56
con la variable a y que termine con la
00:05:59
terminal de en este caso
00:06:03
y en mi tercera cadena que también
00:06:06
empiece con la variable s y en su
00:06:10
interior la variable a con la terminal
00:06:14
así ya tengo las partes finales de las
00:06:16
cadenas y esa variable a se va a
00:06:19
encargar de generar la cadena ave
00:06:23
la variable entonces va a generar la
00:06:27
terminal la cadena a b
00:06:30
y ahí tengo mi gramática
00:06:34
como puedo verificar cómo puedo analizar
00:06:36
cómo puedo aprender con el jp lab bueno
00:06:39
utilizó las opciones me voy a inputs
00:06:42
y acá puedo utilizar todas estas
00:06:45
opciones para verificar el
00:06:46
funcionamiento de mi gramática
00:06:52
y vamos a empezar con un paseo
00:06:54
controlado por el usuario
00:06:58
qué cadenas queremos verificar vamos a
00:07:01
verificar la primera cadena abc
00:07:04
escribo acá la cadena abc voy a empezar
00:07:08
a generar con mi árbol de derivación
00:07:11
start acá está ya el nodo s
00:07:16
qué opciones nos sirven para generar
00:07:18
esta cadena tenemos tres opciones estar
00:07:20
acá estar acá y estar acá analizando
00:07:24
vemos que nos conviene utilizar la
00:07:25
primera regla porque es la que termina
00:07:26
con la letra c así es que voy a avanzar
00:07:30
con esta regla boyacá este
00:07:32
y generó la terminal se antecedida por
00:07:35
la variable
00:07:38
ahora me queda reemplazar esta variable
00:07:40
a con las reglas que yo tengo y solo
00:07:42
tengo acá una sola regla que es a me
00:07:45
genera la cadena terminal
00:07:48
voy a utilizar esa regla
00:07:51
y con eso género la cadena abc
00:07:55
jfl admite que la cadena ha sido
00:07:58
aceptada vamos con las otras cadenas abc
00:08:03
vuelvo a empezar start reemplazo la
00:08:06
cadena abc
00:08:09
empieza a gustar esta cuál de estas tres
00:08:13
reglas nos convienen obviamente la
00:08:16
segunda la que terminen de selección a
00:08:18
esa regla y hago estar tengo la terminal
00:08:21
de generada y la variable
00:08:25
con esa producción y generó la cadena a
00:08:29
b/d
00:08:34
y veo que mi cadena ha sido aceptada
00:08:40
bien vamos a verificar la última cadena
00:08:44
que sería ave
00:08:48
la piel
00:08:51
vuelvo a empezar
00:08:53
cuales las tres reglas nos conviene la
00:08:56
tercera la que termina en la terminal
00:09:00
parte de ahí y para esta regla
00:09:03
tengo la 4a
00:09:05
y la cadena es aceptada tengo a b
00:09:09
esa es una de las opciones que podemos
00:09:11
utilizar para
00:09:14
y aprender cómo se crea el árbol de
00:09:16
derivación otra opción podría ser el
00:09:20
paseo directo por fuerza bruta
00:09:22
donde yo lo introduzco directamente la
00:09:25
cadena voy a introducir ab c
00:09:28
empiezo y automáticamente el jf la pme
00:09:32
realiza las pruebas y me dice que se han
00:09:33
generado tres nodos puede explorar
00:09:35
cuáles son directamente con step sin
00:09:37
necesidad de generar las reglas ahí está
00:09:40
un nivel y el otro nivel de mi árbol de
00:09:44
derivación
00:09:46
si quiero verificar varias cadenas tengo
00:09:49
esta opción de acá
00:09:52
múltiple brut first partes donde voy
00:09:55
introduciendo acá las cadenas se quiere
00:09:57
verificar abc ave de ave esas tres deben
00:10:01
ser aceptadas y otras deben ser
00:10:04
rechazadas por ejemplo a bf ave vea o se
00:10:08
vea por ejemplo
00:10:10
quiero verificar todas estas cadenas
00:10:12
hago run inputs
00:10:15
y bueno solamente me aceptado las tres
00:10:17
cadenas abc y ni siquiera ha pasado
00:10:19
porque efe no es parte del lenguaje de
00:10:22
la terminal f no está aquí incluida así
00:10:25
es que ésta no me sirve
00:10:27
vamos a volar
00:10:34
vamos a verificar estas otras
00:10:36
simplemente
00:10:38
vuelvo a introducir acá veamos qué pasa
00:10:42
y es rechazada
00:10:44
se vea
00:10:47
es rechazada ave
00:10:50
es rechazada y solamente me va a aceptar
00:10:53
esas tres cadenas bien simplemente esto
00:10:56
como un ejercicio para practicar con el
00:10:59
jfl up y las gramáticas y bueno yo
00:11:01
quiero guardar mi gramática para
00:11:03
trabajarla después qué es lo que hago me
00:11:05
voy a file 6 +
00:11:08
no guardo en donde yo lo voy a
00:11:10
conveniente
00:11:12
puedo crear una carpeta acá
00:11:15
ejercicios j efe
00:11:21
y lo guardo como ejercicio a cero
00:11:25
puedo cerrar acá acá está en mi
00:11:28
ejercicio la siguiente vez que lo quiera
00:11:30
utilizar a programar file open
00:11:35
agua brillo y hasta la información de mi
00:11:38
gramática bien ahora vamos a trabajar
00:11:40
con un par de ejercicios más para ir
00:11:43
comprendiendo cómo crear gramáticas
00:11:51
bien entonces para crear un nuevo
00:11:53
archivo con el jf lab
00:11:56
lo que hacemos es acá arriba bueno
00:11:58
podemos cerrar esta ventana o crear un
00:12:02
nuevo espacio de trabajo crear una nueva
00:12:05
gramática
00:12:06
bien
00:12:09
agregamos unos cuantos ejercicios
00:12:14
vamos a crear ahora una gramática para
00:12:20
reconocer generar todas las cadenas que
00:12:24
empiecen con una
00:12:27
tengan en medio al menos una vez y
00:12:30
terminen exactamente con una en el medio
00:12:33
pueden tener más de una vez
00:12:36
una cantidad indefinida de veces
00:12:41
bien empezamos a resolver
00:12:44
hay que analizar en principio en la
00:12:47
generación de un lenguaje en qué parte
00:12:49
se produce la recursión y en qué parte
00:12:51
se produce que la condición de terminal
00:12:54
o cuando se genera la cadena con el
00:12:56
símbolo terminal
00:12:58
el inicio de la cadena vemos que está
00:12:59
marcado siempre por
00:13:02
la letra entonces vamos a utilizar eso
00:13:05
en mi símbolo inicial voy a empezar a
00:13:09
generar mi cadena siempre con la letra
00:13:13
voy a partir simplemente de ahí desde la
00:13:15
letra voy a considerar el resto de la
00:13:17
cadena
00:13:18
todo esto acapara todas las cadenas como
00:13:21
algo variable
00:13:23
y lo voy a representar con una variable
00:13:25
puede ser la variable a mayúscula
00:13:28
ahora mi problema se reduce a
00:13:30
representar esta parte de las cadenas
00:13:34
como yo voy a generar primero esta
00:13:37
recursión de muchas veces una o muchas
00:13:39
veces y como voy a terminar mi cadena
00:13:42
exactamente con una
00:13:48
entonces ahora trabajamos sobre esta
00:13:49
variable la variable
00:13:51
en la variable a lo primero que sucede
00:13:54
es la reclusión y la reclusión viene
00:13:56
dada por el símbolo b
00:13:59
y si yo quiero volver a repetir una
00:14:01
determinada cantidad de veces entonces
00:14:03
invocó la recursión o represento a la
00:14:05
reclusión acá con una llamada de la
00:14:08
variable a en sí misma
00:14:11
simplemente así
00:14:15
yo he representado primero la salida de
00:14:17
la cadena el inicio de la cadena
00:14:19
empezando con una minúscula y luego le
00:14:23
sigue la variable
00:14:25
y la variable a tiene la opción de ser
00:14:27
una vez una letra be y luego volverá a
00:14:30
repetirse hasta acá si yo lo analizo con
00:14:34
mi árbol de derivación puedo
00:14:40
puedo probar por ejemplo la cadena
00:14:43
todas las cadenas que van a empezar con
00:14:45
una
00:14:46
van a tener unas cuantas veces y bueno
00:14:49
la parte final de la aún no la hemos
00:14:51
implementado la vamos a verificar ahora
00:14:53
qué es lo que pasa con el árbol de
00:14:55
derivación
00:14:56
empieza a partir el símbolo s tengo la
00:15:00
opción de ejecutar esta regla
00:15:03
y me genera para la cadena el inicio con
00:15:06
la terminal y luego la recursión viene
00:15:09
representada por esta regla la segunda
00:15:12
regla donde la variable a se convierte
00:15:15
en la terminal b con la variable a y
00:15:18
puedo seguir invocando la recursión si
00:15:21
nos fijamos si vuelvo a invocar a la
00:15:23
regla se van generando muchas veces
00:15:28
entonces tenemos parte del problema
00:15:30
resuelto pero aún no logramos generar
00:15:32
esta última letra la última terminal
00:15:36
esta última que va a cerrar que va a dar
00:15:38
por finalizada la cadena si nos fijamos
00:15:40
en el árbol de derivación el árbol no
00:15:42
tiene ningún final sigue y sigue
00:15:45
generando la terminal ve con la variable
00:15:47
a volvemos al modo de diseño y nos
00:15:51
podemos dar cuenta cómo terminar la
00:15:52
cadena cuando yo quiera terminar la
00:15:55
cadena
00:15:56
voy a invocar a la variable
00:15:59
con la letra o el símbolo o la terminal
00:16:02
a que de acuerdo a las reglas de mi
00:16:05
problema todas las cadenas deben
00:16:07
terminar siempre con una
00:16:10
entonces
00:16:12
vuelta a la división de mi gramática
00:16:17
vuelvo a verificar otra vez
00:16:19
la cadena
00:16:22
empiezo variable inicial s hago una
00:16:27
derivación general a terminar ahí la
00:16:28
variable a qué opción me conviene me
00:16:31
conviene estar acá para generar la b
00:16:35
genera que mi terminal b una variable
00:16:38
ahora quiero cerrar con la última
00:16:41
escojo esta regla y es reconocido y
00:16:45
generado en mi cadena
00:16:47
empiezo con otra digamos estar acá
00:16:52
de inicio
00:16:54
símbolo inicial s debo partir de ahí
00:16:59
ahora la variable a debo generar cuántas
00:17:02
veces
00:17:03
son 1 2 3 4 5 6 veces
00:17:07
entonces te escoge esta regla género uno
00:17:10
dos tres cuatro cinco seis veces y para
00:17:14
terminar cierro con esta escojo esta
00:17:17
regla
00:17:18
y la cadena ha sido aceptada entonces la
00:17:22
gramática que genera
00:17:25
un lenguaje que está compuesto por todas
00:17:28
las cadenas que empiezan y terminan con
00:17:31
una y en medio tienen uno muchas veces
00:17:33
es esta gramática de acá
00:17:38
bien respecto a la clasificación de la
00:17:40
gramática que acabamos de construir
00:17:42
siguiendo las reglas de lo que hemos
00:17:44
visto en la parte teórica esta vendría a
00:17:47
ser
00:17:48
una gramática irregular la gramática
00:17:52
regular porque bueno primero en el lado
00:17:54
izquierda en las producciones solamente
00:17:56
tenemos una variable lo cual es propio
00:17:58
de la sre maticas libras de contexto y
00:18:00
en la parte derecha las producciones son
00:18:03
lineales por la derecha es decir tienen
00:18:05
la reclusión es del lado derecho
00:18:07
ahora el jfk también nos brinda la
00:18:10
posibilidad de corroborar esta
00:18:12
información
00:18:12
una opción test podemos verificar qué
00:18:16
tipo de gramática hemos construido
00:18:19
y nos dice el hot efe lav esta es una
00:18:22
gramática lineal por la derecha por lo
00:18:24
tanto es una gramática irregular y es
00:18:26
una gramática libre de contexto
00:18:30
y vamos a cerrar esto y hagamos otro
00:18:34
ejercicio más
00:18:37
muy bien esta vez vamos a cerrar y vamos
00:18:41
a partir de la gramática
00:18:45
para intentar entender y comprender que
00:18:47
el lenguaje es generado bien analicemos
00:18:50
entonces esta gramática
00:18:55
la variable se genera la terminal abc
00:18:58
esto también puede generar a bs
00:19:04
y acá vamos a tener una combinación
00:19:06
símbolo terminal
00:19:08
que genera esa combinación y finalmente
00:19:12
esa producción que me genera la terminal
00:19:14
bebé
00:19:18
el lenguaje genera esta gramática
00:19:21
a ver vamos analizando y nos vamos a
00:19:23
encontrar con
00:19:24
a veces es una cadena generada por ese
00:19:27
lenguaje porque parte como terminal a
00:19:30
partir del símbolo inicial y la
00:19:32
recursión puede darse acá por ejemplo
00:19:34
con ese generando a ve ese variables y
00:19:38
determinarse
00:19:41
con esto nos podemos dar cuenta que las
00:19:42
cadenas que generemos van a empezar sí o
00:19:45
sí con una iban a terminar sí o sí con
00:19:48
una c
00:19:50
y luego tenemos vea que genera ave y
00:19:54
tenemos bebé que va a generar la
00:19:57
terminal al bebé lo interesante será
00:20:00
analizar esta parte media de la
00:20:01
gramática para entender cuál es el resto
00:20:03
de las cadenas que se van a generar
00:20:08
pero vamos a verificar algunas cadenas
00:20:12
por fuerza bruta
00:20:15
cómo será la recursión acá
00:20:18
bs por sí sola no genera nada así es que
00:20:20
ese se va a tener que generar una vez
00:20:22
más
00:20:24
si ese genera nuevamente la primera
00:20:27
regla abc
00:20:29
no vamos a hacer acá
00:20:32
[Música]
00:20:37
tenemos acá s
00:20:39
y nos va a generar por un lado abc y por
00:20:43
otro lado a bs si bien en este nivel del
00:20:48
árbol bs por sí sola no nos va a generar
00:20:50
nada es que habría que separarlo de por
00:20:53
sí sola tampoco tiene una representación
00:20:55
en las reglas de producción es que
00:20:57
tenemos dos opciones para eso
00:21:00
voy a avanzar a un nivel más
00:21:05
una opción será para esta s reemplazar
00:21:08
con la primera regla estar acá
00:21:11
abc
00:21:15
otra opción
00:21:17
[Música]
00:21:20
para eso será utilizar la segunda regla
00:21:23
y esa es reemplazar con a bs y c
00:21:28
tenemos por ahora esas dos opciones
00:21:32
bien analicemos las cadenas generadas
00:21:34
analicemos esta de acá
00:21:37
tenemos que eliminar esta variable por
00:21:39
sí sola no aparece pero aparece con la
00:21:42
terminal vea
00:21:45
vamos a derivar entonces
00:21:52
y reemplaza utilizando la tercera regla
00:21:55
con a b
00:21:59
bien seguimos analizando vamos a derivar
00:22:02
por acá una vez más
00:22:05
y encuentro que la variable ve con la
00:22:08
terminal b me generan la cadena terminal
00:22:11
b
00:22:14
la idea siempre de una gramática es
00:22:17
buscar la regla terminal donde no hay
00:22:20
variables para generar una cadena aquí y
00:22:22
aquí tenemos otra cadena la cadena a a
00:22:25
bbb c
00:22:27
eso nos da una idea de que estamos
00:22:30
trabajando con el lenguaje qué
00:22:34
está compuesto por los símbolos ab y c
00:22:37
y se forma por las cadenas que contienen
00:22:40
el mismo número de as neves y 62 hadas
00:22:43
dos veces 263 as tres veces y 13 es
00:22:47
vamos a ver esto con el par se ve en
00:22:49
fuerza bruta
00:22:51
la cadena que acabamos de generar
00:22:54
presionamos start dice me han generado 6
00:22:57
nuevos
00:22:58
primera
00:23:00
integración con esta regla se me ha
00:23:02
generado a bs a veces utilizando la
00:23:06
segunda regla
00:23:08
el siguiente paso ha sido
00:23:10
de la regla s la primera a generar a b y
00:23:17
c las ahora tenemos a b a b s c con la
00:23:23
segunda b o estaré acá como variable en
00:23:26
el siguiente paso
00:23:30
la vela utilizando esta regla se han
00:23:34
transformado en la terminal a con la
00:23:37
variable b mayúscula
00:23:39
en el siguiente paso la variable b está
00:23:43
arreglada con la minúscula han formado
00:23:45
un ave y una vez
00:23:48
y si se ha formado la cadena a b y c
00:23:55
quiero verificar más cadenas de igual
00:23:58
paseo por
00:24:00
múltiples con varias entradas limpio mis
00:24:03
entradas anteriores
00:24:05
dijimos cadenas con la misma cantidad de
00:24:08
us y debes y dices
00:24:13
se debería haber aprendido a aceptar
00:24:17
2 3 4 5 y 1 2 3 4 5 y alguna otra
00:24:22
combinación para ir verificando
00:24:27
esas otras
00:24:29
ejecutamos las entradas y solamente
00:24:32
aquellas que tienen la misma cantidad de
00:24:33
as neves y de 6 han sido aceptadas por
00:24:37
la gramática
00:24:39
quienes son los ejercicios básicos para
00:24:42
aprender a utilizar el jota de felap y
00:24:43
para entender un poco mejor a las
00:24:46
gramáticas respecto al tipo y creo que
00:24:49
es evidente es una gramática dependiente
00:24:53
al contexto porque dependiente del
00:24:54
contexto posición el lado izquierdo de
00:24:56
las producciones tenemos una combinación
00:24:59
de variables y terminales
00:25:02
corroboramos con el hot efe la dice esta
00:25:05
es una gramática libre de contexto y
00:25:08
también es una gramática sin
00:25:10
restricciones por ende
00:25:14
y con eso concluimos esta breve
00:25:16
demostración con el j efe