Trabajando en nuestro Analizador Sintáctico.
Hola que tal mis queridos amigos, gusto de saludarles nuevamente, deseándoles que hayan tenido una linda semana.
Poco a poco se acerca la fecha de entrega del proyecto, y día a día el trabajo se hace más intenso. Como todo buen hondureño! Espero que sepan a que me refiero.
La semana estuvo dedicada al analizador sintáctico CUP, y era de esperarse, que no sería tan fácil. Pero gracias a la ayuda del libro Traductores y Compiladores escrito por Sergio Gálvez Rojas y Miguel Ángel Mora, se nos ha facilitado en buena forma el uso de este poderoso generador de analizadores sintácticos.
Uno de los capítulos que más nos ayudaron fue, el capítulo 4 Gramáticas Atribuidas en donde existe una sección dedicada a CUP muy completa y muy didáctica, de la cual se puede obtener mucho provecho.
El capítulo 6 Tabla de símbolos, nos ha servido muchísimo para tomar una idea en torno a la creación de la tabla de símbolos.
En cuanto al trabajo ya en el archivo .cup, les quiero contar que, ya se ha copiado íntegramente la gramática proporcionada en la descripción del proyecto, así también, como la declaración de los símbolos terminales y los no terminales.
Una vez hecho esto, falta lógicamente programar el código que va a estar por ejemplo dentro de las cláusulas parser code {: :}, init with {: :} y algunas otras mas. En relación al código java que va a ir dentro de esas cláusulas que les dije anteriormente, ya se tiene una idea, por lo que se esta trabajando en eso.
En relación a la tabla de símbolos, ya se ha elegido una estructura para su representación; la cual será un objeto HashTable. Y en donde introduciremos objetos de la clase cToken que la hemos creado específicamente para guardar cada token que reconozca nuestro analizador léxico. Así mismo hemos creado funciones para mostrar mensajes de error personalizados, las cuales darán a conocer al usuario: la línea, columna y el nombre del token que ha sido el culpable de que se generará x ó y error en el código fuente.
Hablando un poco de la gramática del micro-C, hemos detectado algunas inconsistencias a nuestro parecer, como el hecho de en el interior del cuerpo de una función se puedan declarar otras funciones, y según de lo que yo recuerdo de C++ esto no era posible, pero voy a revisar más detenidamente, porque la verdad es que no estoy completamente seguro de lo anterior. Además detectamos que dentro de una función podemos generar código como el siguiente: Identifier == Identifier = Identifier == Identifier el cual no sé, si es un error sintáctico, o un error semántico, ya que no creo que sea correcto.
Bueno y aquí paramos, fue un placer compartirles estos pocos renglones en relación al avance en nuestro proyecto, y espero verlos por acá en los próximos días.
Saludos!
Hola que tal mis queridos amigos, gusto de saludarles nuevamente, deseándoles que hayan tenido una linda semana.
Poco a poco se acerca la fecha de entrega del proyecto, y día a día el trabajo se hace más intenso. Como todo buen hondureño! Espero que sepan a que me refiero.
La semana estuvo dedicada al analizador sintáctico CUP, y era de esperarse, que no sería tan fácil. Pero gracias a la ayuda del libro Traductores y Compiladores escrito por Sergio Gálvez Rojas y Miguel Ángel Mora, se nos ha facilitado en buena forma el uso de este poderoso generador de analizadores sintácticos.
Uno de los capítulos que más nos ayudaron fue, el capítulo 4 Gramáticas Atribuidas en donde existe una sección dedicada a CUP muy completa y muy didáctica, de la cual se puede obtener mucho provecho.
El capítulo 6 Tabla de símbolos, nos ha servido muchísimo para tomar una idea en torno a la creación de la tabla de símbolos.
En cuanto al trabajo ya en el archivo .cup, les quiero contar que, ya se ha copiado íntegramente la gramática proporcionada en la descripción del proyecto, así también, como la declaración de los símbolos terminales y los no terminales.
Una vez hecho esto, falta lógicamente programar el código que va a estar por ejemplo dentro de las cláusulas parser code {: :}, init with {: :} y algunas otras mas. En relación al código java que va a ir dentro de esas cláusulas que les dije anteriormente, ya se tiene una idea, por lo que se esta trabajando en eso.
En relación a la tabla de símbolos, ya se ha elegido una estructura para su representación; la cual será un objeto HashTable. Y en donde introduciremos objetos de la clase cToken que la hemos creado específicamente para guardar cada token que reconozca nuestro analizador léxico. Así mismo hemos creado funciones para mostrar mensajes de error personalizados, las cuales darán a conocer al usuario: la línea, columna y el nombre del token que ha sido el culpable de que se generará x ó y error en el código fuente.
Hablando un poco de la gramática del micro-C, hemos detectado algunas inconsistencias a nuestro parecer, como el hecho de en el interior del cuerpo de una función se puedan declarar otras funciones, y según de lo que yo recuerdo de C++ esto no era posible, pero voy a revisar más detenidamente, porque la verdad es que no estoy completamente seguro de lo anterior. Además detectamos que dentro de una función podemos generar código como el siguiente: Identifier == Identifier = Identifier == Identifier el cual no sé, si es un error sintáctico, o un error semántico, ya que no creo que sea correcto.
Bueno y aquí paramos, fue un placer compartirles estos pocos renglones en relación al avance en nuestro proyecto, y espero verlos por acá en los próximos días.
Saludos!

0 Comments:
Post a Comment
<< Home