Pg. 1 Procesadores de lenguajes – Curso 2009/2010 Grupo A1 (Aula 103) – Turno de mañana Práctica optativa Nº 7 – 30/11/2009 Objetivos de la práctica Practicar individualmente con el generador de analizadores sintácticos descendentes ANTLR (http://www.antlr.org/). Utilizar individualmente herramientas de visualización de analizadores sintácticos. Usar individualmente las visualizaciones para ver el comportamiento de los analizadores descendentes. Puntuación en la calificación de prácticas Esta práctica puntúa para la calificación de prácticas optativas en un 20%. Se permite la entrega en cualquier soporte informático utilizable en las aulas de prácticas, incluido correo electrónico (este último a la dirección [email protected] desde la dirección de correo de la universidad: @alumnos.urjc.es). La hora límite de entrega son las 13:00 (GMT+01:00) del miércoles 2 de diciembre de 2009. Actividades a realizar 1. 2. 3. 4. Material para realizar la práctica e instalación de ANTLRWorks (Pg. 1) Familiarización con la herramienta de visualización ANTLR (Pg. 2) Ejercicios (Pg. 7) Cuestionario y entrega de la práctica (Pg. 8) 1. Material de la práctica e instalación de ANTLRWorks Para la realización de esta práctica se proporciona un fichero zip con el siguiente contenido: Carpeta ANTLRWorks: con el ejecutable de la herramienta ANTLRWorks. Fichero CuestionarioANTLRWorks.rtf: cuestionario a rellenar después de completar las tareas de la práctica. Fichero graminicial.g: fichero con la gramática inicial del ejecrcicio 1 en formato ANTLR. Fichero ejemplo.g: fichero con la gramática del ejemplo usado para familiarizarse con ANTLRWorks. Practica7-ANTLRWorks-Puntuable-GrupoA2-30-11-09.pdf: este documento. La herramienta ANTLRWorks viene empaquetada en el archivo antlrworks1.2.2.jar situado en el directorio ANTLRWroks del material de prácticas facilitado. Pg. 2 Basta con guardar este fichero en cualquier ubicación, su ejecución se realiza mediante doble click. 2. Familiarización con ANTLRWorks ANTLRWoks (http://www.antlr.org/works/index.html) es un entorno que, entre otras cosas, permite editar gramáticas utilizables con el generador de analizadores ANTLR, interpretar cadenas de entrada mostrando el resultado y depurar las gramáticas mostrando el proceso de análisis de las cadenas de entrada con esa gramática. Durante este corto tutorial usaremos la gramática incluida en fichero ejemplo.g. Realizaremos los siguientes pasos: 1. En primer lugar se arranca la herramienta ANTLRWorks haciendo doble click sobre el fichero: antlrworks-1.2.2.jar. Después de una ventana de encuesta, aparecerá la ventana principal de la herramienta: Pg. 3 2. Cargar la gramática ejemplo desde el fichero ejemplo.g (proporcionado en el material de prácticas) desde la opción Open del menú File. Una vez cargada la gramática aparece la siguiente pantalla: En la ventana superior derecha podemos ver la gramática, a su izquierda la lista de símbolos terminales (identificados con ) y no terminales (identificados con ). Seleccionando alguno de estos símbolos aparecerá en la parte inferior de la ventana su diagrama. Esta gramática se corresponde con la siguiente: S ::= T id LID ; T ::= int | real LID ::= , id LID | λ 3. Ahora probaremos el intérprete de ANTLRWorks para ver los árboles sintácticos generados. Para ello seleccionar la pestaña “interpreter” en la parte baja de la ventana principal: Pg. 4 Aparecerá una pantalla de nuevo con los símbolos y la gramática, y en la parte inferior los siguientes elementos: Al comienzo encontramos varios controles con la siguiente utilidad: Botón para procesar la cadena de entrada. Selección del axioma de la gramática, ANTLRWorks coge por defecto el primero. Selección del fin de línea apropiado. A continuación encontramos a la izquierda el área de la cadena de entrada, y a su derecha el área de visualización del árbol sintáctico. Para probar una cadena de entrada, en primer lugar fijamos el axioma correcto “s”, los fines de línea en formato Windows e insertamos en el área de la cadena de entrada la cadena: real vble, otravble, otramas; Finalmente seleccionamos el botón de proceso árbol sintáctico correspondiente: y obtendremos la visualización del Pg. 5 Si la entrada fuera errónea aparecerá un nodo MismatchedTokenException para indicar el error. En la siguiente figura hemos introducido dos comas entre las variables “otravable” y “otramas”. 4. A continuación probaremos el depurador de ANTLRWorks para ver el proceso de análisis de las cadenas. Para ello seleccionamos la pestaña “Debugger” en la parte inferior de la ventana principal: Aparecerá la ventana de depurador: La parte inferior de la ventana tiene los siguientes elementos: Controles de avance/retroceso: Puntos de control: Inmediatamente debajo las ventanas de la cadena de entrada, a´rbol sintáctico y la pila. Antes de hacer nada hay que seleccionar la opción Debug… del menú Debugger. Pg. 6 Aparecerá la siguiente pantalla: Donde se pide: la cadena de entrada tecleada (Text) o desde un fichero (File), de nuevo el símbolo del axioma, y el formato del fin de línea. El uso del depurador puede plantear problemas ya que utiliza un puerto de comunicaciones que podría estar inactivo u ocupado. Se puede activar con el sistema operativo o cambiar en la herramienta ANTLRWorks desde la opción “Preferentes” del menú “File” en la pestaña “Debugger”. Si no se ha encontrado ningún problema, usando los controles de avance/retroceso podrá ver el detalle del proceso de análisis de la cadena con tres vistas diferentes: cadena de entrada, árbol sintáctico y pila. Pg. 7 3. Ejercicios: Ejercicio 1: Dada la siguiente gramática para representar expresiones aritméticas: S := F N N ::= + F N | - F N | * F N | / F N | λ F ::= id | cte | ( S ) 1. Construya una visualización donde aparezcan todos los operadores al menos una vez: suma, resta multiplicación, división y paréntesis. Para ello puede usar la gramática en formato ANTLR del fichero: graminicial.g 2. Transforme la gramática (si lo cree necesario) de forma que los operadores tengan las siguientes precedencias: ( ) * / + + Mayor precedencia Ambos, * y /, con la misma precedencia - Menor precedencia Y que todos los operadores binarios tengan asociatividad por la derecha. NOTA: Para que un operando O1 tenga más precedencia que otro O2, los todos consecuentes donde se encuentran los operandos de O1 y el propio operador se deben procesar completamente antes que los consecuentes del operador O2 y sus operandos. A la derecha se ofrece un ejemplo. La asociatividad define la precedencia entre ocurrencias consecutivas de un mismo operador. 3. Documentar el resultado con las visualizaciones que necesarias (1 o varias). Para ello cree un documento Word donde se muestran uno o varios ejemplos con los siguientes elementos: la cadena de entrada. una captura de pantalla (Alt+Impr. Pant. Captura en el portapapeles la ventana activa) donde se muestre la existencia de dichas precedencias y asociatividades. Una explicación textual justificando por qué esa captura muestra la existencia de las precedencias y asociatividades. Pg. 8 4. Cuestionario: En el directorio, así como en el fichero descargado de la página de prácticas encontrará un cuestionario en el documento “CuestionarioANTLRWorks.rtf”. Dicho cuestionario recoge información sobre su experiencia con la herramienta de visualización ANTLRWorks. Responder a este cuestionario es obligatorio, aunque la nota de la práctica no depende de las respuestas dadas en dicho cuestionario. Por favor, rellene el cuestionario con la MAYOR SINCERIDAD posible, gracias. Material de entrega. ¡MUY IMPORTANTE! Identifique su entrega con su nombre o número de expediente y grupo en el que hace la práctica: mañana o tarde. El material entregado comprenderá: El documento resultante de la realización del ejercicio 1. La especificación gramatical ANTLR usada (el fichero *.g). Cuestionario contestado.