You are on page 1of 8

Universidad de San Carlos de Guatemala

Facultad de Ingeniería
Escuela de Ciencias y Sistemas
Organización de Lenguajes y Compiladores 1
2do. semestre del 2010

PRIMERA PRÁCTICA
1. DESCRIPCIÓN GENERAL

1.1 OBJETIVO GENERAL

Que el estudiante aprenda a utilizar la herramienta de análisis léxico implementada con la


herramienta JLex (ó JFlex
JFlex) con la finalidad de implementar un editor de texto avanzado
basado en los conceptos de expresiones regulares y estados del analizador léxico.
léx

1.2 OBJETIVOS ESPECÍFICO


ESPECÍFICOS

• Aprender a construir e implementar expresiones regulares.


• Implementar las librerías de JLex (ó JFlex) en el análisis lexicográfico.
lexicográfico
• Utilizar errores y estados durante la primera fase de un compilador (Análisis
léxico).

1.3 DESCRIPCIÓN

La empresa ABC requiere la implementación de un editor de texto avanzado para facilitar


el uso y visualización de las palabras reservadas del lenguaje php y etiquetas HTML
Además de mostrar un resumen de las palabras detectadas.

2. CARACTERÍSTICAS DE LLA SOLUCIÓN

Para responder a las necesidades que se le plantean, se ha pensado en el desarrollo de


una aplicación en lenguaje JAVA que permita reconocer el lenguaje php y la sintaxis de
HTML.. Con el objetivo de que resalte las palabras ccon otro color y mostrar un resumen de
las palabras detectadas.

Con la ayuda de las herramientas JLex (ó JFlex) se deberá implementar un analizador


léxico que reconozca el archivo con la definición de
dell lenguaje PHP y la sintaxis de HTML.
Se deben de mostrar de manera funcional y agradable al usuario resumen de errores
detectados, etiquetas HTML, palabras reservadas etc.

2.1 DISEÑO DE LA INTERFAZ

En la aplicación se deberán demostrar como mínimo los siguientes menús, tomando en


cuenta que deberá de ser totalmente grafica.

Archivo Ayuda

Nuevo Manual de Usuario

Abrir Manual Técnico

Guardar Temas de Ayuda

Guardar Como

Compilar

Errores

Salir

• Menú
o Nuevo: Crea un nuevo documento.
o Abrir: Permite abrir un programa para poder seguir editándolo
o Guardar: Permite guardar el programa que está siendo editado.
o Guardar Como: Permite guardar el programa con un nombre nuevo.
o Errores Muestra los errores al cargar el programa-
o Salir: Con esta opción se cerrara la aplicación.
• Ayuda
o Manual de Usuario: Se deberá mostrar el manual de usuario realizado por
el estudiante para guiar a la persona en la utilización de la aplicación.
o Manual Técnico: Se deberá demostrar el manual técnico realizado por el
estudiante para entender como se ha realizado la aplicación.
o Temas de Ayuda: Permite mostrar información de la persona que ha
creado la aplicación.

2.2 ESTRUCTURA DEL ARCHIVO DE ENTRADA

En cualquier parte del código y en cualquier orden podrán venir etiquetas de php o de
HTML.
<?
//área de php
if($true) { echo "true"; }
else { echo "false"; }
?>
<!—Área HTML-->
<html>
<head><title>Pagina prueba</title><head>
<body>
<%php
//área de php
if($true) { echo "true"; }
else { echo "false"; }
%>
<!—Área html-->
</body>
</html>
<?php
//área de php
echo (“mensaje”);
?>

Se podrán utilizar únicamente 3 formas de escapar de HTML y pasar al script de PHP:

1. <? echo (" Mensaje en php "); ?>

2. <?php echo("Mensaje en php "); ?>

3. <% echo ("Mensaje en php "); <%>

2.2.1 PALABRAS RESERVADAS EN PHP:


Nombre Palabras reservadas Color
Identificadores (Nombres de $entero, $cadena, $numero, $flotante, Celeste
clases, variables, Métodos) mi_clase, metodo1

Operadores (aritméticos, + , - , *, / , % , =, !, and, or, xor, &&, ||, ==, !=, Anaranjado
relacionales, lógicos, >, <, >=, <=
asignación)

Estructuras de control If, else, switch, case, break, default, for, while, Verde claro
do, BREAK, CONTINUE

