Analizador Sintactico

ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INFORMÁTICA DE OVIEDO CURSO ACADÉMICO: 2005-2006 TEORÍA DE AUTÓMATAS Práct

Views 89 Downloads 4 File size 95KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INFORMÁTICA DE OVIEDO CURSO ACADÉMICO: 2005-2006

TEORÍA DE AUTÓMATAS

Práctica 3: Analizador Sintáctico

1

1

PRELIMINARES

Al igual que en la práctica anterior vamos a trabajar en Petra bajo el sistema operativo Linux. La herramienta que vamos a conocer es CUP, que se encuentra instalada. Por tanto, es necesario que se conecte a Petra, donde ya tiene abierta una cuenta por ser alumno de la EUITIO. Para conectarse desde Windows puede usar el programa putty y en el cuadro de texto Host Name, escribir petra.euitio.uniovi.es Para comenzar a trabajar, en primer lugar crearemos un directorio llamado practica3 y será ahí donde realizaremos la práctica. Para crear el directorio, puede hacerlo con la siguiente orden mkdir practica3. Para situarse en el directorio recién creado, puede ejecutar cd practica3. A partir de este momento trabajaremos siempre en este directorio. En primer lugar, copiaremos en él los ficheros de trabajo con la siguiente orden (3 palabras): cp /var/www/asignaturas/teo.aut/practicas/Practica3/* . Para ver los ficheros que tiene en el directorio, puede utilizar la orden dir o la orden ls –al. Cuando necesite editar y/o modificar un fichero, puede utilizar cualquiera de los editores de texto que están instalados en Petra (vi, emacs, ...). Quizá el que resulte más sencillo si nunca ha trabajado en un entorno Linux es joe. Para abrir un fichero que se llame "fichero.txt" basta con ejecutar joe fichero.txt (si fichero.txt no existe, lo crea) y ya puede escribir en él. Para grabar los cambios y salir del programa basta con pulsar "Ctrl+k" y luego "x". Puede acceder a la ayuda pulsando "Ctrl+k" y luego "h" Por último, si nota un comportamiento raro en el editor (la pantalla no se desplaza bien, parece que desaparecen caracteres,...) es posible que tenga que indicar el tipo de terminal que estamos usando escribiendo: export TERM=vt100 Para terminar la sesión en petra, no olvide: exit

2

2

CUP: GENERADOR DE ANALIZADORES SINTÁCTICOS

2.1 CUP CUP es una utilidad disponible para LINUX que es capaz de generar analizadores sintácticos, es decir, construye, de forma rápida y sencilla programas que analicen las cadenas que aparecen en un fichero de texto y compruebe que son sintácticamente correctas con respecto a una determinada gramática. El analizador sintáctico que generemos utilizando CUP podrá, además del análisis, realizar diversas acciones según se vallan reconociendo las cadenas. Realmente este tipo de herramientas están pensadas para construir compiladores y por tanto son de gran potencia y flexibilidad. CUP sigue una forma de funcionamiento similar a la del JLex: toma como entrada un fichero de especificación en el que se incluye una gramática y genera un analizador sintáctico escrito en java que, lógicamente, podremos compilar y ejecutar. Gráficamente el esquema de funcionamiento para trabajar con Cup es el siguiente:

Fichero de especificación Asintactico.cup (la gramática)

CUP

Analizador sintáctico (código Java) Asintactico.java

javac

Fichero de Texto a analizar ENTRADA.TXT

Analizador sintáctico (código ejecutable)

Resultado del análisis

El analizador sintáctico construido procesará el fichero de texto que queramos analizar (entrada.txt) comprobando que su contenido es sintácticamente correcto con respecto a la gramática que habremos especificado en el fichero de entrada para CUP.

2.2 CONSTRUCCIÓN DEL ANALIZADOR SINTÁNTICO Veamos cómo se realiza este proceso de construcción de un analizador sintáctico mediante el uso de Cup. Los pasos son los siguientes: 1. Se edita un fichero de texto que se suele denominar fichero de especificación (A_sintactico.cup) para CUP, en el que se especifica, fundamentalmente, una gramática (VT, VN, S, P). Para ello diremos cuáles son los símbolos terminales (VT), los no-terminales (VN), el axioma o símbolo inicial de la gramática (S) y por último el conjunto de reglas de producción o gramaticales. Además podremos incluir código java que podrá ser ejecutado posteriormente en el proceso de análisis.

3

2. Se ejecuta CUP dándole como entrada el anterior fichero de especificación. En caso de no encontrar errores CUP genera un programa escrito en java que contiene el analizador sintáctico que pretendemos construir. java java_cup.Main a_sintactico.cup Genera dos ficheros java que implementan el analizador sintáctico: parser.java y sym.java. 3. Como ya comentamos anteriormente los analizadores sintácticos se complementan con los analizadores léxicos. La idea es que al analizar sintácticamente un texto (un posible programa) el analizador sintáctico le pide al léxico que vaya leyendo el texto y que le diga qué es lo que va encontrando, por ejemplo: un número real (3.4e7), un entero (123), un identificador (resul), un operador de menor o igual (