Escolar Documentos
Profissional Documentos
Cultura Documentos
Facultad de Ingeniera
Escuela de Ciencias y Sistemas
Organizacin de Lenguajes y Compiladores 2
Segundo Semestre 2016
Catedrticos: Ing. Bayron Lpez, Ing. Edgar Sabn
Tutores acadmicos: Julio Flores, Andrea Alvarez, Jordy Gonzlez, Mario Asencio
J2H-Transform
Primera prctica de laboratorio
1 Objetivos
1.1 Objetivo General
Aplicar los conocimientos del curso de Organizacin de Lenguajes y
Compiladores 2 en la creacin de soluciones de software.
2 Descripcin General
La prctica consiste en el desarrollo de un editor de texto, llamado J2H, el cual ser
capaz de transformar documentos en formato JSON a lenguaje HTML, mediante la
interpretacin del lenguaje JSLT.
Para ello, el editor de texto permitir abrir, crear y modificar archivos en formato
JSON y JSLT y producir un archivo HTML de salida, el cual deber ser cargado en
un navegador web y presentado correctamente.
El editor de texto ser capaz de diferenciar en su entrada texto especial
(comentarios, palabras reservadas, identificadores, etc.) por medio de una definicin
de colores, y pintar este texto especial en tiempo real al momento que la entrada
sea escrita o cargada.
1
El editor de texto contar con dos mdulos que facilitan al usuario la creacin y
edicin de los archivos soportados, dichos mdulos sern los siguientes:
Mdulo de autocomplemento de instrucciones:
Este mdulo accionar en el momento de que se comience a escribir una
palabra dentro del rea de texto, y mostrar una lista de posibles
instrucciones que concuerden con la palabra escrita, de las cuales puede
seleccionarse una y autocompletar el texto.
Mdulo detector de errores:
Este mdulo detectar errores en tiempo real, y cambiar el color del texto
objetivo para indicarle al usuario que hay un error en su entrada mostrando la
razn del error.
A continuacin se muestra un diagrama ejemplificando las funcionalidades de la
solucin.
3 Editor J2H
El editor J2H ser el entorno de desarrollo para generar pginas web (HTML), el editor
deber ser capaz de editar archivos Json y Jslt (ver inciso No. 4) los cuales se ejecutarn
para generar una pgina web (HTML) con contenido dinmico. El editor J2H adems de que
ser el encargado de gestionar el procesos para generar pginas web (HTML) deber
contener ciertas funcionalidades que harn del editor un entorno de desarrollo agradable y
amigable, de tal forma que optimizar el tiempo de desarrollo cuando se codifica o se busca
un error del proceso de anlisis del compilador (lxico, sintctico y semntico).
interfaz sugerida
adems se podr reemplazar palabras que el usuario desee, esto reemplazar palabra por
palabra que coinciden o si simplemente reemplazar todas las palabras que coinciden.
Cuando se identifique un error de este tipo se deber actualizar en tiempo real el Reporte
de errores. Esto quiere decir que al momento de encontrar un error en tiempo real este se
debe marcar dentro del editor y su descripcin se podr ver en el reporte de errores como
se muestra en la siguiente imagen.
Color
Token
Naranja
Palabras Reservadas
Verde
Identificadores
Amarillo
Cadenas, caracteres
Morado
Nmeros
Gris
Comentarios
Negro
Otro
Rojo
4 Lenguaje JSLT
JSLT es un lenguaje que permite aplicar una transformacin a un documento JSON para
obtener como resultado pginas HTML con contenido dinmico, para ello cuenta con reglas
de transformacin con un formato similar a XML. Las reglas definidas en lenguaje JSLT
pueden ser aplicadas para uno o varios objetos JSON.
El funcionamiento lo podemos observar en la siguiente imagen:
Objetos JSON: un objeto json define un conjunto de atributos, cada atributo tiene
un nombre y valor. Los objetos encapsulan sus atributos por medio de llaves {, }
(a esta encapsulacin se le puede definir un nombre). Dentro de un objeto json
puede venir de 1 a N cantidad de atributos, que se delimitan por medio de una coma
,.
Sintaxis:
{"nombre":"valor"}
Ejemplo:
{"Persona:{"cabello":"ondulado",
"color":"negro"}
}
{"atributo1":"valor1","atributo2":"valor2"},
{"atributo1":"valor3","atributo2":"valor4"}
]}
Ejemplo:
{"Personas":[
{"Nombre":"John", "edad":"28"},
{"Nombre":"Anna", "edad":"15"},
{"Nombre":"Peter", "edad":"50"}
]}
Ejemplo 2:
{"Personas":["John","Anna","Peter"]}
Tipos de dato: El tipo de dato que debe soportar sus atributos se describen
a continuacin:
Nombre
Descripcin
Ejemplo
"edad":"28"
Entero
Doble
boolean
cadena
"altura":"28.53"
"cantante":"falso"
"cabello":"castao
"
Ejemplo Completo:
{
"coleccion": {
"cd": [
{
"title": "Empire Burlesque",
"artist": "Bob Dylan",
"country": "USA",
"company": "Columbia",
"price": "10.90",
"year": "1985",
"bestSeller": "falso"
},
{
"title": "Luna nueva",
"artist": "Alguien en el mundo",
"country": "Alguna parte del mundo",
"company": "Imaginacion",
"price": "10000",
"year": "1800",
"bestSeller": "verdadero"
}
]
}
}
Referencia: http://www.w3schools.com/json/default.asp
Estructura bsica:
<jsl:transformacion ruta="/doc.json" version="Compi2.0" >
...<sentencias>...
</jsl:final>
Comentarios
Comentario de una lnea: Estos deben empezar con dos signos numeral y terminar con un
salto de lnea:
Declaracin de variables
La declaracin puede hacerse desde cualquier parte del cdigo ingresado. La forma normal
en que se declaran las variables es la siguiente:
Asignacin
Se deber validar que la variable exista y que el valor sea del tipo correcto
10
Con la asignacin el casteo correspondiente para que la integridad del tipo de dato de la
variable se mantenga, se debe realizar de acuerdo con la siguiente tabla:
Tipo Variable
Tipo Valor
Resultado de casteo
entero
entero
entero
entero
cadena
error
entero
boolean
entero
entero
doble
entero
entero
carcter
entero ascii
cadena
<cualquier tipo>
cadena
boolean
<cualquier tipo>
error
doble
entero
doble
doble
doble
doble
doble
cadena
error
doble
boolean
error
carcter
entero
ascii
carcter
carcter
carcter
carcter
<cualquier tipo>
error
11
<jsl:plantilla nombreObj=nombreObjeto>
...<sentencias>...
</jsl:plantilla>
Nota: La sentencia plantilla tiene funcionamiento de mtodo main utilizando el objeto
raz (ver manejador de datos - pg. 19).
Ejemplo:
<jsl:plantilla nombreObj=@>
...<sentencias>...
</jsl:plantilla>
12
Para-cada: se utiliza para aplicar una regla a cada objeto JSON seleccionado (ver
manejador de datos - pg 19, para expresiones de acceso a los objetos).
<jsl:para-cada seleccionar=nombreObjeto>
...<sentencias>...
</jsl:para-cada>
<jsl:if condicion=expresion>
...<sentencias>...
</jsl:if>
<jsl:en-caso>
<jsl:de condicion=expresion>
...<sentencias>...
</jsl:de>
<jsl:de condicion=expresion>
...<sentencias>...
</jsl:de>
<jsl:cualquier-otro>
...<sentencias>...
</jsl:cualquier-otro>
</jsl:en-caso>
13
Tipos de dato
Los tipos de dato que el lenguaje deber soportar en el valor de una variable
son los siguientes:
Nombre
Descripcin
Ejemplo
Observaciones
Entero
Doble
boolean
Verdadero, falso,
true,
false.
1=verdadero,
0=falso
carcter
a, b, c, E, Z,
1, 2, #t, #n,
#, %, $, ##,
), =, !, , &,
/, \, ., etc
En el caso de querer
escribir comilla simple se
escribir primero # y
despus la comilla simple
#, adems si se quiere
escribir # se pondr 2
veces ##, los caracteres
de escape se escriben
siempre #t y #n
cadena
Este es un conjunto de
caracteres que pueden ir
separados por espacios en
blanco encerrados en comilla
doble, los posibles caracteres a
ingresar sern los mismos que
los del tipo caracter solo que
agregando a estos el espacio
cadena1
est#$%o es una
ca&/(de=na
#n#n!!!
En el caso de querer
escribir comilla doble se
escribir primero # y
despus la comilla doble
ho#la
mundo #,
adems si se quiere
escribir # se pondr 2
veces##, por ejemplo
ho#la mundo ##, los
caracteres de escape se
escriben siempre #t y #n
14
Operador
Descripcin
Ejemplo
==
objeto==9.80
objeto == var1
!=
objeto!=9.80
objeto!=vari1
<
<e
>
>e
(!cad1)
15
Operador
Descripcin
Ejemplo
||
price=9.80 || price=9.70
&&
!&&
!||
&|
!(!ais)
Operador
Asociatividad
NOT
Derecha
AND, NAND
Izquierda
Izquierda
16
Operador
Descripcin
Ejemplo
25.555+3+alfa
hola mund + o + V
80-20
25-0.555
a*b*5*5.25
25.5*a
div
5div5
adivb
5.25div0.22
a%4
25+1%25+1
2^a
85.2^4
Operador
Exponencial
Suma, Resta
17
Operador
Descripcin
Ejemplo
+=
var1+=25
En este caso le suma lo
que tiene la variable var1
ms 25 y se lo asigna a la
misma variable var1
++
var2 ++
En este caso le suma lo
que tiene la variable var2
ms 1 y se lo asigna a la
misma variable var2
--
Aparte del uso mostrado para los operadores ++ y -- se podrn usar sobre las
variables para modificar su valor en expresiones segn la tabla:
Operador
Descripcin
Operacin
++ var
Se incrementa en 1 la variable y
posteriormente se usa
pre incremento
--var
Se decrementa en 1 la variable y
posteriormente se usa
pre decremento
var ++
post incremente
var --
post decremento
18
Manejador de datos
JSLT cuenta con un manejador de datos que permite acceder a los objetos que se
encuentra dentro de un archivo .json. El manejador hace uso de expresiones para
seleccionar objetos o conjuntos de objetos en un documento JSON y que facilitan el acceso
a la informacin de los objetos.
Las expresiones de acceso son las siguientes:
Seleccin de objetos:
Existen 5 distintas expresiones que permiten acceder a la informacin del objeto:
Expresin
nombreObjeto
Descripcin
selecciona todos los objetos con el nombre
nombreObjeto
@@
..
Ejemplo
Resultado
nombreObjeto
bookstore
@nombreObjeto
@bookstore
nombreObjeto@objetoHijo
bookstore@book
@@nombreObjeto
@@book
nombreObjeto@@objetoHijo
bookstore@@book
19
Expresin de ruta
Ejemplo
Resultado
@nombreObjeto@n
ombreHijo[indice]
@bookstore@book
[1]
@nombreObjeto@n
ombreHijo[expresio
n]
@bookstore@book
[price > 35.00]
@nombreObjeto@n
ombreHijo[expresio
n]@nombreObjeto
Hijo
@bookstore@book
[price >
35.00]@title
20
HTML: Esta etiqueta es la encargada de definir el inicio y fin dentro del archivo html.
<head>
<title> ...<sentencias>... </title>
</head>
Ttulos: Estas sern las etiquetas encargadas de darle formato a los diferentes
ttulos, sern las etiquetas <h1> hasta <h6> del formato html como se muestra en el
ejemplo a continuacin:
<h1>...<sentencias>...</h1>
<h3>...<sentencias>...</h3>
Tablas: Estas etiquetas sern utilizadas para darle formato a una tabla en html,
estas etiquetas sern utilizadas como se muestra a continuacin:
21
Adems dentro de las etiquetas para las tablas se podr colocar formato, como
tamao del borde (border) y color de fondo (bgcolor). Estos atributos tambin podrn
ser utilizados dentro de las etiquetas de registro, encabezado y celda (las cuales se
especifican ms adelante en esta seccin).
Dentro de la tabla se encuentran las etiquetas que identifican cada uno de los
registros y su contenido, estas etiquetas se describen a continuacin:
<th>...<sentencias>...</th>
<td>...<sentencias>...</td>
22
Alto de las celdas: Atributo propio de las celdas en html que permite dar un
alto a las celdas dentro de la tabla
.
<td height="25" >...<contenido tabla>...</td>
Nota: Como el archivo de salida ser un html que ser visualizado en el navegador
web, los atributos de alto y ancho de la tabla pueden contener cualquier cosa,
referente a pixeles o porcentaje.
A continuacin se muestra un ejemplo completo de una tabla con todas sus tags
descritas anteriormente:
Prrafo: Etiqueta encargada de indicar el inicio y fin de un nuevo prrafo dentro del
archivo html.
Bold e Italic: Estas etiquetas se podrn colocar dentro de las etiquetas ya definidas
para darle formato al texto.
23
24
HTML generado
25
5.2 Ejemplo 2
Archivos de entrada:
{
"bib": {
"book": [
{
"id": "1",
"title": "TCP/IP Illustrated",
"author": "Stevens",
"publisher": "Addison-Wesley",
"year": "2002"
},
{
"id": "2",
"title": "Advanced Programming in the Unix Environment",
"author": "Stevens",
"publisher": "Addison-Wesley",
"year": "2004"
},
{
"id": "3",
"title": "Data on the Web",
"author": [
"Abiteboul",
"Buneman",
"Suciu"
],
"year": "2006"
}
]
}
}
26
Entrada JSLT
<jsl:transformacion ruta="/doc.json" version="Compi2.0" >
## Plantilla raz
<jsl:plantilla nombreObj=@>
<html>
<head>
</head>
<body>
<jsl:plantilla-aplicar seleccionar= bib />
</body>
</html>
</jsl:plantilla>
#* Plantilla
bib *#
<jsl:plantilla nombreObj=@bib>
<ul>
<jsl:para-cada seleccionar= book />
<jsl:plantilla-aplicar seleccionar=title />
<jsl:plantilla-aplicar seleccionar=year />
</jsl:para-cada>
</ul>
</jsl:plantilla>
## Plantilla id
<jsl:plantilla nombreObj=@bib@book@id>
<li>
<jsl:valor-de seleccionar=. />
</li>
</jsl:plantilla>
## Plantilla year
<jsl:plantilla nombreObj=@bib@book@year>
<jsl:if condicion=year >e 2000 + 4 >
<h2>
<jsl:valor-de seleccionar=. />
</h2>
</jsl:if>
</jsl:plantilla>
</jsl:final>
27
Salida HTML
<html>
<head>
</head>
<body>
<ul>
<li>
<h2>
TCP/IP Illustrated
</h2>
</li>
</ul>
<ul>
<li>
Advanced Programming in the Unix Environment
<h2>
2004
</h2>
</li>
</ul>
<ul>
<li>
<h1>
Data on the Web
</h1>
<h2>
2006
</h2>
</li>
</ul>
</body>
</html>
Vista HTML
28
6 Restricciones
6.2 Entregables
Aplicacin Funcional
Cdigo Fuente
Archivos de Gramticas de Flex y Bison