Comentarios (de varias /* comentario */ //Comentario Gris


líneas y de solo 1 línea.

Constantes (enteros, 2011, 3.14159, “Compiladores 1”, “@ Hola 1”, Rojo


decimales, cadenas) 'Hola'

Caracteres Especiales ; . , { } ( ) [ ] -> :: Negro

Palabras reservadas class, const, declare, var, echo, extends, Café claro
function new, static, interface, implements,
public, private, protected, abstract, clone, try,
catch, throw, this, include, require, return,
printf, print, require_once

2.2.2 ETIQUETAS RESERVADAS HTML:

Todos los parámetros de etiquetas, otras etiquetas y texto serán de color negro.

Nombre Palabras Reservadas Color

Estructura del <html></html><head></head> <title></title> Café oscuro


documento <body></body>

Etiquetas para dar <p></p> <br><h1></h1><h2></h2> <h3></h3> Verde oscuro


estructuras al texto <h4></h4> <h5></h5> <h6></h6>

<div></div><hr></hr><Blockquote></Blockquote>
<pre></pre>

Comentario <!--....--> Gris

Etiquetas para dar <b></b> <i></i> <u></u> <tt></tt> <sub></sub> Azul oscuro
formato al texto <Big></big><small></small><blink></blink><s></s>

Listas <ol><li></ol> <ul><li></ul> <DL></DL><DT><DD> Verde oscuro


Imágenes, Enlaces, <img>, <A></A> <table></table> Verde Oscuro
Tablas <Caption></caption> <tr></tr> <td></td>
<th></th> <font></font>

Formularios <input><select><option></select><textarea> Azul oscuro

2.3.4 RESUMEN

Cantidad de comentarios en PHP

Cantidad de comentarios en HTML

Cantidad de errores en PHP

Cantidad de etiquetas HTML

Cantidad de palabras reservadas de PHP

Cantidad de constantes de PHP

Cantidad de identificadores en PHP

2.3 FUNCIONALIDAD DE LA APLICACIÓN

La aplicación funcionara como un editor de texto resaltando las palabras reservadas detectadas:

PHP

Identificadores Celeste

Operadores Anaranjado

Estructuras de control Verde claro

Comentarios Gris

Caracteres especiales Negro

Constantes Rojo

Palabras reservadas Café claro

HTML

Estructura del Café oscuro


documento

Etiquetas para dar Verde oscuro


estructuras al texto
Comentarios Gris

Etiquetas para dar Azul oscuro


formato al texto

Listas Verde oscuro

Resumen de análisis léxico:

Descrito en el inciso 2.3.1

2.4 MANEJO DE ERRORES

La aplicación deberá reportar los errores léxicos que encuentre al momento de


ingresar un nuevo archivo estos solo serán aplicados en el área de php.

En caso de HTML no se manejaran errores léxicos y todos se tomaran como texto.

En el reporte de errores se debe indicar la posición donde ocurrió (fila columna) y qué
provoco el error. Se evaluará la respuesta de la aplicación a los errores, esto quiere
decir que se subrayaran los errores encontrados con algún color que los resalte.

ERROR DESCRIPCIÓN COLUMNA FILA

2.5 DOCUMENTACIÓN

• Manual técnico
• Manual de usuario
• Archivos de prueba

3 NOTAS IMPORTANTES
• La práctica se deberá realizar en forma individual.
• La práctica deberá implementarse en lenguaje JAVA, en caso contrario este no será
calificado.
• Para leer los archivos de entrada se deberá utilizar la herramienta JLex(ó JFlex) .
• Es opcional utilizar la herramienta CUP dado que solo se reconocerá la identificación
de expresiones regulares, y no la sintaxis de PHP y HTML.
• Se recomienda el uso de estados en la librería JLex(ó JFlex) para el cambio del
lenguaje PHP al lenguaje HTML o viceversa.
• Se valorará la calidad de la información proporcionada por el compilador cuando se
produzcan errores así como la presentación de la interfaz gráfica y amigabilidad de
la aplicación.
• Copias de proyectos tendrán una nota de 0 puntos y las sanciones por parte de la
Escuela de Sistemas.
• Fecha de entrega miércoles 16 de febrero del 2011.
3.1 ENLACES RECOMENDADOS:

Estados del análisis léxico:

Página 5 http://www.scribd.com/doc/40360179/2-3

Página 9 http://www.scribd.com/doc/35399933/Analisis-lexico

Manual de jflex:

http://muytux.blogspot.com/2010/08/manual-de-jflex-sin-cup.html

http://muytux.blogspot.com/2010/07/manual-de-jflex.html

http://jflex.de/manual.html

Java:

http://www.chuidiang.com/java/ejemplos/JEditorPane-JTextPane/JEditorPane-JTextPane.php

4 ANEXO
<?php
/* * *** Comentario ***** */
class Calculadora {
function sumar($a, $b) {
return $a + $b;
}
function MayorEdad($edad) {
if ($edad >= 18) {
echo 'Mayor de edad';
} else {
echo 'Menor de edad';
}
}
}
?>
<html>
<head>
<title>Pagina</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
$calculadora = new Calculadora();
$resultado = $calculadora->sumar(6, 4);
echo ($resultado);
?>
<div id="wrapper">
<a href="#">Home</a>
<a href="#">Sitemap</a>
<a href="#">Contact</a>
<div class="name">
<h1 align="left" class="top">Uno</h1>
<h1 align="left" class="top">Dos</h1>
<h1 align="left" class="top">Tres</h1>
<h3 class="top">Fin</h3>
</div>
<div id="menu">
<ul>
<li><a href="#">Free One</a></li>
<li><a href="#">Link Two</a></li>
<li><a href="#">Link Three</a></li>
<li><a href="#">Link Four</a></li>
<li><a href="#">Link Five</a></li>
</ul>
</div>
<div id="leftcolumn">
<h3>User Login</h3>
<form action="a" method="get" >
<p>
Username: <br><input name="a" type="text" size="16" /><br />
Password: <br><input name="a" type="password" size="16" /><br /><br />
<input name="a" type="submit" class="login" value="Login" />
</p>
</form>
<?php
$resultado = $calculadora->MayorEdad(18);
echo ($resultado);
?>
<div class ="lefttext">
<img src="images/sl1.jpg" class="floatTL" alt="5th Eye Avenue center" />
<p>Imagen</p>
</div>
</div>
<div id="rightcolumn">
<blockquote>
<p> Mensaje</p>
</blockquote>
</div>
</div>
</body>
</html>

You might also like