domingo, febrero 27, 2005

Validaciones del Lexer y la Gramática del Parser

El lexer.. sé que a estas alturas MiLexer debe ya de estar terminado pero aun me faltan algunas validaciones:
- que los ID tengan una longitud <=12
- que los ID no sean "iguales"

Para esto y las otras validaciones (ID no declarado, existencia del main), pienso que debo implementar la gramática primero, asi que, en eso estoy "corrigiendo" la gramática:
quitandole ambiguedades y recursión por la izquierda.
Para la parte de los operadores, hasta donde he visto la gramática cumple con la "receta" vista en clase, solo en una parte no, cuando decia que A1->A1 op A2 | A2 si asociaba por la izquierda y A1->A2 op A1| A2 cuando asociaba por la derecha.
En la G del proyecto esta A1->A2 op A2| A2, estuve probandola un poco y funciona pero no se aún, si debo cambiarla; aunque del modo en que esta me ahorro la recursión izquierda ;) .

Ademas estoy leyendo para saber como implementar la tabla de Simbolos, sé que me espera mucho, mucho, trabajo pero con la ayuda de Dios lograré terminar.

viernes, febrero 18, 2005

..... LEXER

Pude resolver el Warning que me lanzaba con las reglas del lexer, la verdad era un error de ambiguedades.. lo siento fue puro descuido mio, pero ya lo arregle.
Ahora tengo problemas con las palabras reservadas, las declaré en el área de "Tokens" del analizador, pero cuando lo corro y el Lexer comienza a recorrrer el input siempre me los reconoce como ID, es decir que no le das prioridad.
La regla de los ID la tengo declarada de último, hasta donde tengo entendido asi se le da menos prioridad, tambien tengo activada la opcion:
options {testLiterals=true;}
Ojala logre arreglarlo antes del Lunes para poder avanzar con le proyecto.. :(

Respecto a la tarea, ppdr para la gramática 3.11 del libro de Appel, la solución teórica de la gramática estuvo fácil, pero la implementación con el Lexer de ANTLR no se me hizo tan "facil", pero me sirvio para entender un poco sobre como hace ANTLR el Parser y su interacción con el Lexer.

lunes, febrero 14, 2005

Amistad !

Saludos..
Para todos los que vean mi blog hoy, Feliz Dia de la Amistad.
suerte en el proyecto de Compiladores a mis compañeros..

viernes, febrero 11, 2005

El Lexer !

Experimentando("prueba->error") aprendí que el Analizador Léxico y Sintáctico siempre van en un archivo ".g",también probe que, si coloco este archivo.g en un paquete específico no funciona. Hace poco lei que es en el encabezado que se especifica a quien pertenecen, Asi:
header {
package mipaketito;
}
Aun no lo pruebo pero me parece que asi es.
Lo primero que debo hacer en el proyecto es el Lexer, ya lo empeze y crei que esta era la parte "facilita" del proyecto,pero me ha dado algunos problemitas...
Con la definición de Tokens que unicamente utilizan simbolos terminales en sus expresiones Regulares, no hay ningún problema, pero los demas como las "Constantes Numéricas" (ER=digito+), el Eclipse me lanza un Warning como este: " lexical nondeterminism between rules DIGITO and INT_CONST upon k==1:'0'..'9' k==2:"
En el manual en Ingles de ANTLR, hablan sobre esto pero no entendi como arreglarlo. Tengo k=2 en la definición de las opciones pero no se que pasa.

Según lo que lei en el Manual en Español, las palabras reservadas se declaran en el área de "TOKENS {}" del archivo ".g" . Aún no termino de entender esta clasificación, pero pienso que es por optimización.
Que interesante esta eso de poder establecer reglas para uso exclusivo del Lexer, por ejemplo los espacios en blanco, que como ya sabemos no le interesan a nadie, podemos "dejarlos" en el primer análisis con la palabra reservada "protected". Esta optimización me parece fabulosa ya que ni si quiera se crean tokens.
No me cabe duda que ANTLR es una herramienta poderosa, pobres los que no tuvieron la dicha de usarla en cursos de compiladores anteriores, creo que se le complico mucho mas su 'compiladorsito'.
Esta es una de las razones por la que me gusta la carrera, siempre tratamos de facilitarle las cosas a los demas, desarollando aplicaciones que hagan los trabajos mas "dificiles".

sábado, febrero 05, 2005

Interesante Proyecto ;)

Ya lei el enunciado del proyecto, cree mi Java Proyect, lo converti en un proyecto ANTLR, creé una clase llamada Lexer, ..... es un corto avance creo
La verdad aún no me queda claro como programarlo, teoricamente se que debo definir mis tokens, recorrer el input e ir reconociendo los tokens para pasarselos al paser.
Pero aun estoy leyendo el manual del ANTLR, para entender todas las utilidades que me ofrece.

El proyecto en general se ve super interesante, en ninguna otra clase me habia tocado aplicar tantas cosas de otras clases, como dicen "uno no sabe para que son las clases hasta que aplica lo que aprendió."

Hay una parte que aun no me queda claro, es hasta que punto vamos a llegar en compiladores I, sé que van el Lexer, Parser, Modulo de errores y TdS, pero no sé que tan lejos (Código Objeto) llegaremos.


JavaDoc!!!!

Esta es una herrmienta muy útil, sobre todo para nosotros los de la carrera de Sistemas que casi nunca documentamos lo que hacemos.
Eclipse, proporciona una interfaz bastante amigable para la generacion de esta documentación. Aun me falta mucho por aprender de esta herramienta, pero lo que pude apreciar fue que hay que especificar "tags" (autor, version, etc.) si se desea información detallada, o simplemente colocar comentarios sobre cada función, ya que esta es una parte de la informacion que se desplegara.
Una vez que se ejecuta "Javadoc" se generan una serie de Paginas Web, entre las cuales está un índice, un página de ayuda y una página por cada clase que pertenece al proyecto. Esta página de cada clase, contiene descripción de la clase, de sus métodos, constructores, etc.
En general nos proporciona información detallada de lo que programamos, de una manera fácil y rápida.
Ahora me gusta esto de documentar.