Procesadores de lenguajes

Anuncio
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.
Descargar