Documente Academic
Documente Profesional
Documente Cultură
Facultad de Ingeniería
Organización de Lenguajes y Compiladores 1
Catedráticos:
Ing. Mario Bautista, Ing. Manuel Castillo, Ing. César Batz
Tutores académicos:
Luis Paz, José Soc, Jorge Castañeda
Proyecto 1
Analizador de copias
Objetivos:
Que el estudiante comprenda a grandes rasgos el funcionamiento de la tabla de
símbolos.
Que el estudiante comprenda la realización de acciones básicas en la fase de análisis
sintáctico.
Que el estudiante comprenda el manejo básico de la tabla de símbolos.
Que el estudiante implemente soluciones con una arquitectura cliente-servidor.
Que el estudiante desarrolle habilidades en la creación de gramáticas libres del contexto.
Descripción de l p r o b l e m a:
Como parte del avance en la escuela de sistemas de la facultad de Ingeniería de la Universidad de
San Carlos, se pretende crear una herramienta que le permita al tutor académico el análisis del código
fuente de los diferentes proyectos desarrollados por los estudiantes, esto buscando una agilización y
eficiencia en el proceso de búsqueda de copias, dado a que existen clases con una población mayor o
igual a 70 estudiantes.
D e s c r i p c i ón de la s o l u c i ó n:
Se pretende crear un plan piloto para el curso de Org. de Lenguajes y Compiladores 1, utilizando un
analizador de archivos java basado en el método Term Frecuency o frecuencia de aparición de un término,
el cual es la suma de todas las ocurrencias o el número de veces que aparece un término en un documento.
Por lo que es necesario llevar a cabo el análisis y posteriormente crear un reporte por cada análisis
realizado, esto servirá al tutor para demostrar la transparencia en el proceso. Por cuestiones de tiempo y
fin del curso, el plan piloto hará la comparación únicamente entre 2 proyectos a la vez.
Existirá una aplicación de usuario en java a la cual accederá el tutor académico, subirá 2 proyectos para
compararlos. La aplicación enviar la información por sockets al servidor de análisis de java. El servidor de
análisis realizará el proceso de detección de frecuencia de términos la cual devolverá como resultado un
texto en formato json, con el resumen del análisis.
Al recibir el resultado en la aplicación cliente, donde se subieron los proyectos, el tutor académico podrá
realizar un reporte de los datos del análisis y generar una vista html para entrega al encargado de la
unidad de la escuela.
Servidor de Análisis:
Se utilizará Java con flex y cup.
En esta aplicación se analizará código java y tendrá una consola donde reportara errores o eventos del
servidor de análisis, el lenguaje java a analizar contara con las siguientes instrucciones y la sintaxis ya
conocidas de este lenguaje.
1. Imports
Descripción Ejemplo
Importar Clases Java o librerías Import java.util.* ;
Import analsis.AST ;
Tabla No. 1
2. Clases
Descripción Ejemplo
Clases java simples. Visibilidad class clase_ejemplo{
//Sentencias
}
Tabla No. 2
3. Métodos y Funciones
Descripción Ejemplo
Declaración de métodos y funciones. Visibilidad tipo método_funcion(con_o_sin_parametros){
//sentencias
}
Tabla No. 3
4. Declaración de variables
Descripción Ejemplo
Declaración de variables. Visibilidad tipo Lista_de_variables ;
Tabla No. 4
5. Asignaciones
Descripción Ejemplo
La asignación puede ser al momento de Visibilidad tipo Lista_de_variables = expresión ;
declar o después de declarar. O
Lista_de_variables = expresión ;
Tabla No. 5
6. Tipos de datos:
Descripción Ejemplo
Los tipos de datos a utilizar son. Enteros = int
Booleanos = boolean
Cadenas = String
Caracter = char
Decimales = double
Objectos = Object
Donde los objetos son instancias de otras clases.
Tabla No. 6
7. Sentencias de control.
Descripción Ejemplo
Las sentencias de control son son. If ,if else, for, while, do while, switch.
Tabla No. 7
8. Operadores aritméticos
Descripción Ejemplo
Las operadores posibles son Relacionales, lógicos, incremento/decremento,
agrupación.
Tabla No. 8
9. Comentarios
Descripción Ejemplo
Los dos tipos de comentarios, simples y //este es un comentario siemple.
multilinea
/*este
Es multi
linea */
Tabla No. 9
10. Constructor
Descripción Ejemplo
La clase pude tener su contructor donde se Public Nombre_clase(Con_o_Sin_Parametros ){
inicialicen las variables //setencias
}
Tabla No. 10
11. Visibilidad de variables y clases:
Descripción Ejemplo
La visibilidad de las clases y variables. Private, public, protected, final
Tabla No. 11
12. Sentencias de salida.
Descripción Ejemplo
Las dos sentencias de flujo que pueden Break , Return
vernir dentro de un while, for, switch, y
funciones.
Tabla No. 12
13. Llamadas a funciones.
Descripción Ejemplo
Llamadas a métodos y funciones com: Saludar(con_parametros);
Parse(sin_parametros);
Tabla No. 13
NOTA: Se omitirán vectores y matrices, solamente variables sencillas.
Ejemplo Final:
import java.util.*; // comentario simple
Score
Clases repetidas entre proyectos
o Nombre Clase
Variables repetidas entre proyectos
o Nombre variable
o Tipo variable
o Función padre
Variable repetida
Mismo identificador y tipo
Método/Función repetida
Mismo nombre
Mismos parámetros (variables, nombre y tipo)
Misma cantidad de líneas
Comentario repetido
Mismo texto
{ score: [ 0.75 ],
Clases:[ { Nombre: "clase1", Nombre:"clase2"} ],
Variables:[ { Nombre: "var1", Tipo:"int", función: "funcion1", Clase: "clase1"}, {Nombre:
"var2", Tipo:"int",funcion: "funcion2", Clase: "clase2"} ],
Metodos:[ {Nombre: "metodo1",Tipo:"void" , Paremetros: "2"}, {Nombre: "metodo2",Tipo:"Sting",
Parametros:"0"} ],
Aplicación de Usuario:
Aplicación (aplicación de escritorio) del sistema para uso exclusivo del tutor académico para él envió de
análisis de proyectos(carpeta con variaos archivos .java) y generación de reportes. Debe de realizarse en java
y comunicarse con el servidor de análisis utilizando sockets. La aplicación deberá contar con un área donde
se podrá crear, editar, etc. Reportes, estos reportes deben ser escritos utilizando lenguaje HTML y
CPReport (este lenguaje se detalla más adelante).
El lenguaje HTML deberá reconocer como mínimo las siguientes etiquetas:
html
head
body
h1, h2, etc.
title
table
th
td
tr
div
p
br
hr
Nota: Algunas etiquetas pueden venir dentro de otras, por ejemplo: la etiqueta td (Columna o celda de
una tabla) solo puede venir dentro de una etiqueta tr (Fila de una tabla). Si por ejemplo una etiqueta
html está dentro de otra, se deberá reportar error sintáctico.
Dentro de cada una de las etiquetas anteriores se podrán colocar los siguientes atributos:
color
color del fondo de una etiqueta
Ejemplo: <div color=”azul”> </div>
Posibles valores: rojo, amarillo, azul, verde, gris, anaranjado, morado.
textcolor
Color del texto que está dentro de la etiqueta
Ejemplo: <h1 textcolor=”rojo”>
Posibles valores: rojo, amarillo, azul, verde, gris, anaranjado, morado.
align
alineación de los componentes que están dentro de la etiqueta
Ejemplo: <h1 align=”centrado”>
Posibles valores: izquierda, derecha y centrado
font
Fuente del texto que está dentro de la etiqueta
Ejemplo: <h2 font=”Verdana”> </h2>
Posibles valores: Todos los que soporta html
Para poder incrustar código CPReport se deberá de colocar $$ al inicio y al final esto para que no haya
confusión con el código HTML.
Ejemplo:
<html>
<head>
<title>Proyecto1<title>
</head>
<body>
<h1 textcolor=”azul” align=”centrado”> Score</h1>
<br>
<p color=”amarillo”>
El score resultante es: $$ Print(RESULT.score); $$
</p>
</body>
</html>
Lenguaje de CPReport:
El lenguaje de Reportes es un lenguaje utilizado para la manipulación de los resultados obtenidos en
el análisis y poder así generar salidas en consola y un reporte en lenguaje HTML con los datos
del análisis, el resultado será visualizado en un navegador web luego de la compilación de CPReport
y de que no existan errores léxicos, sintácticos y/o semánticos.
Este proceso se realiza en la aplicación de usuario luego de recibir los resultados de análisis de los
proyectos enviados.
Atributos
o Score: double
o VARIABLES
String var = RESULT.variables[0].nombre;
String var = RESULT.variables;
String var = RESULT.variables.nombre;
String var = RESULT.variables.cantidad;
o METODOS->array
String var = RESULT.metodos[0].nombre;
String var = RESULT.metodos;
String var = RESULT.metodos.nombre;
String var = RESULT.metodos.cantidad;
o CLASES->array
String var = RESULT.clases[0].nombre;
String var = RESULT.clases;
String var = RESULT.clases.nombre;
String var = RESULT.clases.cantidad;
Ejemplo:
$$ String Var1 = "El resultado es igual a " + RESULT.Score; $$
Definición
El lenguaje CPReport permitirá tener su propio entorno de programación, en donde se podrán manipular
las variables del objeto RESULT, y reportar acciones en consola.
1. Identificadores y Variables
Consta de uno o más caracteres
El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos los demás pueden
ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas o mayúsculas.
2. Tipos de Dato
3. Declaración de Variables
Las variables serán declarables de la siguiente forma, las opciones dentro de corchetes son opcionales.
También de la forma
Ejemplos
int var1;
int var1 = 5+6*5;
char m= ‘a’;
int var1=2,var2=5*6,var3;
boolean band = (x==var1)
4. Asignación
<nombre_de_la_variable> = <expresión> ;
Ejemplo
var1 = 5+6*5;
var1=va1+2;
var4=var4*2-(2+var2);
boleano1= 5<var2;
5. Casteo automático
Los resultados de tipos para las operaciones con diferente tipo en cualquier orden son las siguientes. Para
los operandos con tipos iguales se mantiene el tipo.
Esto servirá a la hora de asignar un valor y comparar tipos a la variable a asignar.
6. Tipos de operadores
Operadores Aritméticos
Operador Aplicación
< 5.5<5*var3
> Var1>5*var2
<= 5<=5*var3
>= Var1>=5*var2
== Var2==var3
!= Var15!=var2
Tabla No. 17
Operadores Lógicos
Operadores de Incremento/Decremento
Operador Aplicación
++ i++;
-- Var1 = var2--;
Tabla No. 19
Operadores de Asignación
Los operadores de asignación son una forma abreviada de realizar sumas, multiplicaciones y restas de
una expresión con el valor actual de un objeto.
Estos respetaran las mismas reglas que la tabla No. 20
Operador Aplicación
+= Var1 +=var2 +2;
-= Var1 -=var2 +2;
*= Var1 *=var2 +2;
Tabla No. 20
7. Comentarios
Multilinea
Los comentarios multilinea se escriben entre los caracteres barra-asterisco (</) y asteriscobarra (/>).
Ejemplo
</ Este es un comentario
multilinea />
Linea
Los comentarios de una línea se escriben con los caracteres ->
Ejemplo
-> Este es un comentario de una línea
8. Función Print
La función print servirá para mostrar en la consola de programador las variables o mensajes que el tutor
desee.
La sintaxis es la siguiente.
Print (<exp>); Ejemplo:
Print((5+3-5)+2+" hola");
Print("variable1:"+var);
9. Consola de programador
Se deberá de contar con un cuadro de texto para mostrar los eventos de impresión que se realicen desde
la función print y los errores de análisis de proyectos.
Interfaz grafica
El entorno de desarrollo es una aplicación de escritorio que proveerá al usuario final las herramientas
necesarias para escribir el código, editarlo, guardarlo, cargar código rápido previamente escrito y realizar
acciones sobre él.
Reportes:
Reporte de errores léxicos y sintácticos en html (errores del servidor de análisis y de la aplicación
de usuario)
Árbol del archivo Json generado en el servidor de análisis (Utilizando JTree)
Nota: Si existen errores léxicos o sintácticos al momento de analizar los proyectos se deben
mostrar en la consola de la aplicación de análisis.
Sugerencia Aplicación de Análisis
1 2 4
Aplicación de usuario:
Todo el lenguaje HTML
Lenguaje CPReport:
Acceso a la variable RESULT
Declaración de variables
Función Print
Errores léxicos y sintácticos
Gráfica de la estructura Json con JTree
Cargar archivos
Analizar proyectos
Restricciones y Consideraciones
Se usará flex y cup en java para el análisis de cada aplicación de lo contrario NO SE TENDRÁ
DERECHO A CALIFICACIÓN.
Copias de código totales o parciales se reportan a escuela de sistemas y se tendrá nota de 0
Para la comunicación entre las aplicaciones se utiliza sockets.
Entregables
Aplicaciones Java, El nombre debe tener el siguiente formato: [Compi1]Proyecto1_#carnet.JAR
Manuales de Usuario y Técnico
Código Fuente